我正在构建一个 Docker 主机,我想在其中对正在运行的容器进行无停机升级。现在,假设我只运行一个容器。
我构建了一个新映像并使用 从中启动一个容器docker run -P ...
,以便为其分配随机主机端口。然后我可以使用Registrator之类的东西来自动更新 Consul 中的服务。现在,Consul 对镜像名称对应的服务有两个注册:旧容器和新容器。
我想使用Consul-Template 更新我的 nginx 反向代理配置以指向新容器的端口(如此处所述)。如何使 Consul-Template 仅获取最新容器的详细信息?
我考虑过的两个解决方案是:
- 使用
CreateIndex
查找此服务的最新注册。但是,不确定如何使 Consul-Template 按 CreateIndex 排序。 - 使用服务标签。问题是我不确定如何从以前的容器/领事服务注册中删除标签。如果可能的话,那么我可以将特定标签分配给新容器并在 Consul-Template 中选择它们。这将扩展到对多个容器进行无停机升级。
更新:我找到了一些关于如何更新/清除标签的文档:1、2、3。这可以在使用标签启动新容器之前在运行的旧容器上完成。
这是解决这个问题的最好方法吗?