docker:latest 和 docker:dind 镜像区别

458 阅读1分钟

docker:dind

该镜像包含 Docker 客户端(命令行工具)和 Docker daemon。

通过 docker history docker:dind 命令我们发现 docker:dind 是在 docker:latest 基础上又安装了 Docker daemon,并且最后两个构建命令为:

image.png

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

$ 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

通过 docker history docker:latest 命令发现 CMD 默认为 sh

image.png

启动不需要 --privileged 参数

  • 启动方式一
$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock docker:latest
  • 启动方式二
docker run --privileged -e DOCKER_TLS_CERTDIR="" -d -it --name dockerd docker:dind 
docker run --rm -it --link dockerd:docker docker:latest sh