本文介绍在 Docker 中使用 Docker(Docker in Docker)的一种实现方法。


1. 架构

docker-in-docker-arch.jpg

Docker 本身是 C/S 架构的。docker 命令本质上是一个命令行客户端,它将用户请求发送给 dockerd 服务,真正做事情的是 dockerd。因为 dockerd 监听本机的 Unix Socket,docker 请求本机的 dockerd,所以给人带来的感觉是 docker 命令做了全部事情。


2. 启动 dockerd

在单独的服务器启动 dockerd,并使其绑定一个 TCP Socket。比如:


3. 在容器中访问外部的 dockerd

下面是一个 Python(3.10)示例。

项目结构:

Dockerfile:

main.py:

其中 X.X.X.X:Port 需要被替换成运行 dockerd 的服务器的 IP 地址和 dockerd 监听的端口。


4. 测试

打测试镜像:

启动容器:

在容器中执行:

输出类似:

查看在容器中创建的镜像(在运行 dockerd 的服务器上执行):