docker@docker:dind-rootless镜像
🔹 1.docker:dind 是什么?
- 全称是 Docker-in-Docker
- 作用:在容器中运行 Docker 守护进程 (
dockerd),从而在容器内运行其他容器 - 常用于 CI/CD 流水线(如 GitLab CI)中,便于在容器中构建、运行其他容器
🔸 2.docker:dind-rootless 是什么?
- 是
docker:dind的 Rootless 版本 - 在容器中运行 Docker 守护进程,但不是以 root 身份运行
- 提供了更高的安全性,适用于受限环境(如 Kubernetes、CI 共享 runner)
✅ 3.特点
| 特性 | 描述 |
|---|---|
| 🔐 更安全 | dockerd 和容器运行在非 root 用户下,减少宿主机暴露面 |
| 🔁 支持 Docker-in-Docker | 可在容器中运行 Docker 容器,适用于 CI 构建等场景 |
| ⚠️ 受限端口 | 无法直接绑定 <1024 的端口,如 80、443(除非配置权限) |
| 📦 镜像来源 | Docker Hub: docker:dind-rootless(是官方镜像的 tag) |
🚀 4.示例用法
1 | docker run --privileged --name dind-rootless -d \ |
然后可以进入容器使用 docker 命令:
1 | docker exec -it dind-rootless sh |
注意:
--privileged可能仍需要(为了解决用户命名空间或文件系统挂载问题)- 要使用
docker命令,需要设置环境变量DOCKER_HOST
必须设置,docker.socket在非默认路径下
🧩 5.和普通 dind 的区别
| 对比项 | docker:dind |
docker:dind-rootless |
|---|---|---|
| 是否需要 root | 是 | 否(内部以非 root 用户运行) |
| 安全性 | 较低 | 更高 |
| 使用复杂度 | 较低 | 稍高(可能需要更多配置) |
| 是否能绑定 80/443 端口 | 是 | 否(除非配置特权) |
如果你打算在 Kubernetes 中以非特权模式部署 CI 任务,或者在 安全性要求较高的环境下使用 Docker-in-Docker,docker:dind-rootless 是非常合适的选择。