我在ECR中有一个docker映像。我想在ECS中运行它。我已经按照AWS文档中的步骤进行操作,here带我进入。该操作通过一系列步骤来设置某种ECS集群,但从未询问我要运行ECR中的哪个Docker映像。
运行docker映像非常简单,但是ECS对于我要执行的操作似乎过于复杂(运行简单Web服务的docker映像)。 This是我找到的最好的解释。也许我错过了什么。
Amazon的文档似乎不切线,并且从不回到ECR中的docker映像。关于如何在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": []
}
答案 0 :(得分:0)
我了解到您在谈论如何在ECS上运行docker image时几乎不会感到困惑。我列出了一些关键概念,这些概念可以使您轻松使用ECS。
集群:要在AWS上使用ECS,首先要做的就是创建一个集群。创建集群很简单,因为您只需要在以下两种主要模板类型中进行选择即可。
任务定义:您可以将任务定义视为定义容器映像的地方。此任务定义用于在集群内部运行任务。您可以在任务定义中定义与docker映像相关的所有内容,即可以使用docker run
命令执行的任何操作都可以在任务定义中进行配置。
服务:该服务使用任务定义来运行任务。例如,您有一个docker映像,并且希望至少有两个实例始终在运行您的映像。您可以在将服务配置为两个时设置实例数,ECS服务将确保两个任务始终在群集内运行您的映像。如果某个任务由于某种原因而失败,它将继续尝试运行您的任务。
任务:任务是ECS中的实体,它实际运行您的Docker映像。可以使用服务或直接创建新任务来生成任务。在这两种情况下,您都必须有一个任务定义,其中包含有关docker映像的信息。
回答您的评论:
“我想我必须编辑容器定义而不是任务定义” 。
那么,容器定义就是任务定义。如果要更新映像,则可以创建任务定义的新修订版,并使用该修订版运行任务。如果通过服务运行任务,则可以更新服务并分配最新的任务定义。该服务将自动生成具有最新任务定义的新任务。要使用ECR图片,只需复制图片名称旁边的图标中的网址,然后将其粘贴到任务定义中的“图片”下方即可。
注意:您应该已启用公共ip和/或与实例(EC2)/网络接口(代理)的Internet连接以连接到ECR,请阅读https://localhost:9444/scim2/Users?filter=emails.value+co+richard01。>