如何在Amazon Linux 2的Elastic Beanstalk中使用多容器Docker?
AWS Elastic Beanstalk 多容器部署迁移示例(适配Docker running on 64bit Amazon Linux 2)
Amazon Linux 2 Docker平台默认同时支持Dockerrun.aws.json v3和docker-compose.yml两种配置方式,二选一即可,以下是可直接运行的生产级示例,覆盖常见的前后端+API服务的多容器场景
方案1:Dockerrun.aws.json v3 配置示例
{ "AWSEBDockerrunVersion": "3", "containerDefinitions": [ { "name": "frontend-app", "image": "public.ecr.aws/nginx/nginx:alpine", "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "essential": true, "mountPoints": [ { "sourceVolume": "frontend-static", "containerPath": "/usr/share/nginx/html" } ], "environment": [ { "name": "API_HOST", "value": "backend-api" } ] }, { "name": "backend-api", "image": "public.ecr.aws/docker/library/node:18-alpine", "portMappings": [ { "hostPort": 3000, "containerPort": 3000 } ], "essential": true, "environment": [ { "name": "NODE_ENV", "value": "production" } ] } ], "volumes": [ { "name": "frontend-static", "host": { "sourcePath": "/var/app/current/frontend/dist" } } ] }
AWSEBDockerrunVersion必须指定为3,对应Amazon Linux 2平台的格式要求essential标记为true的容器如果意外退出,EB会自动重启整个实例组- 容器之间可直接通过
name字段的值作为域名互相通信,示例中前端容器可直接通过http://backend-api:3000访问后端服务
方案2:docker-compose.yml 配置示例
和上面的场景完全对应,配置更简洁:
version: "3.8" services: frontend-app: image: public.ecr.aws/nginx/nginx:alpine ports: - 80:80 volumes: - frontend-static:/usr/share/nginx/html environment: - API_HOST=backend-api restart: always backend-api: image: public.ecr.aws/docker/library/node:18-alpine ports: - 3000:3000 environment: - NODE_ENV=production restart: always volumes: frontend-static: driver: local driver_opts: type: none o: bind device: /var/app/current/frontend/dist
如果选择docker-compose方式,不需要额外编写Dockerrun.aws.json文件,EB会自动识别根目录下的docker-compose.yml完成部署
部署操作步骤
- 项目打包时,将配置文件(Dockerrun.aws.json 或 docker-compose.yml)放在压缩包根目录,不要嵌套外层文件夹
- 登录EB控制台,创建/更新环境时,平台选择
Docker running on 64bit Amazon Linux 2的最新版本 - 上传打包好的zip包提交部署即可,部署完成后可通过EB环境域名访问验证服务可用性
常见注意事项
若使用私有镜像仓库(如私有ECR、Docker Hub私有库),需要在配置中补充凭证信息:v3格式下添加
authentication字段指定存储.dockercfg凭证的S3路径,docker-compose格式下可将凭证直接打包到部署包的.docker/config.json路径
多容器的日志会自动收集到CloudWatch,和原有v2版本的日志采集逻辑一致,不需要额外配置
内容的提问来源于stack exchange,提问作者Natheeshkumar Rangasamy
相关产品推荐
相关产品推荐

