【问题标题】:Docker in Docker, Building docker agents in a docker contained Jenkins ServerDocker in Docker, Building docker agent in a docker contains Jenkins Server
【发布时间】:2019-07-29 06:46:15
【问题描述】:

我目前正在使用 Docker 运行 Jenkins。在尝试构建 docker 应用程序时,我对是否应该通过绑定 /var/run/docker.sock 文件或在我的 Jenkins Docker 中安装另一个 docker 实例在 Docker (Dind) 中使用 Docker 存在疑问。实际上我之前看到过,不鼓励使用 docker.sock 以外的其他东西。

我真的不明白为什么除了不污染主机之外,我们还应该使用主机上的 docker 守护程序以外的其他东西。

来源:https://itnext.io/docker-in-docker-521958d34efd

【问题讨论】:

    标签: docker continuous-integration docker-in-docker


    【解决方案1】:

    “docker 容器中的 jenkins 需要 docker”的最佳解决方案是将您的主机添加为 jenkins 中的节点(从站)。这将使每个构建步骤(实际上是所有内容)都在您的主机中运行。我花了一个月的时间才找到完美的设置。

    在 jenkins 容器中安装 docker 套接字:您将失去上下文。您要在图像中复制的文件位于 jenkins 容器的工作空间内,并且您的 docker 正在主机上运行。 COPY 肯定会失败。

    在 jenkins 容器中安装 docker 客户端: 您必须更改官方 jenkins 镜像。增加了复杂性。你也会失去上下文。

    将您的主机添加为 jenkins 节点: 完美。你有上下文。不得更改官方形象。

    【讨论】:

    • 是的,这就是我实际所做的,但问题是,所有这些由 jenkins 构建的图像都堆积在我的主机中,这对我来说并不理想。我实际上正在看这个hub.docker.com/_/docker,但我仍在弄清楚如何在它上面安装 jenkins。
    • 建好后为什么不删除图片呢?最好将它们推送到私有注册表(您可以通过 docker 获取)然后从主机中删除。
    • 实际上我很愚蠢,因为我没有考虑在我的管道中添加一个删除图像的步骤。谢谢你的提示。标记为已解决
    【解决方案2】:

    在不完全理解为什么需要在 Docker 中使用 Docker 的情况下 - 我怀疑考虑到构建实际映像的环境需要满足一些特殊要求,我可以建议您多阶段构建 Docker 映像吗?您可能会发现它很有用,因为它使您能够首先构建构建环境,然后构建实际图像(因此名称为“多阶段构建”)。在这里查看:https://docs.docker.com/develop/develop-images/multistage-build/

    【讨论】:

    • 问题首先依赖于在 jenkins 容器中使用 docker 命令。
    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 2017-09-17
    • 2020-10-20
    • 2019-07-22
    • 1970-01-01
    • 2017-12-03
    • 2022-09-28
    • 2018-05-17
    相关资源
    最近更新 更多