Docker Compose 实战:一键部署前后端分离项目
概述
Docker Compose 是 Docker 官方推出的容器编排工具,通过 YAML 文件定义多容器应用的服务、网络和卷,实现一键启动与停止。本文以典型前后端分离项目为例(前端 Vue + Nginx,后端 Spring Boot + MySQL),演示如何使用 Docker Compose 实现快速部署。
环境准备
- 安装 Docker:确保已安装 Docker 18.06+ 版本。
- 安装 Docker Compose:从官方文档安装最新版。
- 项目源码:准备好前端(dist 目录或构建镜像)、后端 JAR 包及 Dockerfile。
项目结构
project/├── frontend/│ ├── Dockerfile│ └── dist/ # 打包后的静态文件├── backend/│ ├── Dockerfile│ └── app.jar # Spring Boot 可执行 JAR├── mysql/│ └── init.sql # 初始化数据库脚本└── docker-compose.ymlDockerfile 编写
前端 Dockerfile
FROM nginx:alpineCOPY dist /usr/share/nginx/htmlCOPY nginx.conf /etc/nginx/nginx.conf其中 nginx.conf 配置反向代理到后端 API。
后端 Dockerfile
FROM openjdk:11-jre-slimCOPY app.jar /app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "/app.jar"]配置 docker-compose.yml
version: '3.8'services: mysql: image: mysql:8.0 container_name: mysql environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: mydb volumes: - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql - mysql-data:/var/lib/mysql ports: - "3306:3306" backend: build: ./backend container_name: backend depends_on: - mysql environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydb?useSSL=false SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: root123 ports: - "8080:8080" frontend: build: ./frontend container_name: frontend depends_on: - backend ports: - "80:80"volumes: mysql-data:启动与验证
- 在项目根目录执行
docker-compose up -d启动所有服务。 - 查看容器状态:
docker-compose ps。 - 访问前端
http://localhost,测试页面与 API 接口。 - 日志查看:
docker-compose logs -f。
常用命令
docker-compose up -d:后台启动docker-compose down:停止并删除容器docker-compose restart:重启服务docker-compose build:重新构建镜像
注意事项
- 确保
init.sql包含数据库初始化语句,否则后端启动时会报错。 - 后端连接 MySQL 时,主机名使用 service 名称
mysql,Docker Compose 自动解析。 - 生产环境应指定镜像标签,避免使用 latest。
总结
通过 Docker Compose,我们仅需一个 YAML 文件和一条命令即可启动完整的前后端分离项目。这种方法简化了开发、测试和生产环境的一致性管理,是微服务和容器化部署的利器。