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 also recommends Kaniko

我把工作的秘诀留给那些对 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