我们有几个应用程序属于较大的应用程序。
这些应用程序中的每一个都在每次提交时都构建了一个Docker镜像。
我想使用docker swarm模式和docker stacks自动部署/更新这个更大的应用程序。
让我假装我有这个撰写文件(左边的部分是不相关的)
cart_service
当我对购物车服务仓库进行更改时,我希望堆栈仅更新product_service
,但保留docker stack deploy
固定的当前版本。此外,当产品服务更新时,我希望能够仅更新该服务,但将购物车服务保留在其当前固定版本。
在这种情况下,我有哪些选择?
我能想到的是:
docker service create
,而是使用旧{{1}} 我忽略了什么吗?这样的建筑不是故意的吗?这里有什么更好的方法?
答案 0 :(得分:1)
我觉得最简单的方法是使用最后一个选项,将每个服务拆分成自己的堆栈而不触及任何其他内容。然后,您可以升级单个服务的堆栈。为此,我将添加两个先决条件:
提前定义您的网络。然后在您的撰写中,将它们定义为外部以允许服务相互连接。当您将服务拆分为单独的堆栈时,这是您丢失的最大部分。
运行您自己的注册表。对我而言,这比仅仅依靠固定版本更安全。固定将确保您在swarm中的所有节点上提取相同的版本,但如果您要从dev推广到test to prod,那么这些将是单独的堆栈,并且可能完全是单独的群。对我来说,依靠repo中的标签更容易,只能以受控方式更新(CI / CD脚本)。
单独的堆栈可以独立更新每个服务,而不会破坏任何其他内容。但另一方面,con是你需要在影响一切的变化时独立更新每项服务。这可能意味着您需要更多脚本/自动化来管理环境。