Skip to content

温馨提示

通过 Docker Compose 编排项目的 JAR 包,实现一键部署。使用 Dockerfile 构建应用的镜像,并通过文件定义服务依赖和网络配置。

准备工作

确保以下工具已安装:

打包项目

IntelliJ IDEA 工具中 配置Maven插件,使用 cleanpackage 命令编译和打包 Java 项目为 JAR 文件。

温馨提示

也可以执行命令 mvn clean package 编译打包项目,生成工程应用 JAR 包文件。

编译打包后会在每个服务工程的 target 目录下生成一个 JAR 文件。

包名称端口号包描述说明
xiaomayi-nacos8848Nacos注册中心
xiaomayi-seata7091Seata分布式事务
xiaomayi-monitor9000健康监控
xiaomayi-gateway9010网关服务
xiaomayi-auth9020认证服务
xiaomayi-system-biz9040系统服务
xiaomayi-user-biz9042用户服务预留扩展模块
xiaomayi-cms-biz9043CMS服务
xiaomayi-order-biz9045订单服务预留扩展模块
xiaomayi-product-biz9046产品服务预留扩展模块
xiaomayi-job9044定时任务调度服务
xiaomayi-generator9041代码工具服务
xiaomayi-admin-biz9030后台管理服务
xiaomayi-web-biz9031网站服务
xiaomayi-uniapp-biz9032客户端服务预留扩展模块

创建构建文件

以下是整个应用基于 Docker 容器化部署的配置文件、JAR包等结构;

js
xiaomayi-nacos-antdvue
├─ 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 镜像:

js
# 基础镜像
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 文件,定义应用及其依赖服务:

js
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 构建镜像并启动服务:

js
docker-compose up -d

如果需要停止服务,可以运行以下命令:

js
docker-compose down

温馨提示

应用部署成功后,即可通过服务有效的地址验证服务是否正确部署并对外提供接口服务。

总结

通过 Docker Compose,你可以轻松部署项目及其依赖服务。使用 Dockerfile 构建应用的镜像,并通过 docker-compose.yml 文件定义服务编排,实现一键部署和管理。这种方法非常适合开发、测试和生产环境。

小蚂蚁云团队 · 提供技术支持