ECS 与 Fargate
容器上云、Task/Service、与 K8s 选型。
35 分钟
ECS 与 Fargate
ECS(Elastic Container Service) 在 AWS 上跑 Docker 容器;Fargate 免管 EC2 节点,只定义 Task CPU/内存。介于宝塔单机 Docker 与 kubernetes-essentials 全功能编排之间的 AWS 原生容器路径。
学习目标
- 理解 Cluster、Task Definition、Service、Fargate
- 对照 Docker Compose 与 K8s Deployment
- 评估 CodeRoadMap backend 容器上 ECS 的步骤
核心内容
概念对照
| ECS | Docker / K8s |
|---|---|
| Task Definition | docker-compose.yml 服务定义 |
| Task | 一次运行的容器组 |
| Service | 维持 N 个 Task 运行(类似 Deployment) |
| Fargate | 无 K8s 控制面,AWS 管节点 |
选型:已深度用 K8s + Helm → EKS;想少运维节点、镜像来自 docker-essentials → ECS Fargate。
最小 Task Definition(片段)
{
"family": "coderoadmap-backend",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "256",
"memory": "512",
"containerDefinitions": [{
"name": "api",
"image": "123456789012.dkr.ecr.ap-southeast-1.amazonaws.com/coderoadmap:latest",
"portMappings": [{ "containerPort": 8080 }]
}]
}
Console
ECS → Clusters → Create → Fargate → Task definitions → Create → Service(选 VPC 子网 + 安全组 + ALB 可选)。
CLI 示例
# 注册 task definition
aws ecs register-task-definition --cli-input-json file://task-def.json
# 创建 Fargate 服务
aws ecs create-service --cluster coderoadmap-lab --service-name backend \
--task-definition coderoadmap-backend:1 --desired-count 1 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[subnet-xxx],securityGroups=[sg-xxx],assignPublicIp=ENABLED}"
# 查看运行中任务
aws ecs list-tasks --cluster coderoadmap-lab --desired-status RUNNING
练习
- 把本地 Docker 镜像 push 到 ECR(或先用 public 镜像实验)