docker - 如何在 AWS ECS 中管理 docker 镜像的版本?
问题描述
AWS ECS 服务指向一个任务定义,其中包含一个 docker 映像的名称,包括一个标签。
因此,当我创建 docker 映像的新版本时,我有两种可能性:
- 将任务定义更新到新版本,然后更新服务以指向任务定义的新修订
- 使用一些标签指向上一个版本,假设“当前”标签将始终指向上一个版本,任务定义将包含“我的图像:当前”,然后我只需要重新启动 ECS 服务
什么更好,为什么?
解决方案
为每个构建使用唯一标签,并更新任务定义以指向新标签(您的第一个选项)。
您将遇到的一个大问题是,一般来说,基于 Docker 的系统会尽量避免提取他们已经拥有的映像。如果您重新启动服务,但它重新启动的节点看到它已经拥有my-image:current
,它只会重新运行它而不拉取更新的版本。它似乎可以工作—— “最新”标签如何在 ECS 任务定义和从 ECR 中提取的容器实例中工作?包括一个似乎可以工作的设置 - 但仅通过查看您使用的确切版本有点难以判断。
避免使用“当前”或“最新”标签的第二个充分理由是能够回滚。例如,如果您使用基于时间戳的标记系统,部署构建 20200323,但它不起作用,则很容易将任务定义重置为构建 20200322,以便在开发人员调试时恢复到昨天的代码。如果昨天是“当前”,今天是“当前”,那么要弄清楚“非当前”应该是什么要困难得多。
推荐阅读
- java - 如何将长本地时间戳转换为字符串 UTC 时间戳
- javascript - Array items not pushed into async.queue
- java - 从 Linux 中用 Java 读取标准输出不起作用
- reactjs - 如何使用 reactjs 导入 Outlook 联系人
- php - Undefined variable: dataProvider in yii2 kartik grid
- c++ - Qt 无法找到 GL 库
- wai-aria - 为什么 aria 在 role="tablist" 下需要 role="tab"?
- imagemagick - PHP Imagick 不适用于 php 7.2.6
- c# - 在 .NET CORE 2 EF 中将 API 项目中的 ViewModel 绑定到 DAL 项目中的 POCO 类
- angularjs - How to filter a list only by name - AngularJS