我目前正在使用 Docker 运行 Jenkins。在尝试构建 docker 应用程序时,我对是否应该通过绑定 /var/run/docker.sock 文件或在我的 Jenkins Docker 中安装另一个 docker 实例来在 Docker (Dind) 中使用 Docker 存在疑问。实际上,我以前看到过,不鼓励使用 docker.sock 以外的其他东西。
我实际上不明白为什么除了不污染主机之外,我们还应该使用主机上的 docker 守护程序以外的其他东西。
我目前正在使用 Docker 运行 Jenkins。在尝试构建 docker 应用程序时,我对是否应该通过绑定 /var/run/docker.sock 文件或在我的 Jenkins Docker 中安装另一个 docker 实例来在 Docker (Dind) 中使用 Docker 存在疑问。实际上,我以前看到过,不鼓励使用 docker.sock 以外的其他东西。
我实际上不明白为什么除了不污染主机之外,我们还应该使用主机上的 docker 守护程序以外的其他东西。
“docker容器中的jenkins需要docker”的最佳解决方案是将您的主机添加为jenkins中的节点(从属)。这将使每个构建步骤(实际上是所有内容)都在您的主机中运行。我花了一个月的时间才找到完美的设置。
在 jenkins 容器中安装 docker 套接字:您将失去上下文。您要在图像中复制的文件位于 jenkins 容器的工作空间内,并且您的 docker 正在主机上运行。COPY 肯定会失败。
在 jenkins 容器中安装 docker 客户端:您必须更改官方 jenkins 映像。增加了复杂性。你也会失去上下文。
将您的主机添加为 jenkins 节点:完美。你有上下文。不改变官方形象。
在不完全理解为什么需要在 Docker 中使用 Docker 的情况下 - 我怀疑考虑到构建实际映像的环境需要满足一些特殊要求,我可以建议您多阶段构建 docker 映像吗?您可能会发现它很有用,因为它使您能够首先构建构建环境,然后构建实际图像(因此名称为“多阶段构建”)。在这里查看:https ://docs.docker.com/develop/develop-images/multistage-build/