首页 > 解决方案 > 如何在 AWS ECS 中管理 docker 镜像的版本?

问题描述

AWS ECS 服务指向一个任务定义,其中包含一个 docker 映像的名称,包括一个标签。

因此,当我创建 docker 映像的新版本时,我有两种可能性:

  1. 将任务定义更新到新版本,然后更新服务以指向任务定义的新修订
  2. 使用一些标签指向上一个版本,假设“当前”标签将始终指向上一个版本,任务定义将包含“我的图像:当前”,然后我只需要重新启动 ECS 服务

什么更好,为什么?

标签: dockeramazon-ecselastic-container-registry

解决方案


为每个构建使用唯一标签,并更新任务定义以指向新标签(您的第一个选项)。

您将遇到的一个大问题是,一般来说,基于 Docker 的系统会尽量避免提取他们已经拥有的映像。如果您重新启动服务,但它重新启动的节点看到它已经拥有my-image:current,它只会重新运行它而不拉取更新的版本。它似乎可以工作—— “最新”标签如何在 ECS 任务定义和从 ECR 中提取的容器实例中工作?包括一个似乎可以工作的设置 - 但仅通过查看您使用的确切版本有点难以判断。

避免使用“当前”或“最新”标签的第二个充分理由是能够回滚。例如,如果您使用基于时间戳的标记系统,部署构建 20200323,但它不起作用,则很容易将任务定义重置为构建 20200322,以便在开发人员调试时恢复到昨天的代码。如果昨天是“当前”,今天是“当前”,那么要弄清楚“非当前”应该是什么要困难得多。


推荐阅读