You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Elastic Beanstalk实现Docker Compose构建部署Spring Boot应用

问题描述

我本地通过docker compose up命令运行Spring Boot应用,无需拉取应用镜像,直接通过Dockerfile构建并部署容器,对应的docker-compose.yml和Dockerfile内容如下:

version: '3'

services:
  my-db:
    image: mysql:8.0
    container_name: my_app 
   ... 
  app:
    depends_on:
      - my-db
    build: ../my_app
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      SPRING_APPLICATION_JSON: '{
   ... 
          }'
    volumes:
      - .m2:/root/.m2
    stdin_open: true
    tty: true

volumes:
  db:

-- Dockerfile

FROM maven:3.8.3-openjdk-17

WORKDIR /my_app
COPY . .
RUN mvn clean install -DskipTests

CMD mvn spring-boot:run

但我查阅多篇教程,发现均需构建Docker镜像并推送到远程仓库,请问如何在AWS Elastic Beanstalk上实现与本地一致的构建部署行为?


解决方案

Elastic Beanstalk支持多容器Docker环境直接复用本地的构建逻辑,无需提前推送镜像到远程仓库,只需调整配置和目录结构即可实现:

1. 调整目录结构

将Spring Boot项目代码、Dockerfile、docker-compose.yml整理为如下结构,确保Elastic Beanstalk能正确识别构建路径:

my-eb-deploy/
├── docker-compose.yml
└── my_app/
    ├── Dockerfile
    ├── pom.xml
    └── src/
        └── ...(Spring Boot业务代码)

2. 修改docker-compose.yml构建路径

由于Elastic Beanstalk会将部署包的根目录作为工作目录,需把原有的build: ../my_app调整为当前包内的相对路径:

version: '3'

services:
  my-db:
    image: mysql:8.0
    container_name: my_app_db
    # 补充数据库必要配置(根据实际需求调整)
    environment:
      MYSQL_ROOT_PASSWORD: your_root_pwd
      MYSQL_DATABASE: your_db_name
    volumes:
      - db:/var/lib/mysql
  app:
    depends_on:
      - my-db
    build: ./my_app  # 调整为部署包内的相对路径
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      SPRING_APPLICATION_JSON: '{
        "spring.datasource.url": "jdbc:mysql://my-db:3306/your_db_name?useSSL=false&serverTimezone=UTC",
        "spring.datasource.username": "root",
        "spring.datasource.password": "your_root_pwd"
      }'
    stdin_open: true
    tty: true

volumes:
  db:

3. 准备部署包

  • 将my-eb-deploy目录下的所有内容打包为ZIP文件(注意:不要把my-eb-deploy父目录本身放进ZIP,要让docker-compose.yml和my_app目录直接处于ZIP根目录)
  • 清理本地缓存文件(如.m2、IDE临时文件),避免部署包过大

4. 部署到Elastic Beanstalk

  • 登录AWS控制台进入Elastic Beanstalk服务
  • 创建新应用,选择多容器Docker作为平台
  • 上传准备好的ZIP部署包,Elastic Beanstalk会自动执行以下操作:
    1. 拉取MySQL官方镜像
    2. 根据my_app目录下的Dockerfile构建Spring Boot应用镜像
    3. 按照docker-compose.yml的配置启动所有容器

5. 关键注意事项

  • 选择至少t2.medium规格的EC2实例,确保有足够资源完成Maven构建
  • 数据库的敏感配置(如密码)建议通过Elastic Beanstalk的「环境属性」配置,不要硬编码在docker-compose.yml中
  • 确保EC2实例的安全组允许访问Maven中央仓库、MySQL内部端口
  • 若需优化构建速度,可在Dockerfile中使用分层构建,减少重复依赖的编译时间

内容的提问来源于stack exchange,提问作者memoricab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:12:24