docker@dind(docker in docker)
docker-dind
是 “Docker in Docker” 的简称,即在 Docker 容器内部运行 Docker 守护进程,使容器可以自己运行 Docker 命令(例如 docker build
, docker run
等)。在 CI/CD(比如 GitLab CI、Jenkins)中很常见,用于构建镜像或运行子容器。
docker-image
基本用法:运行 docker-dind 容器
1 | docker run --privileged --name dind-test -d docker:dind |
参数解释:
--privileged
: 必须,让容器有更高的权限来运行 Docker 守护进程docker:dind
: Docker 官方提供的 dind 镜像-d
: 后台运行--name
: 给容器起名方便管理
让容器内能执行 docker
命令
方式 1:使用 docker:dind
镜像(自带 dockerd
)
1 | docker run --privileged -d docker:dind |
方式 2:挂载宿主机的 Docker 套接字(推荐)
这种方式不是真正的 Docker-in-Docker,但更安全和高效:
1 | docker run -it --rm \ |
这个方式本质上是:容器使用宿主机的 Docker 守护进程,所以不需要 --privileged
权限。
⚠️ 安全注意
- 使用
--privileged
会让容器获得宿主机的几乎所有权限,有安全隐患。 - 在 CI 中建议使用 挂载 Docker 套接字 的方法,除非你确实需要完全隔离的 Docker 环境。