DOCKER INSIDE DOCKER 方法 3:使用 Sysbox Runtime 在 Docker 中运行 Docker

2025-06-09

Docker 内部

方法 3:使用 Sysbox Runtime 在 Docker 中使用 Docker

有时我们希望 Docker 内部运行。例如:CI 管道、用于 CI/CD 管道的 Jenkins 基于 Docker 的动态代理、沙盒环境或实验工作站。

这里有三种方法。(1) 和 (2) 需要加强安全保护,因为它们对你的 Docker 守护进程拥有更高的权限。你可以在 Docker 中使用防火墙,或者将其设置为无 root 权限。

以下文章可以帮助您:

在方法 3 中,我们将使用 sysbox。

方法 1:在 Docker 中使用 [/var/run/docker.sock]

如果您与 Docker 守护程序运行在同一主机上,则可以使用 /var/run/docker.sock 来管理容器。

要在 docker 中运行 docker,您只需使用默认的 Unix 套接字 docker.sock 作为卷运行 docker。

docker run -v /var/run/docker.sock:/var/run/docker.sock \
           -ti docker
Enter fullscreen mode Exit fullscreen mode

现在,您应该能够从容器内部执行 docker 命令来构建图像并将其推送到注册表。

以交互模式启动 Docker 容器,并将 docker.sock 作为卷挂载。我们将使用官方 Docker 镜像。

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

#Inside Container

docker pull ubuntu

#When you list the docker images, you should see the ubuntu image along with other docker images in your host VM

docker images

# Now create a Dockerfile inside test directory
and RUN DOCKER FILE
docker build -t test-image .
Enter fullscreen mode Exit fullscreen mode

方法 2:使用 dind 在 Docker 中运行 Docker

注意:这要求您的容器在特权模式下运行。

docker run --privileged -d --name dind-test docker:dind
docker exec -it dind-test /bin/sh
docker pull ubuntu
docker images
mkdir test && cd test
vi Dockerfile
#Create Docker file and then run
docker build -t test-image
Enter fullscreen mode Exit fullscreen mode

方法 3:使用 Sysbox Runtime 在 Docker 中使用 Docker

由于方法 1 和方法 2 以特权模式运行基础容器,因此在安全性方面存在一些缺点。Nestybox 尝试通过 sysbox Docker 运行时来解决这个问题。不过,通过防火墙实现,您可以获得一个安全层。请查看我上面的文章。

(1)获取
基于开源 Sysbox 的 Sysbox CE 社区版。

GitHub 徽标 nestybox / sysbox

开源的下一代“runc”,使无根容器能够像虚拟机一样运行 Systemd、Docker、Kubernetes 等工作负载。

系统箱

GitHub 许可证 构建状态

介绍

Sysbox是一个开源且免费的容器运行时(一种专门的“runc”),最初由 Nestybox(于 2022 年 5 月被 Docker 收购)开发,它通过两种主要方式增强容器:

  • 改善容器隔离:

    • 所有容器上的 Linux 用户命名空间(即容器中的 root 用户在主机上没有权限)。

    • 虚拟化容器内的 procfs 和 sysfs 部分。

    • 隐藏容器内的主机信息。

    • 锁定容器的初始安装等等。

  • 使容器能够运行与虚拟机相同的工作负载

    • 使用 Sysbox,容器可以无缝且安全地运行系统级软件,例如 systemd Docker、Kubernetes、K3s、buildx、旧版应用程序等。

    • 该软件可以在 Sysbox 容器内运行,无需修改,也无需使用软件的特殊版本(例如无根变体)。

    • 没有特权容器、没有复杂的图像、没有棘手的入口点、没有特殊的卷挂载等。

可以将其视为“容器增压器”:它使您现有的容器管理器/...

在撰写本文时,支持的发行版有:
Ubuntu Bionic(18.04)、Ubuntu Focal(20.04)、Debian Buster(10)、Debian Bullseye(11)、Fedora 31、Fedora 32、CentOS 8

安装:

git clone --recursive git@github.com:nestybox/sysbox.git
make sysbox
sudo make install
#Once Sysbox is installed, you start it with:
sudo ./scr/sysbox
#Configuring Docker
sudo ./scr/docker-cfg --sysbox-runtime=enable

Enter fullscreen mode Exit fullscreen mode

(2)使用 SYSBOX

docker run --runtime=sysbox-runc --name sysbox-dind -d docker:dind
docker exec -it sysbox-dind /bin/sh
Enter fullscreen mode Exit fullscreen mode

恭喜 :)

这是一篇很好的文章

补充:
我是这次会议的与会者之一。您可以找到联合创始人关于 sysbox 的演讲https://bluejeans.com/s/Qq_IsjrnOaG 20.05 分钟

点击此处加入我的团队

鏂囩珷鏉ユ簮锛�https://dev.to/manishfoodtechs/docker-inside-docker-57fj
PREV
Docker 中的完整桌面进一步阅读...
NEXT
从头开始创建类似 Google Cloud 和 Digital Ocean 的云基础设施:第 1 部分