抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

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 的深度。

实现思路

实际上我们并不需要在 CI/CD 服务器上安装 Docker。通过上面的命令在 CI/CD 服务器上运行我们的镜像:

docker run -v /var/run/docker.sock:/var/run/docker.sock

Docker 采取的是 C/S 架构,Docker 的成功运行需要 Docker Daemon 和 Docker Client 的支持,当我们运行一些 docker build 等命令时,实际需要 Docker Client 连接 Docker Daemon 发送命令,Docker Daemon 会在宿主机操作系统分配文件、网络资源:

评论