docker in docker? No, docker brother

解决方案

让我们退一步,你真的想要 Docker-in-Docker?或者当 CI 系统本身就是一个容器的时候你只是想要在 CI 系统中运行 Docker(具体为:构建、运行,有时 push 容器和镜像)。

我敢打赌,大多数人只是想要后者。你想要的一个解决方案是使得你的像 Jenkins 一样的 CI 系统能够启动容器。

最简单的方法就是通过使用 -v 参数来为你的 CI 系统暴露 Docker 的 socket。

简单的来说,当你启动你的 CI 容器( Jenkins 或者其他),而不是使用 Docker-in-Docker 来 hacking 一些东西,用这条命令启动它:

shell 复制代码
docker run -v /var/run/docker.sock:/var/run/docker.sock ...

现在这个容器将能够访问 Docker Socket,然后就能启动容器。它将启动"兄弟"容器而不是"子"容器。

如果你的 CI 使用 Docker 二进制脚本,你可以将它包含在你的 CI 镜像中或者从主机 bind-mount。例如:

shell 复制代码
docker run -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/bin/docker \
-ti ubuntu

这看起来就像 Docker-in-Docker,感觉起来也像 Docker---in-Docker,但它不是 Docker-in-Docker :当你的CI容器要创建更多容器时,这些容器将会在顶级 Docker 中被创建。你将不会与遇到嵌入的影响,构建缓存也将在多实例中共享。

相关推荐
简 洁 冬冬12 分钟前
泛型方法写法全面辨析:从「能编译」到「能跑」到「能用」
java·泛型
LGL6030A27 分钟前
Java学习历程31——初识Spring Boot
java·spring boot·学习
Lansonli2 小时前
大数据Spark(八十八):Spark任务资源之Standalone集群测试
java·服务器·spark
budingxiaomoli3 小时前
Spring AOP
java·spring·java-ee
特立独行的猫A3 小时前
Ionic + 仓颉语言的 cj-tauri 开发框架实战:开发精美移动端 APP
java·后端·python
nice_lcj5203 小时前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru
xbzb3 小时前
自建镜像仓库:registry 一条命令 + harbor 部署、授权、跨库同步与卸载
docker·harbor·镜像·仓库·同步·registry
文丑颜不良啊4 小时前
LeetCode2741~2760题目解析
java·leetcode
金銀銅鐵13 小时前
带您看懂字节码指令(二):空循环里有什么
java·后端·ai编程
吴名氏.15 小时前
Java转AI Agent教程(第十三周)混合检索与重排
java·数据库·人工智能·ai·ai agent