Запуск образа Docker из ECR на ECS - PullRequest
0 голосов
/ 24 марта 2019

У меня есть изображение докера в ECR. Я хочу запустить его в ECS. Я следовал инструкциям в документации AWS, которые приводят меня сюда . Это проходит через ряд шагов, которые настраивают некоторый кластер ECS, но никогда не спрашивает, какой образ докера в ECR я хочу запустить.

Запуск образа Docker очень прост, но ECS кажется слишком сложным для того, что я пытаюсь сделать (запустить образ Docker простого веб-сервиса). Это - лучшее объяснение, которое я нашел. Может быть, я что-то пропустил.

Документы Amazon, похоже, расходятся по касательным и никогда не возвращаются к образу докера в ECR. Есть ли лучшее объяснение того, как запустить образ ECR в ECS?

Редактировать: добавление определения задачи 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": []
}

1 Ответ

0 голосов
/ 26 марта 2019

Я понимаю, что возникает небольшая путаница, когда вы говорите о том, как запустить образ докера в ECS. Я перечислил некоторые ключевые концепции, которые облегчат вам работу ECS.

Кластер : чтобы использовать ECS в AWS, первое, что вам нужно сделать, это создать кластер. Создать кластер просто, потому что вам нужно только выбрать один из следующих двух основных типов шаблонов.

  • EC2 : этот кластер может запускать только те определения задач, которые настроены для запуска образа на экземпляре EC2. Это похоже на создание экземпляра EC2 и запуск на нем образа докера.
  • Fargate : В кластере fargate экземпляр EC2 не создается, а только создает сетевой интерфейс для служб EC2. Вы по-прежнему можете назначить общедоступный IP-адрес и просмотреть изображение контейнера на основе определения вашей задачи.

Определение задачи : Вы можете думать об определении задачи как о месте, чтобы определить изображение своего контейнера. Это определение задачи используется для запуска задачи внутри кластера. Вы можете определить все, что связано с образом докера, в вашем определении задачи, то есть все, что можно сделать с помощью команды docker run, можно настроить в определении задачи.

Служба : Служба использует определение задачи для запуска задачи. Например, у вас есть один образ докера, и вы хотите, чтобы по крайней мере два экземпляра всегда выполняли ваш образ. Вы можете установить номер экземпляра при настройке службы как две, и служба ECS будет следить за тем, чтобы две задачи всегда выполняли ваш образ внутри кластера. Если задача по какой-либо причине закрывается, она будет пытаться выполнить вашу задачу.

Задача : Задача - это сущность в ECS, которая фактически запускает ваш образ докера. Задача может быть создана с помощью службы или путем непосредственного создания новой задачи. В обоих случаях у вас должно быть определение задачи, которое содержит информацию о вашем образе докера.

Ответ на ваш комментарий:

«Полагаю, мне нужно отредактировать определение контейнера вместо определения задачи» .

Ну, определение контейнера - это определение задачи. Если вы хотите обновить изображение, вы можете создать новую редакцию определения задачи и использовать эту редакцию для запуска вашей задачи. Если вы выполняете свою задачу через службу, вы можете обновить службу и назначить последнее определение задачи. Служба автоматически создаст новую задачу с последним определением задачи. Чтобы использовать изображение ECR, просто скопируйте URL-адрес со значка рядом с именем изображения и вставьте его под «Изображение» в определении задачи.

Примечание : у вас должен быть включен общедоступный ip и / или подключение к Интернету к экземпляру (EC2) / сетевому интерфейсу (fargate) для подключения к ECR, прочитайте здесь .

...