我有一个带有运行任务的服务的AWS EC2集群。假设任务的图像为my-app:latest
当我想更新应用程序时,我将构建一个新的Docker映像并将其推送到ECR。
现在,如何将新的my-app:latest
图像滚动到我的实例上?
答案 0 :(得分:0)
更新Docker映像涉及两种方法
第一个,仅更新docker映像并推送到ECR,而无需修改标签aws.abc/myimage:latest
,因此,在这种情况下,您无需更新任务定义,而只需重新部署服务即可。您可以从AWS控制台或aws cli
aws ecs update-service --cluster ec2cluster_name --service service_name --force-new-deployment
这就是您所需要的
第二个,如果您使用不同的Docker映像标记,那么还需要更新任务定义,该定义将指向新的Docker映像并重新部署服务。
注册任务定义的新版本
现在指定任务定义修订。除了docker image标记外,其余的都是一样的。
{
"containerDefinitions": [
{
"cpu": 0,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/stage-app",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "ecs"
}
},
"environment": [
{
"name": "BRANCH",
"value":"staging"
},
{
"name": "NODE_ENV",
"value": "staging"
}
],
"memoryReservation": 400,
"ulimits": [
{
"name": "nofile",
"softLimit": 4000,
"hardLimit": 4000
}
],
"image": "***.dkr.ecr.us-west-2.amazonaws.com/stage:stage",
"dockerLabels": {
"Name": "stage-app"
},
"privileged": true,
"name": "stage-app"
}
],
"family": "stage-app"
}
注册此修订
aws ecs register-task-definition --cli-input-json file://stage-nodejs.json
使用新的任务定义更新服务
aws ecs update-service --cluster cluster_name --service service_name --task-definition task_definition_name
重新部署服务
aws ecs update-service --cluster ec2cluster_name --service service_name --force-new-deployment