提问者:小点点

如何在 AWS ECS 中管理 docker 镜像版本?


AWS ECS服务指向一个任务定义,它包含一个docker图像名称,包括一个标记。

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

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

什么更好,为什么?


共1个答案

匿名用户

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

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

避免“当前”或“最新”标签的第二个好理由是能够回滚。例如,如果您使用基于时间戳的标记系统,您部署了build 20200323,但它不起作用,当您的开发人员调试时,很容易将任务定义重置回build 20200322,以返回到昨天的代码。如果昨天是“当前的”,今天是“当前的”,那就很难弄清楚什么是“非当前的”。