使用独立更新服务的docker堆栈部署的正确/更好的方法是什么?

时间:2017-02-10 01:05:12

标签: docker docker-compose docker-swarm-mode

我们有几个应用程序属于较大的应用程序。

这些应用程序中的每一个都在每次提交时都构建了一个Docker镜像。

我想使用docker swarm模式和docker stacks自动部署/更新这个更大的应用程序。

让我假装我有这个撰写文件(左边的部分是不相关的)

cart_service

当我对购物车服务仓库进行更改时,我希望堆栈仅更新product_service,但保留docker stack deploy固定的当前版本。此外,当产品服务更新时,我希望能够仅更新该服务,但将购物车服务保留在其当前固定版本。

在这种情况下,我有哪些选择?

我能想到的是:

  • 做一些奇特的事情并在提交时重新生成compose文件,只更改我需要更改的部分
  • 请勿使用docker service create,而是使用旧{{1}}
  • 某种类型的环境变量传入compose文件(这里的问题是每个服务仍然必须知道其他服务的当前版本吗?)
  • 为每项服务使用不同的堆栈(这有什么问题或问题吗?)

我忽略了什么吗?这样的建筑不是故意的吗?这里有什么更好的方法?

1 个答案:

答案 0 :(得分:1)

我觉得最简单的方法是使用最后一个选项,将每个服务拆分成自己的堆栈而不触及任何其他内容。然后,您可以升级单个服务的堆栈。为此,我将添加两个先决条件:

  • 提前定义您的网络。然后在您的撰写中,将它们定义为外部以允许服务相互连接。当您将服务拆分为单独的堆栈时,这是您丢失的最大部分。

  • 运行您自己的注册表。对我而言,这比仅仅依靠固定版本更安全。固定将确保您在swarm中的所有节点上提取相同的版本,但如果您要从dev推广到test to prod,那么这些将是单独的堆栈,并且可能完全是单独的群。对我来说,依靠repo中的标签更容易,只能以受控方式更新(CI / CD脚本)。

单独的堆栈可以独立更新每个服务,而不会破坏任何其他内容。但另一方面,con是你需要在影响一切的变化时独立更新每项服务。这可能意味着您需要更多脚本/自动化来管理环境。