本文摘自PHP中文网,作者V,侵删。
背景:
在编写 CI 时通过声明镜像作为 job 的执行环境,每个 job 都在一个纯净的容器中执行。
有时,我们需要一个 docker 容器环境来执行 docker build、docker push 等操作。查看官方的 docker 镜像,我们发现存在两个主要的版本:docker:latest、docker:dind 和 docker:git。
(推荐教程:docker教程)
docker:dind
该镜像包含 Docker 客户端(命令行工具)和 Docker daemon。
通过 docker history docker:dind 命令我们发现 docker:dind 是在 docker:latest 基础上又安装了 Docker daemon,并且最后两个构建命令为:
1 2 3 4 |
|
在 run 该镜像时,不能指定 sh CMD 参数,dockerd-entrypoint.sh 命令接收到该参数并不会启动 Docker daemon。想要正确启动容器里的 Docker daemon 并且进入容器需要分步进行:
1 2 3 |
|
启动 docker:dind 容器时,参数 --privileged 必须加上,否则 Docker daemon 启动时会报错。
docker:latest
该镜像只包含 Docker 客户端,需要有 Docker daemon 支持,可以使用 docker:dind 的,也可以挂载宿主机的 /var/run/docker.sock。
该镜像启动不需要 --privileged 参数。
通过 docker history docker:latest 命令发现 CMD 默认为 sh:
相关阅读 >>
docker:latest和docker:dind有什么区别
更多相关阅读请进入《docker:latest》频道 >>