容器内部再运行Docker(DinD和DooD)
场景
宿主机的docker启动了linux系统,需要在linux中使用docker
解决方案
DinD:容器内部独立运行 Docker 守护进程,实现容器系统中的 Docker 使用
DooD:在容器里用宿主机 Docker,不安全,隔离性差,不适合生产环境
区别
维度 | DooD(挂载宿主机 Docker Socket) | DinD(独立 daemon) |
---|---|---|
原理 | 容器 CLI 直接调用宿主机 Docker Daemon | 容器内再跑完整 Docker Daemon |
性能 | 无额外开销,性能最好 | 嵌套存储,I/O 放大 |
资源占用 | 低(无额外 daemon) | 高(多一个 daemon + overlay 嵌套) |
隔离性 | 差(容器实际跑在宿主机,互相可见) | 好(完全独立网络、存储) |
安全性 | 低(容器≈root,可操控宿主机 Docker) | 高(容器内隔离,仅 --privileged 风险) |
启动参数 | -v /var/run/docker.sock:/var/run/docker.sock | --privileged --restart=unless-stopped -p 2376:2376 |
适用场景 | 本地快速构建、调试、一次性任务 | GitLab/Jenkins CI、测试沙箱、共享 Runner |
如何使用
以下描述的是核心步骤,中间遇到的其他问题请deepseek
宿主机启动容器的命令增加参数
DooD模式:-v /var/run/docker.sock:/var/run/docker.sock
DinD模式:–privileged --restart=unless-stopped -p 2376:2376
进入容器安装docker cli
不管哪个模式这个步骤都要做
# 1. 进入容器
docker exec -it 容器id bash# 2. 安装 Docker CLI(和 Daemon),这个命令基于Ubuntu,其他种类linux请自行deepseek
apt update && apt install -y docker.io# 3. 验证
docker ps