我一直在尝试设计一种策略,使用 Docker Swarm 来管理一堆无头容器 - 不需要负载均衡器、暴露任何端口或自动缩放。
我唯一想要的就是能够更新所有容器(在所有节点上)(如果更新任何映像)。每个运行的容器都需要有一个特定的
--hostname
。
跑步
docker service
是否可行?或者我应该只针对特定节点执行正常的docker run
来指定我想要的--hostname
?我什至询问 docker service
的原因是因为它允许您进行更新(如果有更新的图像,则强制更新所有容器)。
还认为 Docker Swarm 会让监视所有容器变得更容易(即从中央位置管理它们)。
我正在考虑的另一个选项是 watchtower,在运行其中一个容器的每台服务器上运行,作为 swarm 的替代方案。我唯一的问题是它不提供任何编排,以进行集中管理。
在这种情况下,有人知道什么是更好的选择吗?
除了
docker service
命令之外,Docker swarm 在滚动更新方面没有给你任何优势,swarm 只提供用户水平扩展,并在那些称为“服务”的副本前面放置一个负载均衡器,以及其他一些好处,例如在集群节点之间复制 docker 事件。
docker service --force
将按预期工作。
但是,您可能应该同时使用 docker swarm 进行编排,并使用了望塔进行滚动更新。