0

假设我有一个简单的独立 Dockerfile 及其 entrypoint.sh。该容器已构建并存储在 AWS ECR 上。

在本地,我这样运行它:

docker run —rm my_container my_parameters

我不需要负载平衡,也不需要在执行后保持容器活动,只是为了按需执行(通过 AWS API)。

在 AWS 上执行此操作的最简单方法是什么?

4

1 回答 1

0

这是在AWS上运行最简单容器的前 3 层。

  1. 创建集群
  2. 创建任务定义
  3. 创建服务

但是在上面的序列中,您的命令docker run —rm my_container my_parameters属于第 3 层。在layer 1整个生命周期中只需要创建一次,layer 2如果需要进行任何更改,例如端口更新或任务定义中的任何 ENV,则需要进行更新,但在某些情况下这并不常见.

所以更好地管理layer3使用 API 或 AWS CLI。正如您按需提到的那样,您还可以使用基于计划的容器运行,该容器将在特定时间运行和停止。

bash 脚本将创建任务定义(模板)、启动服务(运行容器)和停止另一个服务(停止容器)。

#!/bin/bash
AWS_PROFILE="test"
COMMAND="${1}"
ECS_CLUSTER="test"
if [ "${COMMAND}" == "setup_task" ]; then
aws ecs register-task-definition --cli-input-json file://taskdefinition.json --profile $AWS_PROFILE
elif [ "${COMMAND}" == "run_container" ]; then
aws ecs create-service  --cluster $ECS_CLUSTER  --service-name ecs-simple-service    --task-definition nginx    --desired-count 1 --profile $AWS_PROFILE
elif [ "${COMMAND}" == "stop_container" ];then
aws ecs delete-service --cluster $ECS_CLUSTER --service ecs-simple-service --force --profile $AWS_PROFILE
else
>&2 echo "Wrong Argument passed! Valid option is setup_task, run_container and stop_container"
fi

任务定义

taskdefinition.json


{
  "containerDefinitions": [
  {
    "cpu": 0,
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "/ecs/stage-background-worker",
        "awslogs-region": "us-west-2",
        "awslogs-stream-prefix": "ecs"
  }
},
    "environment": [
      {
        "name": "NODE_ENV",
        "value": "staging"
      }
    ],


    "memoryReservation": 400,
    "image": "youarn.dkr.ecr.us-west-2.amazonaws.com:latest",
    "dockerLabels": {
      "Name": "test"
    },
    "privileged": true,
    "name": "test"
  }
],

"family": "test"
}

这基于 AWS-CLI,您可以在此处探索任何编程语言的相同内容。

于 2019-08-30T02:44:18.347 回答