在ECS上从ECR运行Docker镜像

问题描述 投票:0回答:1

我在ECR中有一个码头图像。我想在ECS中运行它。我已经按照AWS文档中的步骤进行了操作,其中包括here。这贯穿了一系列设置某种ECS集群的步骤,但它从未询问ECR中我想运行哪个docker镜像。

运行docker镜像非常简单,但ECS对于我正在尝试做的事情似乎过于复杂(运行简单Web服务的docker镜像)。 This是我发现的最佳解释。也许我错过了什么。

亚马逊的文档似乎与切线相关,并且永远不会回到ECR中的码头图像。有关如何在ECS中运行ECR图像的更好解释吗?

编辑:添加任务定义json:

{
  "ipcMode": null,
  "executionRoleArn": "arn:aws:iam::504084722442:role/ecsTaskExecutionRole",
  "containerDefinitions": [
    {
      "dnsSearchDomains": null,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/first-run-task-definition",
          "awslogs-region": "us-east-2",
          "awslogs-stream-prefix": "ecs"
        }
      },
      "entryPoint": [
        "sh",
        "-c"
      ],
      "portMappings": [
        {
          "hostPort": 80,
          "protocol": "tcp",
          "containerPort": 80
        }
      ],
      "command": [
        "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' >  /usr/local/apache2/htdocs/index.html && httpd-foreground\""
      ],
      "linuxParameters": null,
      "cpu": 256,
      "environment": [],
      "resourceRequirements": null,
      "ulimits": null,
      "dnsServers": null,
      "mountPoints": [],
      "workingDirectory": null,
      "secrets": null,
      "dockerSecurityOptions": null,
      "memory": null,
      "memoryReservation": 512,
      "volumesFrom": [],
      "image": "504084722442.dkr.ecr.us-east-2.amazonaws.com/dean.w.schulze.5040",
      "disableNetworking": null,
      "interactive": null,
      "healthCheck": null,
      "essential": true,
      "links": [],
      "hostname": null,
      "extraHosts": null,
      "pseudoTerminal": null,
      "user": null,
      "readonlyRootFilesystem": null,
      "dockerLabels": null,
      "systemControls": null,
      "privileged": null,
      "name": "sample-app"
    }
  ],
  "placementConstraints": [],
  "memory": "512",
  "taskRoleArn": null,
  "compatibilities": [
    "EC2",
    "FARGATE"
  ],
  "taskDefinitionArn": "arn:aws:ecs:us-east-2:504084722442:task-definition/first-run-task-definition:2",
  "family": "first-run-task-definition",
  "requiresAttributes": [
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.execution-role-ecr-pull"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.task-eni"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.ecr-auth"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.execution-role-awslogs"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
    }
  ],
  "pidMode": null,
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "256",
  "revision": 2,
  "status": "ACTIVE",
  "volumes": []
}
amazon-web-services docker amazon-ecs
1个回答
0
投票

我知道当你谈到如何在ECS上运行docker镜像时,几乎没有什么困惑。我列出了一些关键概念,这些概念将使ECS变得简单。

集群:要在AWS上使用ECS,您首先要做的是创建集群。创建集群很简单,因为您只需要在以下两种主要类型的模板中进行选择。

  • EC2:此群集只能运行配置为在EC2实例上运行映像的任务定义。这就像创建EC2实例并在其上运行docker镜像一样。
  • Fargate:在远程集群中,未创建EC2实例,而只是在EC2服务上创建网络接口。您仍然可以根据任务定义分配公共IP并查看容器图像。

任务定义:您可以将任务定义视为定义容器图像的位置。此任务定义用于在集群内运行任务。您可以在任务定义中定义与docker镜像相关的所有内容,即可以使用docker run命令执行的任何操作都可以在任务定义中进行配置。

服务:该服务使用任务定义来运行任务。例如,您有一个泊坞窗图像,并且您希望至少有两个实例始终运行您的图像。您可以在将服务配置为两个时设置实例数,ECS服务将确保两个任务始终在群集内运行您的映像。如果任务因某种原因而失败,它将继续尝试运行您的任务。

任务:任务是ECS中实际运行您的docker镜像的实体。可以使用服务或直接创建新任务来生成任务。在这两种情况下,您都必须具有包含有关docker镜像信息的任务定义。

回答你的评论:

“我想我必须编辑容器定义而不是任务定义”。

那么,容器定义就是任务定义。如果要更新映像,可以创建任务定义的新修订版并使用此修订版来运行任务。如果通过服务运行任务,则可以更新服务并分配最新的任务定义。该服务将自动生成具有最新任务​​定义的新任务。要使用ECR图像,只需从图像名称旁边的图标中复制URL,然后将其粘贴到任务定义中的“图像”下。

注意:您应该启用公共IP和/或到实例(EC2)/网络接口(fargate)的互联网连接以连接到ECR,阅读here

© www.soinside.com 2019 - 2024. All rights reserved.