温馨提示
通过 Docker Compose
编排项目的 JAR
包,实现一键部署。使用 Dockerfile
构建应用的镜像,并通过文件定义服务依赖和网络配置。
准备工作
确保以下工具已安装:
打包项目
在 IntelliJ IDEA
工具中 配置Maven插件,使用 clean
和 package
命令编译和打包 Java
项目为 JAR
文件。
温馨提示
也可以执行命令 mvn clean package
编译打包项目,生成工程应用 JAR
包文件。
编译打包后会在每个服务工程的 target
目录下生成一个 JAR
文件。
包名称 | 端口号 | 包描述 | 说明 |
---|---|---|---|
xiaomayi-nacos | 8848 | Nacos注册中心 | |
xiaomayi-seata | 7091 | Seata分布式事务 | |
xiaomayi-monitor | 9000 | 健康监控 | |
xiaomayi-gateway | 9010 | 网关服务 | |
xiaomayi-auth | 9020 | 认证服务 | |
xiaomayi-system-biz | 9040 | 系统服务 | |
xiaomayi-user-biz | 9042 | 用户服务 | 预留扩展模块 |
xiaomayi-cms-biz | 9043 | CMS服务 | |
xiaomayi-order-biz | 9045 | 订单服务 | 预留扩展模块 |
xiaomayi-product-biz | 9046 | 产品服务 | 预留扩展模块 |
xiaomayi-job | 9044 | 定时任务调度服务 | |
xiaomayi-generator | 9041 | 代码工具服务 | |
xiaomayi-admin-biz | 9030 | 后台管理服务 | |
xiaomayi-web-biz | 9031 | 网站服务 | |
xiaomayi-uniapp-biz | 9032 | 客户端服务 | 预留扩展模块 |
创建构建文件
以下是整个应用基于 Docker
容器化部署的配置文件、JAR包等结构;
xiaomayi-consul-arcovue
├─ xiaomayi-admin-biz
│ ├─ Dockerfile
│ ├─ xiaomayi-admin-biz.jar
├─ xiaomayi-auth
│ ├─ Dockerfile
│ ├─ xiaomayi-auth.jar
├─ xiaomayi-cms-biz
│ ├─ Dockerfile
│ ├─ xiaomayi-cms-biz.jar
├─ xiaomayi-gateway
│ ├─ Dockerfile
│ ├─ xiaomayi-gateway.jar
├─ xiaomayi-generator
│ ├─ Dockerfile
xiaomayi-generator.jar
├─ xiaomayi-job
│ ├─ Dockerfile
│ ├─ xiaomayi-job.jar
├─ xiaomayi-monitor
│ ├─ Dockerfile
│ ├─ xiaomayi-monitor.jar
├─ xiaomayi-nacos
│ ├─ Dockerfile
│ ├─ xiaomayi-nacoss.jar
├─ xiaomayi-order-biz
│ ├─ Dockerfile
│ ├─ xiaomayi-order-biz.jar
├─ xiaomayi-product-biz
│ ├─ Dockerfile
│ ├─ xiaomayi-product-biz.jar
├─ xiaomayi-seata
│ ├─ Dockerfile
│ ├─ xiaomayi-seatas.jar
├─ xiaomayi-system-biz
│ ├─ Dockerfile
│ ├─ xiaomayi-system-biz.jar
├─ xiaomayi-uniapp-biz
│ ├─ Dockerfile
│ ├─ xiaomayi-uniapp-biz.jar
├─ xiaomayi-user-biz
│ ├─ Dockerfile
│ ├─ xiaomayi-user-biz.jar
├─ xiaomayi-web-biz
│ ├─ Dockerfile
│ ├─ xiaomayi-web-biz.jar
├─ docker-compose.yml
以下是 Dockerfile
文件案例,用于构建应用的 Docker
镜像:
# 基础镜像
FROM openjdk:17-jre-alpine
# 维护作者
MAINTAINER 单体架构
# 设置默认时区
ENV TZ=Asia/Shanghai
# 创建目录
RUN mkdir -p /opt/apps
# 指定工作区
WORKDIR /opt/apps
# 添加应用JAR包到容器对应目录下
ADD xiaomayi-admin-biz.jar /opt/apps
# 暴露容器端口号
EXPOSE 8081
# 容器启动之后执行的命令,参数使用逗号隔开
ENTRYPOINT ["java","-jar","xiaomayi-admin-biz.jar"]
温馨提示
上述是 xiaomayi-admin-biz
服务的 Dockerfile
配置文件,其他模块服务基本类似,修改对应的 JAR
包名;
创建部署文件
在项目根目录下创建 docker-compose.yml
文件,定义应用及其依赖服务:
version: '3.7'
# 应用服务
services:
# Nacos服务
xiaomayi-nacos:
# 镜像名称
image: xiaomayi-nacos
# 容器名称
container_name: xiaomayi-nacos
# 构建镜像
build:
context: ./xiaomayi-nacos
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 8848:8848
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# Seata服务
xiaomayi-seata:
# 镜像名称
image: xiaomayi-seata
# 容器名称
container_name: xiaomayi-seata
# 构建镜像
build:
context: ./xiaomayi-seata
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 7091:7091
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# Monitor服务
xiaomayi-monitor:
# 镜像名称
image: xiaomayi-monitor
# 容器名称
container_name: xiaomayi-monitor
# 构建镜像
build:
context: ./xiaomayi-monitor
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9000:9000
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 网关服务
xiaomayi-gateway:
# 镜像名称
image: xiaomayi-gateway
# 容器名称
container_name: xiaomayi-gateway
# 构建镜像
build:
context: ./xiaomayi-gateway
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9010:9010
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 认证服务
xiaomayi-auth:
# 镜像名称
image: xiaomayi-auth
# 容器名称
container_name: xiaomayi-auth
# 构建镜像
build:
context: ./xiaomayi-auth
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9020:9020
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 系统服务
xiaomayi-system-biz:
# 镜像名称
image: xiaomayi-system-biz
# 容器名称
container_name: xiaomayi-system-biz
# 构建镜像
build:
context: ./xiaomayi-system-biz
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9040:9040
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 用户服务
xiaomayi-user-biz:
# 镜像名称
image: xiaomayi-user-biz
# 容器名称
container_name: xiaomayi-user-biz
# 构建镜像
build:
context: ./xiaomayi-user-biz
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9042:9042
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# CMS服务
xiaomayi-cms-biz:
# 镜像名称
image: xiaomayi-cms-biz
# 容器名称
container_name: xiaomayi-cms-biz
# 构建镜像
build:
context: ./xiaomayi-cms-biz
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9043:9043
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 订单服务
xiaomayi-order-biz:
# 镜像名称
image: xiaomayi-order-biz
# 容器名称
container_name: xiaomayi-order-biz
# 构建镜像
build:
context: ./xiaomayi-order-biz
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9045:9045
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 产品服务
xiaomayi-product-biz:
# 镜像名称
image: xiaomayi-product-biz
# 容器名称
container_name: xiaomayi-product-biz
# 构建镜像
build:
context: ./xiaomayi-product-biz
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9046:9046
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 定时任务服务
xiaomayi-job:
# 镜像名称
image: xiaomayi-job
# 容器名称
container_name: xiaomayi-job
# 构建镜像
build:
context: ./xiaomayi-job
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9044:9044
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 代码工具服务
xiaomayi-generator:
# 镜像名称
image: xiaomayi-generator
# 容器名称
container_name: xiaomayi-generator
# 构建镜像
build:
context: ./xiaomayi-generator
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9041:9041
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 后台服务
xiaomayi-admin-biz:
# 镜像名称
image: xiaomayi-admin-biz
# 容器名称
container_name: xiaomayi-admin-biz
# 构建镜像
build:
context: ./xiaomayi-admin-biz
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9030:9030
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 网站服务
xiaomayi-web-biz:
# 镜像名称
image: xiaomayi-web-biz
# 容器名称
container_name: xiaomayi-web-biz
# 构建镜像
build:
context: ./xiaomayi-web-biz
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9031:9031
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
# 客户端服务
xiaomayi-uniapp-biz:
# 镜像名称
image: xiaomayi-uniapp-biz
# 容器名称
container_name: xiaomayi-uniapp-biz
# 构建镜像
build:
context: ./xiaomayi-uniapp-biz
dockerfile: Dockerfile
# 将容器运行在特权模式下,意味着容器内的进程将具
# 有访问宿主机的权限,包括文件系统、设备和系统功能等
privileged: true
# 指定容器中运行的用户
user: root
# 启动策略为始终重启
restart: always
# 设置网络模式为host模式
network_mode: host
# 端口映射
ports:
- 9032:9032
# 文件挂载
volumes:
- $PWD/logs:/opt/apps/logs
- $PWD/upload:/opt/apps/upload
# 日志配置
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "10"
构建并启动服务
在项目根目录下运行以下命令,使用 Docker Compose
构建镜像并启动服务:
docker-compose up -d
如果需要停止服务,可以运行以下命令:
docker-compose down
温馨提示
应用部署成功后,即可通过服务有效的地址验证服务是否正确部署并对外提供接口服务。
总结
通过 Docker Compose
,你可以轻松部署项目及其依赖服务。使用 Dockerfile
构建应用的镜像,并通过 docker-compose.yml
文件定义服务编排,实现一键部署和管理。这种方法非常适合开发、测试和生产环境。