
cruizba/ubuntu-dind Follow]([]
基于Ubuntu的Docker镜像,用于在容器内部运行Docker容器,并提供以下额外特性:
[!WARNING]
--privileged选项不安全,仅用于开发或测试目的。 安全的正确做法:[***]
docker run -it --privileged cruizba/ubuntu-dind
或使用sysbox:
docker run -it --runtime=sysbox-runc cruizba/ubuntu-dind
focal、jammy和noble)本项目的灵感来源于两个现有仓库:
有时需要在Docker容器内运行其他Docker容器,这通常需要变通解决方案,尤其是在CI/CD流水线或需要大量虚拟化的软件中。
有两种方法可以执行DinD:
此策略通过-v /var/run/docker.sock:/var/run/docker.sock共享主机系统的/var/run/docker.sock套接字。本质上,这种技术允许我们从主容器中生成由主机系统管理的容器。然而,在这些次级容器中创建的任何容器实际上只在主机系统上出现,而不在发起容器内部。这种方法通常会遇到两个主要挑战:
网络挑战:在DooD系统中,当在一个容器内实例化另一个容器时,两个容器均由主机系统管理。因此,如果从DooD容器运行一个暴露端口3306的容器,该端口对主机可见,但发起它的容器无法访问。
目录卷:假设计划在"container-2"内运行"container-1",并尝试使用卷将"container-1"的目录共享到"container-2",这将无法工作。原因在于套接字共享——我们实际上不是从主容器共享目录,而是从主机共享目录。尽管这些挑战有解决方案,但往往复杂且繁琐。
这种方法虽然安全性较低(--privileged选项绕过了许多容器化安全特性),但能够在需要时创建一个内部带有Docker的新容器,有效解决网络和卷问题。现在可以将"container-1"的文件夹共享给由其创建的"container-2",并从"container-2"暴露可被"container-1"访问的端口。
但实际上有安全运行此容器的方法。可以使用nestybox/sysbox运行时来安全地运行此容器。该运行时是一种容器运行时,支持安全且高性能的Docker-in-Docker (DinD),是--privileged选项的理想替代方案。
您可以在使用指南部分查看如何不安全或安全地运行此容器。
测试或使用此镜像非常简单,有两种选择:
要使用此Docker-in-Docker镜像,运行以下命令:
bashdocker run -it --privileged cruizba/ubuntu-dind
如果需要systemd环境,也可以使用systemd-latest标签:
bashdocker run -d --name ubuntu-dind --privileged cruizba/ubuntu-dind:systemd-latest docker exec -it ubuntu-dind bash
此选项需要在系统中安装Sysbox。您可以查看此处了解安装方法(遗憾的是,包安装仅适用于基于debian的发行版)。
要在更安全的环境中使用此Docker-in-Docker镜像,运行以下命令:
bashdocker run -it --runtime=sysbox-runc cruizba/ubuntu-dind
如果需要systemd环境,也可以使用systemd-latest标签:
bashdocker run -d --name ubuntu-dind --runtime=sysbox-runc cruizba/ubuntu-dind:systemd-latest docker exec -it ubuntu-dind bash
只需运行镜像即可获得干净的环境来测试您的Docker镜像:
bashdocker run -it --privileged cruizba/ubuntu-dind
bashdocker run -it --runtime=sysbox-runc cruizba/ubuntu-dind
这将在容器内启动一个root bash终端,您可以在其中运行docker命令。
可以直接运行命令来测试镜像:
bashdocker run -it --privileged cruizba/ubuntu-dind docker run hello-world
bashdocker run -it --runtime=sysbox-runc cruizba/ubuntu-dind docker run hello-world
您可以扩展此镜像以添加自己的工具和配置。下面创建一个示例,使用此镜像构建项目并测试,展示其扩展性和强大功能:
DockerfileFROM cruizba/ubuntu-dind:latest # 安装依赖 RUN apt-get update && apt-get install git -y COPY entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/entrypoint.sh
entrypoint.sh:
bash#!/bin/bash # 启动docker start-docker.sh # 此处添加你的命令 git clone [***] cd ubuntu-dind || exit 1 docker build . -f ubuntu-jammy.Dockerfile -t ubuntu-dind-test docker run --privileged ubuntu-dind-test docker run hello-world
此脚本将克隆此仓库、构建镜像并从中运行容器。
需要特别注意的是,在使用docker命令前需要运行start-docker.sh脚本,该脚本将启动容器内的docker守护进程。
您可以在examples文件夹中找到此示例。
[!NOTE] 对于systemd镜像,入口点脚本不同,且不需要
start-docker.sh脚本。要在systemd镜像中执行命令,需要docker exec进入容器并运行命令。
您可以在Docker Hub找到可用镜像。也可以查看Releases部分了解可用标签:Releases
所有标签均以下列格式发布:
bash# 普通镜像 cruizba/ubuntu-dind:focal-<docker-version> cruizba/ubuntu-dind:jammy-<docker-version> cruizba/ubuntu-dind:noble-<docker-version> # Systemd镜像 cruizba/ubuntu-dind:focal-systemd-<docker-version> cruizba/ubuntu-dind:jammy-systemd-<docker-version> cruizba/ubuntu-dind:noble-systemd-<docker-version>
bash# 普通镜像 cruizba/ubuntu-dind:focal-<docker-version>-r<revision> cruizba/ubuntu-dind:jammy-<docker-version>-r<revision> cruizba/ubuntu-dind:noble-<docker-version>-r<revision> # Systemd镜像 cruizba/ubuntu-dind:focal-systemd-<docker-version>-r<revision> cruizba/ubuntu-dind:jammy-systemd-<docker-version>-r<revision> cruizba/ubuntu-dind:noble-systemd-<docker-version>-r<revision>
bash# 普通镜像 cruizba/ubuntu-dind:focal-latest cruizba/ubuntu-dind:jammy-latest cruizba/ubuntu-dind:noble-latest # Systemd镜像 cruizba/ubuntu-dind:focal-systemd-latest cruizba/ubuntu-dind:jammy-systemd-latest cruizba/ubuntu-dind:noble-systemd-latest
bash# 普通镜像 cruizba/ubuntu-dind:latest # Systemd镜像 cruizba/ubuntu-dind:systemd-latest
如果您喜欢我的工作,可以通过GitHub Sponsor支持我。非常感谢您的支持。
![GitHub ]([]
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务