docker compose 实现前后端分离项目独立交付的核心是服务拆分与配置解耦:前端、后端、nginx、mysql 等各为独立容器,通过 docker-compose.yml 统一声明依赖、网络、挂载和启动顺序;使用 .env 管理环境变量,nginx 代理通过服务名自动 dns 解析,mysql 数据挂载命名卷保障持久化,交付物仅为 compose 文件、构建产物及配置,支持“一套配置,随处运行”。

用 Docker Compose 实现前后端分离项目的独立交付,核心在于把每个服务(前端、后端、Nginx、数据库等)拆成独立容器,通过 docker-compose.yml 统一声明依赖、网络、挂载和启动顺序,做到“一套配置,随处运行”。
服务按职责拆分,各自构建镜像
前端、后端不能打包进同一个镜像。要分别维护各自的 Dockerfile:
- 前端(如 Vue):基于 Nginx 镜像,
COPY dist/ /usr/share/nginx/html/,再覆盖nginx.conf实现路由回退和 API 代理 - 后端(如 Spring Boot):基于 OpenJDK 镜像,
COPY app.jar /app.jar,用ENTRYPOINT启动,不暴露构建工具链 - Nginx 单独作为反向代理层,不混入业务逻辑;MySQL/Redis 等基础设施也各自成服务,不嵌入应用镜像
环境与配置解耦,支持多环境切换
避免硬编码 IP 或端口,全部交由 Compose 管理:
- 用
.env文件定义变量,比如BACKEND_PORT=8080、MYSQL_ROOT_PASSWORD=mysecretpass - 在
docker-compose.yml中通过${VAR}引用,不同环境只需换一个.env.prod或.env.dev - 前端构建时不用写死后端地址,Nginx 的
proxy_pass指向服务名(如http://backend:8080),Compose 自动做 DNS 解析
数据持久化与启动依赖合理设计
确保关键状态不随容器销毁而丢失,并解决启动时序问题:
- MySQL 数据挂载到命名卷(
mysql-data:)或宿主机路径,避免重启后库表清空 - 不要只靠
depends_on等待数据库“容器启动”,它不保证 MySQL 服务就绪;可配合健康检查(healthcheck)或前置脚本做就绪等待 - 前端静态资源、后端配置文件、Nginx 配置都通过
volumes或COPY注入,不放在镜像里硬编码
交付物精简,仅需 compose 文件 + 构建产物
真正交付给运维或测试的,不是源码,而是可复现的部署包:
- 前端交付
dist/目录 +nginx.conf+ 前端Dockerfile - 后端交付打包好的
.jar或.war+ 对应Dockerfile - 根目录下放
docker-compose.yml和.env,运行docker-compose up -d即可拉起整套环境 - CI/CD 流程中,可直接用这个结构构建镜像并推送到私有 Registry,实现镜像级交付











