假设我有一个简单的独立 Dockerfile 及其 entrypoint.sh。该容器已构建并存储在 AWS ECR 上。
在本地,我这样运行它:
docker run —rm my_container my_parameters
我不需要负载平衡,也不需要在执行后保持容器活动,只是为了按需执行(通过 AWS API)。
在 AWS 上执行此操作的最简单方法是什么?
假设我有一个简单的独立 Dockerfile 及其 entrypoint.sh。该容器已构建并存储在 AWS ECR 上。
在本地,我这样运行它:
docker run —rm my_container my_parameters
我不需要负载平衡,也不需要在执行后保持容器活动,只是为了按需执行(通过 AWS API)。
在 AWS 上执行此操作的最简单方法是什么?
这是在AWS上运行最简单容器的前 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,您可以在此处探索任何编程语言的相同内容。