AWS更新后重新部署Docker

时间:2019-07-13 22:15:27

标签: amazon-web-services docker amazon-ec2

我有一个带有运行任务的服务的AWS EC2集群。假设任务的图像为my-app:latest

当我想更新应用程序时,我将构建一个新的Docker映像并将其推送到ECR。

现在,如何将新的my-app:latest图像滚动到我的实例上?

1 个答案:

答案 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