Docker in Docker
- 2025-04-22 19:49:00
- 丁国栋
- 原创 19
介绍文档:https://www.docker.com/resources/docker-in-docker-containerized-ci-workflows-dockercon-2023/
镜像文档:https://hub.docker.com/_/docker
Docker in Docker(DinD)是一种在 Docker 容器内部运行 Docker 守护进程(Docker Daemon)的技术。它通常用于 CI/CD 流水线、测试环境或需要嵌套容器化的场景。
1. 核心原理
嵌套容器化:在宿主机的一个容器中启动另一个独立的 Docker 环境(包括 dockerd 守护进程)。
直接使用宿主机 Docker:通过挂载宿主机的 Docker 套接字(/var/run/docker.sock)到容器内(称为 DooD,Docker outside of Docker),容器内的 Docker 客户端直接与宿主机 Docker 通信。
2. 典型用途
CI/CD 流水线(如 GitLab CI、Jenkins):在容器化的构建环境中动态创建和管理容器。
开发/测试环境:快速构建多容器应用的测试场景。
沙盒环境:隔离的容器操作,避免污染宿主机。
docker run --privileged --name dind -d docker:dind
容器内运行独立的 dockerd。需要 --privileged 权限,仅在受信任环境使用,或通过安全策略(如 SELinux、AppArmor)限制。
特权模式风险:DinD 需要 --privileged,容器可能获得宿主机控制权。