构建Docker镜像:dromara/mybatis-jpa-extra应用容器化部署指南

构建Docker镜像:dromara/mybatis-jpa-extra应用容器化部署指南

【免费下载链接】mybatis-jpa-extra 简化MyBatis CUID操作,增强SELECT分页查询 【免费下载链接】mybatis-jpa-extra 项目地址: https://gitcode.com/dromara/mybatis-jpa-extra

dromara/mybatis-jpa-extra是一个简化MyBatis CUID操作、增强SELECT分页查询的开源项目。本指南将详细介绍如何将该应用容器化,通过Docker实现便捷部署和运行。

项目概述

dromara/mybatis-jpa-extra项目旨在简化MyBatis的使用,提供了JPA风格的注解支持、增强的查询功能以及便捷的数据操作方法。项目结构清晰,主要包含以下模块:

  • mybatis-jpa-extra:核心功能模块,提供JPA注解支持、查询构造器、分页等功能
  • mybatis-jpa-extra-spring-boot-starter:Spring Boot自动配置模块
  • mybatis-jpa-extra-test:测试模块,包含DAO、Service和实体类示例
  • mybatis-jpa-extra-spring-boot-starter-test:Spring Boot集成测试模块

项目logo

环境准备

在开始容器化之前,请确保已安装以下工具:

  • Docker Engine (20.10.x或更高版本)
  • Docker Compose (可选,用于多容器部署)
  • Git
  • JDK 17 (用于本地构建)
  • Maven 3.6+ (用于本地构建)

项目使用Java 17和Spring Boot 3.4.2构建,详细依赖信息可查看pom.xml文件。

容器化方案设计

部署架构

采用多阶段构建策略,将应用构建和运行环境分离,最终生成轻量级镜像。部署架构如下:

mermaid

基础镜像选择

根据项目使用的JDK版本,选择合适的基础镜像:

  • 构建阶段:maven:3.8.5-openjdk-17-slim
  • 运行阶段:eclipse-temurin:17-jre-alpine

Alpine版本的JRE镜像体积更小,适合生产环境使用。

Dockerfile编写

在项目根目录创建Dockerfile,实现多阶段构建:

# 构建阶段
FROM maven:3.8.5-openjdk-17-slim AS build
WORKDIR /app
COPY pom.xml .
# 缓存Maven依赖
RUN mvn dependency:go-offline -B
COPY . .
# 执行构建
RUN mvn package -DskipTests

# 运行阶段
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
# 复制构建产物
COPY --from=build /app/mybatis-jpa-extra-spring-boot-starter-test/target/*.jar app.jar
# 暴露应用端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]

关键构建步骤说明

  1. 多阶段构建:使用Maven镜像构建项目,然后将产物复制到轻量级JRE镜像中,减小最终镜像体积
  2. 依赖缓存:单独处理pom.xml,利用Docker层缓存机制加速后续构建
  3. 测试跳过:构建时使用-DskipTests参数跳过测试,加快构建速度
  4. Alpine镜像:运行阶段使用Alpine基础镜像,减小镜像体积

构建脚本编写

为简化构建过程,创建build-docker.sh脚本:

#!/bin/bash
# 构建Docker镜像
docker build -t dromara/mybatis-jpa-extra:latest .

# 可选:标记版本号,版本号从pom.xml中提取
VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
docker tag dromara/mybatis-jpa-extra:latest dromara/mybatis-jpa-extra:${VERSION}

echo "构建完成:"
echo "dromara/mybatis-jpa-extra:latest"
echo "dromara/mybatis-jpa-extra:${VERSION}"

给脚本添加执行权限:

chmod +x build-docker.sh

配置文件处理

为使容器化应用更灵活,需要外部化配置。创建docker-compose.yml文件:

version: '3.8'
services:
  mybatis-jpa-extra:
    build: .
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/test?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=password
      - SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver
    depends_on:
      - mysql
    volumes:
      - ./config:/app/config

  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=test
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

配置说明

  1. 环境变量:通过environment配置数据库连接信息,避免硬编码
  2. 配置文件挂载:通过volumes挂载外部配置目录,方便配置修改
  3. 依赖服务:使用Docker Compose管理MySQL依赖,实现一键部署

应用打包与优化

Maven打包配置

项目使用Maven构建,查看pom.xml中的构建配置,确保打包正确:

<build>
    <plugins>
        <!-- Maven Surefire插件,用于单元测试 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.4.2</version>
        </plugin>
        
        <!-- 源码打包插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
                <execution>
                    <id>ossrh</id>
                    <phase>package</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

应用入口类

Spring Boot应用入口类位于mybatis-jpa-extra-spring-boot-starter-test/src/test/java/org/dromara/mybatis/jpa/test/MybatisJpaApplication.java,确保正确配置了@SpringBootApplication@MapperScan注解:

@SpringBootApplication
@MapperScan("org.dromara.mybatis.jpa.test.dao.persistence")
public class MybatisJpaApplication implements ApplicationRunner {
    // 应用代码...
}

镜像构建与测试

执行构建

运行构建脚本:

./build-docker.sh

本地测试运行

使用Docker Compose启动应用:

docker-compose up -d

查看应用日志:

docker-compose logs -f mybatis-jpa-extra

测试应用是否正常运行:

curl http://localhost:8080/actuator/health

镜像优化策略

减小镜像体积

  1. 多阶段构建:已在Dockerfile中实现,分离构建和运行环境
  2. 基础镜像选择:运行阶段使用alpine版本JRE
  3. 清理无用文件:构建过程中删除不必要的文件和依赖

优化Dockerfile

# 优化后的运行阶段
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
# 添加非root用户
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
# 复制构建产物
COPY --from=build /app/mybatis-jpa-extra-spring-boot-starter-test/target/*.jar app.jar
# 暴露应用端口
EXPOSE 8080
# JVM参数优化
ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=75.0", "-jar", "app.jar"]

优化说明:

  • 添加非root用户,提高容器安全性
  • 配置JVM参数,适应容器环境内存限制

部署策略

单机部署

使用Docker Compose一键部署:

docker-compose up -d

多环境部署

通过环境变量区分不同环境配置:

# 开发环境
SPRING_PROFILES_ACTIVE=dev docker-compose up -d

# 测试环境
SPRING_PROFILES_ACTIVE=test docker-compose up -d

# 生产环境
SPRING_PROFILES_ACTIVE=prod docker-compose up -d

容器编排平台部署

对于Kubernetes等容器编排平台,可创建对应的Deployment和Service配置:

# deployment.yaml示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mybatis-jpa-extra
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mybatis-jpa-extra
  template:
    metadata:
      labels:
        app: mybatis-jpa-extra
    spec:
      containers:
      - name: mybatis-jpa-extra
        image: dromara/mybatis-jpa-extra:latest
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: "prod"
        - name: SPRING_DATASOURCE_URL
          valueFrom:
            secretKeyRef:
              name: db-secret
              key: url

常见问题解决

构建失败

  1. 依赖下载问题:检查网络连接,或配置Maven镜像源
  2. JDK版本不匹配:确保使用JDK 17,与项目配置一致

运行时问题

  1. 数据库连接失败:检查数据库地址、用户名和密码配置
  2. 端口冲突:修改Docker映射端口,避免与主机其他服务冲突

性能问题

  1. JVM内存配置:根据容器资源限制,调整JVM参数
  2. 数据库连接池:优化数据库连接池配置,参考application.properties

总结

通过本文档,我们学习了如何将dromara/mybatis-jpa-extra应用容器化,包括Dockerfile编写、多阶段构建、镜像优化和部署策略。容器化部署可以有效解决环境一致性问题,简化部署流程,提高应用可移植性。

项目的更多使用方法可参考README.md文件,包含了详细的API使用示例和配置说明。

附录:常用Docker命令

命令说明
docker build -t <name>:<tag> .构建镜像
docker run -p 8080:8080 <name>:<tag>运行容器
docker ps查看运行中的容器
docker logs -f <container-id>查看容器日志
docker-compose up -d启动服务栈
docker-compose down停止服务栈
docker images列出本地镜像
docker rmi <image-id>删除镜像

【免费下载链接】mybatis-jpa-extra 简化MyBatis CUID操作,增强SELECT分页查询 【免费下载链接】mybatis-jpa-extra 项目地址: https://gitcode.com/dromara/mybatis-jpa-extra

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值