Docker 容器部署到 AWS:从 ECR 镜像仓库到 ECS 无服务器容器

把 Docker 容器部署上 AWS 的完整路径:准备镜像 → 建数据库 → 推送 ECR → 先用 EC2+Auto Scaling 手动方案理解原理,再用 ECS(Fargate)无服务器化部署。本文讲清两条路线的取舍。

最佳实践
容器模块与编排港口插画

直接回答:Docker 容器上 AWS 有两条主路线——EC2 + Auto Scaling 组(自己管虚拟机集群,可控但繁琐)和 ECS + Fargate(无服务器容器平台,免管底层主机)。完整流程共通:本地构建镜像 → 推送 ECR 镜像仓库 → 配置数据库与网络 → 选择部署载体。新手建议先走一遍 EC2 路线理解原理,生产按算力、平台限制、扩缩容和总成本选择。

为什么容器要配公有云

容器提供一致的运行时环境;公有云提供按需伸缩的基础设施——不用再提前半年规划容量,资源随负载上下。AWS 的 EC2、RDS、ECS 三件套把容器编排、扩缩容与管理大幅简化。

通用准备步骤

1. 准备 Docker 镜像:Dockerfile 多阶段构建,镜像尽量小;本地 docker build + 冒烟测试通过后再谈部署。

2. 创建数据库:RDS 建 PostgreSQL/MySQL 实例,注意把数据库端口入站来源限制为应用安全组(按 VPC 拓扑配置),不要笼统放行整个子网——数据库绝不暴露公网。

3. 推送 ECR:

aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.com
docker tag myapp:latest <account>.dkr.ecr.<region>.amazonaws.com/myapp:latest
docker push <account>.dkr.ecr.<region>.amazonaws.com/myapp:latest

上述为参数示例,先替换 account/region,创建 ECR 仓库并使用受限 IAM 身份;region 必须一致。镜像架构需与任务 CPU 架构匹配,生产用不可变标签或 digest,不把凭证写进镜像。

路线一:EC2 + Auto Scaling(理解原理用)

启动模板里写 user data 脚本(装 Docker → 登录 ECR → 拉镜像 → 起容器),Auto Scaling 组按 CPU 指标伸缩实例数。这条路线什么都要自己管:Docker 版本、镜像更新、容器健康检查——教学价值高,运维成本高。

路线二:ECS + Fargate(生产推荐)

定义任务(Task Definition:镜像 URI、CPU/内存、环境变量、日志驱动)→ 建 Service 指定副本数 → Fargate 自动供给底层算力,没有一台虚拟机要你管。这些能力需要显式配置;区分用于拉镜像/写日志的 execution role 与应用访问 AWS 的 task role。Fargate 使用 awsvpc,配置子网、任务安全组及到 ECR/S3/日志服务的 NAT 或 VPC endpoint 网络;ALB 使用 IP target,并配置健康检查和应用优雅退出。

Fargate 的任务日志与采集组件也应在 Task Definition 中规划,不能照搬宿主机或 DaemonSet 安装方式。部署后先检查日志是否持续写入、任务替换后能否按新任务标识找到记录,再配置应用链路采集。

常见问题(FAQ)

Q:ECS Fargate 和 EC2 模式怎么选?
A:Fargate 免管宿主但有支持规格与平台限制,EC2 模式提供实例选择与容量控制;按资源、延迟、GPU 等要求比较,不给统一默认结论。

Q:镜像更新怎么触发部署?
A:推送新镜像后建议注册引用新不可变镜像的任务定义 revision 并更新 Service;沿用可变标签时 force-new-deployment 可触发新任务拉取,ECS 按任务定义滚动替换;配合 CI/CD 可实现推送即发布。

Q:数据库一定要 RDS 吗?
A:不是必须,但强烈建议——备份保留、维护窗口与 Multi-AZ 故障转移能力取决于配置和实例类型,不是所有 RDS 部署默认高可用。自己在 EC2 里装数据库等于把最重的运维包袱背回来。

官方参考

本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台