AWS Fargate 是一项无服务器容器托管服务,允许用户在无需配置和管理基础设施的情况下运行 Docker 容器。本文将详细介绍如何使用 AWS Fargate 部署一个简单的容器应用。
AWS Elastic Container Registry (ECR) 是一个完全托管式容器镜像注册表服务。我们将在此步骤中创建一个用于存放 Docker 镜像的 ECR 仓库。
aws ecr create-repository --repository-name my-fargate-app
构建 Docker 镜像:使用以下命令来构建本地的 Docker 镜像。假设你的应用代码位于 app
目录中。
docker build -t my-fargate-app .
登录 ECR 仓库:
aws ecr get-login-password | docker login --username AWS --password-stdin <YOUR_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com
推送镜像到 ECR 仓库:
docker tag my-fargate-app:latest <YOUR_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/my-fargate-app:latest
docker push <YOUR_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/my-fargate-app:latest
容器定义文件(如 task-definition.json
)是描述任务定义的 JSON 文件,其中包含服务所需的所有信息。以下是一个基本示例:
{
"family": "my-fargate-task",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "web",
"image": "<YOUR_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/my-fargate-app:latest",
"memoryReservation": 300,
"portMappings": [
{ "containerPort": 80, "hostPort": 80 }
],
"essential": true
}
]
}
使用 AWS Command Line Interface (CLI) 创建 Fargate 任务定义并启动服务。
创建任务定义:
aws ecs register-task-definition --cli-input-json file://task-definition.json
启动服务并关联负载均衡器(可选):如果需要将容器暴露在公共网络中,可以使用 AWS Elastic Load Balancing (ELB)。
aws ecs create-service --cluster my-cluster --task-definition my-fargate-task --desired-count 1 --load-balancer-attributes "[{\"Key\":\"elb-name\",\"Value\":\"my-load-balancer\"}]" --network-configuration "awsvpcConfiguration={subnets=[subnet-0123456789abcdef0],securityGroups=[sg-0123456789abcdef0]}"
使用 AWS CLI 或 AWS 管理控制台监控 Fargate 任务的运行状态,并查看容器的日志。
aws ecs list-tasks --cluster my-cluster --task-definition my-fargate-task
获取任务 ID 后,可以使用以下命令查看详细信息:
aws ecs describe-tasks --cluster my-cluster --tasks <TASK_ID>
通过 CloudWatch Logs 查看容器日志:
aws logs filter-log-events --log-group-name /ecs/my-fargate-task
以上步骤展示了如何使用 AWS Fargate 部署一个简单的 Docker 容器应用。Fargate 提供了一种便捷的方式来运行容器,无需管理底层基础设施,大大简化了部署过程。