【问题标题】:Docker workflow design with Jenkins on production使用 Jenkins 在生产环境中设计 Docker 工作流程
【发布时间】:2017-03-03 01:31:14
【问题描述】:

我正在学习自己的 Docker 几个星期,我认为是时候在生产中执行项目(数字海洋)了。我看到了工作流设计的一些问题。 我想使用 GitHub 作为我的源代码。 Jenkins 用于持续集成。 Maven 用于从 Dockerfile 构建 WAR 和 Image。

这是我的设计。

Docker workflow design with Jenkins on production

但我并不开心 :( 因为我看到了下一个问题,但我无法解决它。

  1. 我的设计中没有看到 Docker Hub。 docker 应用程序可以在不推送 docker hub 的情况下运行吗?如果没有,我可以在哪里添加到 Docker Hub?
  2. Jenkins 正在生产服务器中运行。我认为 Jenkins 正在消耗 CPU 和 RAM 的资源。我不喜欢这个。这是一种很好的做法吗?
  3. Jenkins 在一个 docker 容器上运行,这值得吗?如果没有。为什么会有 Jenkins 的 docker 镜像?

如果我的设计不能用于生产,请给一些建议。

提前致谢。

【问题讨论】:

  • 1.我无法弄清楚你在说什么,听起来你在问它 docker hub 有钩子吗? 2.不,我个人认为jenkins不应该在你的生产环境中。 3. 与什么相比值得?有自己的虚拟机吗?服务器?为什么不应该放在容器中。
  • 1.我不知道 Docker Hub 是做什么用的。只是为了分享 Dockerfile? 2. 谢谢。 3. 与拥有自己的虚拟机相比。
  • 如果您不知道什么是“Docker Hub”,为什么您会在设计中错过它?与 VM 相比,docker 容器更轻量级。考虑到您的问题,在使用它设计解决方案之前,您应该考虑继续了解 Docker 是什么以及它是如何工作的

标签: maven jenkins docker production-environment jenkins-workflow


【解决方案1】:

你的答案:

  1. 您需要一些东西来存储您构建的图像。稍后将从生产服务器中提取。你需要一个 docker 注册表。 Docker Hub 只是一个具有许多功能的 docker 注册表。但是你可以安装一个私有的 docker 注册表。有一个官方容器。

  2. 不,这不是一个好的做法。将 Jenkins 单独留在其服务器中,这正是您暴露的原因、资源和对应用程序的干扰,例如开放端口。

  3. 不要在容器中使用 jenkins,因为在 docker 内部调用 docker 非常困难(不是不可能,但很困难)。容器非常好,除了 docker。您可以通过 apt install jenkins 安装 jenkins。

问候

【讨论】:

  • 我对 Docker Hub 有误解。我以为它只是存储了 Dockerfile,但它存储了完整的映像,即 Wildfly 映像使用 300 mb 磁盘空间。这是正确的吗?
  • 是的,它是正确的。在 Dockerfile 的情况下,Docker hub 使用 github 来存储它并进行自动构建
【解决方案2】:
  1. 你需要一个 docker 注册表,这是存储构建的 docker 镜像的地方。如果您想要私有图像,您可以自己托管一个或向 Docker Hub 付费。见这里:https://hub.docker.com/billing-plans/

  2. Jenkins 不应该在生产环境中运行,您的代码应该是。 Jenkins 是一个 CI 工具,可以帮助您构建代码。所以它需要在一个单独的“构建”机器上。 Jenkins 应该构建你的代码,创建 docker 镜像,并将它们存储在 repo 中。并且取决于您的政策如何决定将其推广到生产环境的方式和时间。

  3. 正如@Carlos 提到的,如果您想构建 docker 映像,最好将 Jenkins 作为本机应用程序运行。为什么 Jenkins 提供 docker 镜像?因为它更容易尝试,并不是每个人都需要从他们构建的工件中创建一个 docker 镜像。

【讨论】:

    【解决方案3】:

    我在这里描述了一个更详细的 Vagrant/Docker 管道:Using Ansible,Jenkins and docker to build fast test environments

    总结:

    一个专业的 Docker 管道应该包括以下步骤:

    1. 基础镜像构建:从 Dockerfile 构建镜像,每次 Dockerfile 更改时触发此构建。结果可以上传到公共 Dockerhub 映像。例如。 Java JDK8 基础镜像:yourname/baseimageJRe8
    2. 基础映像配置:构建配置的映像。包括您的 java-maven-build 工件和配置文件。仅用于此步骤稳定标记的 Docker 映像:yourname/baseImageJRe8:2.0-stable。结果必须上传到 PRIVATE Docker 注册表中,例如privateregistry.io/yourname/softwareStackMySoftware:2016-10-21-Build-210。
    3. 预配置映像部署:从主机上的私有注册表中提取映像。请记住,仅使用稳定的标记图像。通过环境变量添加主机特定配置或在 Docker Volumes 中添加配置文件。最后启动 Docker 容器。

    专业的 Jenkins 设置应包括:

    1. 一位 Jenkins 大师:作业配置。绝对没有构建处理器!
    2. 任意数量的 Jenkins 从站:构建 Docker 映像。是的,这个自然会使用大量资源。

    您可能听说过在 Docker 中运行 Docker 的方法并不健全。因此,您需要一个 Docker-Machine(由 cli docker-machine 设置)或其他一些安装了 Docker 的 VM 来构建您的 Docker 映像。

    此外,在持续集成环境中构建 docker 镜像会产生大量停止和失败的构建容器和(悬空)镜像。您应该在安全的环境中执行此操作,您可以在不影响生产部件的情况下安全地清洁机器。

    但是有个很大的误解,Jenkins 或者 Docker 里面的 Jenkins slave 不能构建 Docker 镜像。您只需在 Docker 映像中安装 docker cli 并将命令发送到您的主机。例如,查看这个 Jenkins swarm slave image blacklabelops/swarm-dockerhost

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2019-10-14
      • 2023-01-30
      • 2012-06-14
      • 1970-01-01
      • 2017-08-13
      • 2018-05-15
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多