docker:latest和docker:dind有什么区别


本文摘自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

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

66dc2d45749a        8 weeks ago         /bin/sh -c #(nop)  CMD []                       0B                 

<missing>           8 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["dockerd-entr…   0B                 

...

在 run 该镜像时,不能指定 sh CMD 参数,dockerd-entrypoint.sh 命令接收到该参数并不会启动 Docker daemon。想要正确启动容器里的 Docker daemon 并且进入容器需要分步进行:

1

2

3

$ docker run -d --name dind --privileged docker:dind # 启动容器

$ docker logs -f dind # 查看启动日志

$ docker exec -it dind sh # 进入容器

启动 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》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...