![在docker集群中复制文件夹](https://linux22.com/image/716672/%E5%9C%A8docker%E9%9B%86%E7%BE%A4%E4%B8%AD%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%E5%A4%B9.png)
所以我对 docker 还很陌生,尤其是 docker swarm。我刚刚安装了 jenkins,我想让它在所有节点上运行,无论它是在一台机器上只运行一个实例,还是在 5 台机器上运行 10 个实例。
这个问题当然是“詹金斯如何知道我得到了哪些构建定义”。詹金斯可能有特定的方法可以解决这个问题,但我认为自己将来会遇到类似的问题。所以我开始思考,有没有简单的方法可以在文件系统/卷上设置复制?最好是在 docker swarm 环境中工作的主/从配置中?
答案1
即使你有一个神奇的数据复制解决方案,也无法完全解决问题。请注意,我不是 Jenkins 专家。
听起来你需要的是 Jenkins 容器的数据持久性。
至少有两种方法可以使具有持久数据需求(如数据库、Jenkins 等)的应用程序在容器集群中工作:
使用应用程序的内置集群。Jenkins 可以实现多主机吗?在容器编排器中,执行这种类型的 HA 不会有太大变化。如果应用程序 (Jenkins) 支持 HA,那么通常最好这样做。就像 Mongodb 副本或 elasticsearch 集群一样……最好创建单独的 Swarm 服务,每个服务都有一个容器,并让它们像使用 Swarm 之前一样相互连接。
使用 Swarm 存储持久数据并重新创建失败的容器。将 Jenkins 的数据存储在 Swarm 感知的 docker 卷中。这将需要共享存储和卷插件,例如REX 射线或任何store.docker.com保存需要连接到正在运行的 Jenkins 实例才能使其正常工作的所有内容。然后,在 docker 卷、Swarm 配置和 Swarm 机密之间,当运行 Jenkins 容器的服务死亡或必须重新创建容器时,它将确保卷/配置/机密位于任务(容器)启动的任何节点上。这不是真正的 HA,但很接近。