使用Jenkins在生产环境中设计Docker工作流程

3
我正在学习Docker几周了,我认为现在是在生产环境中(Digital Ocean)开展项目的时候了。我看到了一些工作流程设计上的问题。 我想使用GitHub来管理我的源代码。Jenkins用于持续集成。Maven用于构建WAR和Dockerfile镜像。
这是我的设计。 使用Jenkins进行Docker工作流程设计 但我并不感到满意,因为我看到以下问题,而我无法解决它们。
  1. 我没有在我的设计中看到Docker Hub。一个Docker应用程序可以在不推送到Docker Hub的情况下运行吗?如果不行,我应该在哪里添加Docker Hub?
  2. Jenkins正在生产服务器上运行。我认为Jenkins正在消耗CPU和RAM资源。我不喜欢这样。这是一个好的做法吗?
  3. Jenkins在一个Docker容器上运行,这值得吗?如果不值得,为什么还有一个Jenkins的Docker镜像?
如果我的设计不能在生产环境中工作,请给出一些建议。
提前致谢。

  1. 我不明白你在说什么,听起来像是在问 Docker Hub 是否有钩子?
  2. 不,我个人认为 Jenkins 不应该出现在生产环境中。
  3. 相比于什么而言是值得的?拥有自己的虚拟机?服务器?为什么不能放在一个容器中?
- Jonnix
  1. 我不知道Docker Hub是用来做什么的。只是用来分享Dockerfile吗?
  2. 谢谢。
  3. 相比拥有自己的虚拟机。
- Carlos Pérez Lara
如果你不知道什么是“Docker Hub”,为什么在你的设计中会错过它呢?相比虚拟机,Docker容器更加轻量级。考虑到你的问题,你应该先学习Docker是什么以及它如何工作,然后再设计解决方案。 - agg3l
3个回答

2
我在这里描述了更详细的 Vagrant/Docker pipeline:使用 Ansible、Jenkins 和 Docker 构建快速测试环境
总结如下:
一个专业的 Docker pipeline 应包括以下步骤:
1. 基础镜像构建:从 Dockerfile 构建镜像,每次 Dockerfile 更改时触发此构建。结果可以上传到公共 Dockerhub 镜像。例如,Java JDK8 基础镜像:yourname/baseimageJRe8。 2. 基础镜像配置:创建已配置的镜像。包含你的 java-maven-build 产品和配置文件。只使用稳定标签的 Docker 镜像进行此步骤:yourname/baseImageJRe8:2.0-stable。结果必须上传到私有 Docker 注册表,例如 privateregistry.io/yourname/softwareStackMySoftware:2016-10-21-Build-210。 3. 已配置的镜像部署:从私有注册表中拉取图像到主机上。记住,只使用稳定标记的镜像。通过环境变量或在 Docker 卷中添加配置文件来添加特定于主机的配置。最后启动 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

1

你的答案:

  1. 你需要一个存储构建镜像的地方,后来可以从生产服务器中拉取。你需要一个Docker注册表。Docker Hub只是一个带有许多功能的Docker注册表。但是你可以安装一个私有的Docker注册表。官方有一个容器可供使用。

  2. 不,这不是一个好习惯。把Jenkins留在它的服务器上,正如你所说的,资源和干扰你的应用程序,比如打开端口。

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

问候


我对Docker Hub的理解有误。我以为它只是存储Dockerfile,但实际上它存储了完整的镜像,也就是说,一个Wildfly镜像需要300 MB的磁盘空间。这是正确的吗? - Carlos Pérez Lara
是的,这是正确的。在Dockerfile的情况下,Docker Hub使用GitHub来存储它并进行自动构建。 - Carlos Rafael Ramirez

1
  1. 您需要一个Docker Registry,这是存储构建的Docker镜像的地方。您可以自己托管,或者如果您想要私有镜像,则可以支付Docker Hub。请参见此处:https://hub.docker.com/billing-plans/

  2. Jenkins不应该在生产环境中运行,您的代码应该运行在生产环境中。Jenkins是一个CI工具,将帮助您构建代码。因此,它需要在单独的“构建”机器上运行。Jenkins应该构建您的代码、创建Docker镜像,并将其存储在仓库中。根据您的策略决定如何以及何时将其推出到生产环境。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接