基于Docker Compose的若依多服务一键部署实践
在项目开发中,多服务部署常常让人头疼。环境配置复杂、操作步骤繁琐,稍不注意就容易出错。不过,有了 Docker Compose ,这些问题就简单多啦!它能帮我们高效编排多个容器,轻松实现多服务的一键部署。今天,我就以若依(Ruoyi)项目为例,给大家讲讲怎么用 Docker Compose 部署前端、后端和测试服务 。
一、项目结构与核心文件
(一)目录结构
我们的项目文件放在 D:\app\project\集成docker实现一键部署
路径下,关键的目录和文件有这些:
conf
:存 Nginx 配置文件,像nginx.conf
,决定 Nginx 咋运行 。html
:放前端构建好的静态资源(dist
文件夹 ),Nginx 会用它给前端提供访问 。jar
:存后端服务的可执行 JAR 文件,比如ruoyi.jar
(若依后端 )、test.jar
(测试服务 )。nginx
:有 Nginx 的日志目录(logs
)、额外配置文件目录(conf.d
),让 Nginx 功能更灵活 。ruoyi
:给若依后端和测试服务存日志(logs
)和文件上传路径(uploadPath
)。docker-compose.yml
:Docker Compose 的核心配置文件,定义了多服务咋编排,包括咋构建镜像、映射端口、挂载数据卷 。nginx-dockerfile
、ruoyi-dockerfile
、test-dockerfile
:分别对应 Nginx、若依后端、测试服务的 Dockerfile ,用来构建各自的 Docker 镜像 。
(二)核心文件解析
1. docker-compose.yml
version: '3'
services:# Nginx 服务,负责前端反向代理ruoyi-nginx:container_name: ruoyi-nginx image: nginx build:context: . dockerfile: nginx-dockerfile ports:- "180:180" volumes:- ./html/dist:/home/ruoyi/projects/ruoyi-ui - ./conf/nginx.conf:/etc/nginx/nginx.conf - ./nginx/logs:/var/log/nginx - ./nginx/conf.d:/etc/nginx/conf.d depends_on:- ruoyi-server # 若依后端服务ruoyi-server:container_name: ruoyi-server build:context: . dockerfile: ruoyi-dockerfile ports:- "8085:8085" volumes:- ./ruoyi/logs:/home/ruoyi/logs - ./ruoyi/uploadPath:/home/ruoyi/uploadPath # 测试服务test:container_name: test build:context: . dockerfile: test-dockerfile ports:- "8086:8086" volumes:- ./ruoyi/logs:/home/ruoyi/logs - ./ruoyi/uploadPath:/home/ruoyi/uploadPath
这个文件定义了三个服务 。ruoyi-nginx
是前端反向代理,用 Nginx 镜像构建,还配置了端口映射、数据卷挂载,依赖 ruoyi-server
先启动 。ruoyi-server
和 test
是后端服务,各自用对应的 Dockerfile 构建,也配置了端口和数据卷,方便日志和文件上传路径持久化 。
2. ruoyi-dockerfile(若依后端镜像构建文件 )
# 基础镜像用 OpenJDK 11,给 Java 应用提供运行环境
FROM openjdk:11
MAINTAINER ruoyi VOLUME /home/ruoyi
RUN mkdir -p /home/ruoyi
WORKDIR /home/ruoyi
COPY ../jar/ruoyi.jar /home/ruoyi/ruoyi.jar
ENTRYPOINT ["java", "-jar", "ruoyi.jar"]
基于 OpenJDK 11 镜像,先创建工作目录,把若依的 JAR 文件复制进去,最后定义启动命令,这样就能构建出运行若依后端服务的 Docker 镜像 。
3. test-dockerfile(测试服务镜像构建文件 )
# 基础镜像也是 OpenJDK 11
FROM openjdk:11
MAINTAINER ruoyi VOLUME /home/ruoyi
RUN mkdir -p /home/ruoyi
WORKDIR /home/ruoyi
COPY ../jar/test.jar /home/ruoyi/test.jar
ENTRYPOINT ["java", "-jar", "test.jar"]
和 ruoyi-dockerfile
思路差不多,就是针对测试服务的 JAR 文件,构建对应的 Docker 镜像,配置启动命令 。
二、部署步骤
(一)环境准备
得先装 Docker 和 Docker Compose 。在终端(或命令提示符 )里,用 docker --version
和 docker compose --version
(或者 docker-compose --version
,看版本 )看看装了没 。要是没装,就根据自己的操作系统(Windows、Linux、macOS ),去官方文档找安装方法 。另外,把若依前端构建好的 dist
静态资源、后端 ruoyi.jar
、测试服务 test.jar
放到对应目录(html/dist
、jar/ruoyi.jar
、jar/test.jar
)。
(二)构建并启动服务
打开终端,进入项目目录 D:\app\project\集成docker实现一键部署
,执行命令:
docker compose up -d
Docker Compose 会按照 docker-compose.yml
的配置,构建各个服务的镜像(用对应的 Dockerfile ),创建并启动容器 。过程中能看到构建日志和容器启动状态 。
(三)验证部署结果
- 访问前端和 Nginx:打开浏览器,输入
http://localhost:180
(本地部署的话 ),要是能正常显示若依前端页面,说明 Nginx 服务和前端资源挂载没问题 。 - 测试后端服务:用 Postman 之类的工具,访问若依后端接口,比如
http://localhost:8085/xxx/api
(具体路径看若依项目 ),能拿到正常响应,就说明ruoyi-server
运行正常 。 - 测试测试服务:同样,访问测试服务的接口(
http://localhost:8086/xxx/test-api
,看实际服务 ),验证test
服务工作咋样 。 - 检查日志和数据卷:去
ruoyi/logs
目录,看看有没有服务运行日志;要是服务能上传文件,往ruoyi/uploadPath
传个文件,瞅瞅容器里对应的路径有没有这个文件,验证数据卷挂载对不对 。
三、常见问题及解决办法
(一)镜像构建失败
构建镜像时出错,比如 COPY
指令找不到 JAR 文件,或者基础镜像拉不下来 。
解决:检查 Dockerfile
里 COPY
指令的路径对不对,确保 JAR 文件在指定位置 。要是基础镜像拉取失败,看看网络,或者换国内的 Docker 镜像源(像阿里云的 ),重新构建 。
(二)容器启动失败
容器启动后又退出,或者看日志发现应用启动报错(端口被占、配置文件错了 )。
解决:用 netstat -ano
(Windows )或者 lsof -i :端口号
(Linux、macOS )查查端口是不是被别的进程占用了 。看看容器日志(docker logs 容器名称
),根据报错改配置文件,改完重启服务(docker compose restart 服务名称
)。
(三)服务间网络通信有问题
ruoyi-nginx
没法反向代理到 ruoyi-server
,或者测试服务和其他服务通信失败 。
解决:Docker Compose 会给项目建默认网络,服务间能用服务名称(比如 ruoyi-server
、test
)当主机名通信 。检查服务间调用的 URL ,是不是用了正确的服务名称和端口。要是还不行,就在 docker-compose.yml
里显式定义网络,让各服务加入同一个网络 ,示例:
version: '3'
networks:ruoyi-network:driver: bridge
services:ruoyi-nginx:networks:- ruoyi-networkruoyi-server:networks:- ruoyi-networktest:networks:- ruoyi-network
四、总结
用 Docker Compose 部署若依多服务,把复杂的部署流程变简单啦 !通过合理规划目录结构、写好 Dockerfile 和 Docker Compose 配置,能快速构建、启动和管理若依的前端反向代理、后端服务、测试服务