AWS - ECS - 如何在现有 ECS(带有 1 个 EC2)实例上重新部署更新的 Docker 映像?

Posted

技术标签:

【中文标题】AWS - ECS - 如何在现有 ECS(带有 1 个 EC2)实例上重新部署更新的 Docker 映像?【英文标题】:AWS - ECS - How can I redeploy an updated Docker image on an existing ECS (with 1 EC2) instance? 【发布时间】:2019-05-25 18:11:48 【问题描述】:

首先,我在 AWS 中创建了一个包含 Docker 映像的存储库。

然后我创建了一个任务定义和一个 ECS/EC2 集群。最后,我使用集群和任务定义创建了一个服务。工作正常。

如何在现有集群上重新部署更新的 Docker 映像?

仅使用新(或现有)任务“更新”服务是行不通的。即使使用“强制新部署”选项也无效。

【问题讨论】:

【参考方案1】:

根据 AWS 文档,您不能真正做到这一点... 你可以在这里阅读 - https://docs.aws.amazon.com/cli/latest/reference/ecs/register-task-definition.html

仅通过“创建任务定义的新版本” 任务定义 -> -> 创建新修订版

它将在你的仓库中使用“最新”版本(当然最好用最新的标签)或自己添加标签。

顺便说一句-除非您已经准备好这样做,否则我会使用这些更新的自动化过程作为 ci/cd 和 json 的一部分。

【讨论】:

请解释如何使用任务定义的“新修订版”来更新集群/服务上的 Docker 映像/容器。并请解释我如何将新图像推送到 ECR,以便它自动重新部署到 ECS / EC2 实例上。 @tm1701:嗨。你有机会得到你的问题的答案吗?我也在看... @Shams Larbi - 页面上的答案就是答案。【参考方案2】:

如果您未在容器定义中指定 ECR 图像的标签,它将始终获取最新的。因此,您有两种方法可以实现重新部署。

    确保你的服务有足够的空间来部署一个新任务,例如,如果你想要的Number of tasks是1,那么你必须将Maximum percent设置为200,意味着你可以允许1 * 200 % = 在进行部署时同时运行 2 个任务,然后只需键入以下命令: aws ecs update-service --cluster <cluster name> --service <service name> --force-new-deployment

    或者在你将镜像更新到 ECR 之后,你可以手动杀死现有的任务并创建一个新的(通常创建过程应该由 ECS 自己完成,只要你的 Auto Scaling配置正确)。

【讨论】:

谢谢!选项 1 对我有用。我认为添加最低健康应该为 0 是明智的。这很有效。如果您同意,请添加。

以上是关于AWS - ECS - 如何在现有 ECS(带有 1 个 EC2)实例上重新部署更新的 Docker 映像?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ECS 添加带有应用程序负载均衡器的 AWS API 网关?

如何链接在 AWS ECS 任务中运行的 2 个容器

更新 AWS ECS 服务任务的最佳实践

如何让 AWS ECS 自动将我的容器的端口映射到主机(EC2)

如何在 AWS ECS 集群的服务中运行 AWS ECS 任务,而不是将服务从 Circle CI 的“aws-ecs/run-task”中排除

AWS ECS Fargate 任务的静态出站 IP