Gitlab 运行 docker 里面 docker
Gitlab run docker inside docker
我正在使用 gitlab 9.3.3-ce.0 和带有 docker 执行器的 gitlab runner。我想在这个 docker-executor 中构建图像。怎么做?
我正在尝试使用 /etc/gitlab-runner/config.toml
内部的此部分连接到外部 docker:
[runners.docker]
tls_verify = false
image = "java:8"
privileged = true
disable_cache = false
volumes = ["/var/images", "/var/lib/docker:/var/lib/docker",
"/var/run/docker.sock:/var/run/docker.sock",
"/usr/bin/docker:/usr/bin/docker"]
shm_size = 0
但是当我尝试在 docker docker info
中执行时,我得到:
/usr/bin/docker: No such file or directory
但它应该存在:
$ which docker
/usr/bin/docker
您需要在docker服务中使用docker:
image: docker:latest
# When using dind, it's wise to use the overlayfs driver for
# improved performance. - THIS DOES NOT ALWAYS WORK!
variables:
DOCKER_DRIVER: overlay
services:
- docker:dind
before_script:
- docker info
build:
stage: build
script:
- docker build -t my-docker-image .
- docker run my-docker-image /script/to/run/tests
见https://docs.gitlab.com/ce/ci/docker/using_docker_build.html#use-docker-in-docker-executor
事实证明,通过 apt-get 默认安装的 docker 在 docker 本身内部是不可见的,因此安装并使用了单独的独立 docker。
正如接受的回复所说,docker in docker 是解决方案。
然而,在 docker 中使用 docker 时需要做出一些牺牲,在我看来,有一个更好的选择:Kaniko 项目
您可以使用 kaniko 图像并使用它轻松构建 docker 图像。
这是我使用 Gitlab 和 CI/CD 使用 Kaniko 录制的一些视频。在 30:45 https://youtu.be/Gb96kKN8BoI?t=1848 你可以看到这个例子。
我把工作的秘诀留给那些对 GitLab docker dind 模式有问题的人,最近变得不稳定:
build:
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
我正在使用 gitlab 9.3.3-ce.0 和带有 docker 执行器的 gitlab runner。我想在这个 docker-executor 中构建图像。怎么做?
我正在尝试使用 /etc/gitlab-runner/config.toml
内部的此部分连接到外部 docker:
[runners.docker]
tls_verify = false
image = "java:8"
privileged = true
disable_cache = false
volumes = ["/var/images", "/var/lib/docker:/var/lib/docker",
"/var/run/docker.sock:/var/run/docker.sock",
"/usr/bin/docker:/usr/bin/docker"]
shm_size = 0
但是当我尝试在 docker docker info
中执行时,我得到:
/usr/bin/docker: No such file or directory
但它应该存在:
$ which docker
/usr/bin/docker
您需要在docker服务中使用docker:
image: docker:latest
# When using dind, it's wise to use the overlayfs driver for
# improved performance. - THIS DOES NOT ALWAYS WORK!
variables:
DOCKER_DRIVER: overlay
services:
- docker:dind
before_script:
- docker info
build:
stage: build
script:
- docker build -t my-docker-image .
- docker run my-docker-image /script/to/run/tests
见https://docs.gitlab.com/ce/ci/docker/using_docker_build.html#use-docker-in-docker-executor
事实证明,通过 apt-get 默认安装的 docker 在 docker 本身内部是不可见的,因此安装并使用了单独的独立 docker。
正如接受的回复所说,docker in docker 是解决方案。
然而,在 docker 中使用 docker 时需要做出一些牺牲,在我看来,有一个更好的选择:Kaniko 项目
您可以使用 kaniko 图像并使用它轻松构建 docker 图像。 这是我使用 Gitlab 和 CI/CD 使用 Kaniko 录制的一些视频。在 30:45 https://youtu.be/Gb96kKN8BoI?t=1848 你可以看到这个例子。
我把工作的秘诀留给那些对 GitLab docker dind 模式有问题的人,最近变得不稳定:
build:
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA