Docker 技术目前在 DevOps 中被广泛使用,我们需要将测试或者构建的代码和自动化脚本打包成 Docker 镜像,然后部署在各个运行环境中。
而在 CI/CD 中,我们常用一些 CI/CD 服务器,比如 Jenkins 和 GoCD 来构建与部署我们的应用,从而实现 CI/CD 自动化。现在一些 CI/CD 服务器也被 Docker 化运行在真实的物理机上。于是我们需在 CI/CD 服务器的 Docker container 里面来 build 与 run 我们的 Docker 镜像,这就涉及到 Docker in Docker 问题。
一个很自然的想法:我们是不是需要在 CI/CD 服务器镜像中安装一个 Docker Daemon 和 Docker 命令?但是 Docker 里面跑 Docker 总感觉有些蹩脚,额外安装与运行 Docker 无疑增加了 CI/CD 服务器镜像的大小,同时还增加了 Docker 的深度。