簡體   English   中英

在ECS上從ECR運行Docker映像

[英]Running a Docker image from ECR on ECS

我在ECR中有一個docker映像。 我想在ECS中運行它。 我已經按照中把我的AWS文檔中的步驟在這里 該操作通過一系列步驟來設置某種ECS集群,但它從未詢問我要運行ECR中的哪個Docker映像。

運行docker映像非常簡單,但是ECS對於我想做的事情似乎過於復雜(運行簡單Web服務的docker映像)。 是我找到的最好的解釋。 也許我錯過了一些事情。

亞馬遜的文檔似乎不切線,從不回到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": []
}

我了解當您談論如何在ECS上運行Docker映像時幾乎不會感到困惑。 我列出了一些關鍵概念,這些概念將使您更輕松地使用ECS。

集群 :要在AWS上使用ECS,首先要做的就是創建一個集群。 創建集群很簡單,因為您只需要在以下兩種主要模板類型中進行選擇即可。

  • EC2 :此集群只能運行配置為在EC2實例上運行映像的任務定義。 就像創建EC2實例並在其上運行docker映像一樣。
  • Fargate :在Fargate群集中,不會創建EC2實例,而是僅在EC2服務上創建網絡接口。 您仍然可以分配公共IP並根據任務定義查看容器映像。

任務定義 :您可以將任務定義視為定義容器映像的地方。 此任務定義用於在集群內部運行任務。 您可以在任務定義中定義與Docker映像相關的所有內容,即,可以在任務定義中配置可以使用docker run命令執行的所有操作。

服務 :服務使用任務定義來運行任務。 例如,您有一個docker映像,並且希望至少有兩個實例始終在運行您的映像。 您可以在將服務配置為兩個時設置實例數,ECS服務將確保兩個任務始終在群集內運行您的映像。 如果任務由於某種原因而失敗,它將繼續嘗試運行您的任務。

任務 :任務是ECS中的實體,該實體實際運行您的Docker映像。 可以使用服務或直接創建新任務來生成任務。 在這兩種情況下,您都必須具有一個任務定義,其中包含有關docker映像的信息。

回答您的評論:

“我想我必須編輯容器定義而不是任務定義”

好吧,容器定義就是任務定義。 如果要更新映像,則可以創建任務定義的新修訂版,並使用該修訂版運行任務。 如果通過服務運行任務,則可以更新服務並分配最新的任務定義。 該服務將自動生成具有最新任務​​定義的新任務。 要使用ECR圖片,只需復制圖片名稱旁邊的圖標中的url,然后將其粘貼到任務定義中的“圖片”下即可。

注意 :您應該已啟用公共IP和/或與實例(EC2)/網絡接口(代理)的Internet連接以連接到ECR,請閱讀此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM