一、环境准备与项目打包
1.1 项目打包配置
在Spring Boot项目的pom.xml
中配置Maven打包插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
如果是多模块目录 ,一定要指定主模块,然后使用主模块的jar就可以了
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>10</source>
<target>10</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.gcxy.Main</mainClass>
<layout>JAR</layout>
<executable>true</executable>
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
打包步骤:
-
在项目根目录执行:
mvn clean package
-
打包完成后,在
target
目录下会生成项目名-版本号.jar
文件
重要提示:
-
将
application.yml
或application.properties
中的数据库连接URL从localhost
改为虚拟机IP地址 -
检查数据库用户名和密码是否正确
二、虚拟机环境配置
2.1 CentOS 7基础设置
# 切换到root用户
su -
# 更新系统
yum update -y
# 安装必要工具
yum install -y vim wget net-tools
2.2 Docker安装与配置
# 安装Docker
yum install -y docker
# 启动Docker服务
systemctl start docker
systemctl enable docker
# 验证安装
docker --version
三、MySQL容器部署
3.1 拉取MySQL镜像
docker pull mysql:5.7.31
3.2 运行MySQL容器
docker run -id \
--name=mysql57 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-v /data/mysql:/var/lib/mysql \
mysql:5.7.31 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
参数说明:
-
-p 3306:3306
:端口映射 -
-e MYSQL_ROOT_PASSWORD
:设置root密码 -
-v /data/mysql:/var/lib/mysql
:数据持久化
3.3 防火墙设置
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 或者开放特定端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
四、数据库初始化
-
使用Navicat或MySQL Workbench连接到虚拟机的MySQL
-
创建与Spring Boot项目对应的数据库
-
导入SQL脚本或手动创建表结构
五、Spring Boot应用部署
5.1 准备部署目录
mkdir -p /opt/springboot/app
cd /opt/springboot/app
使用Xftp等工具将打包好的jar文件上传到此目录
5.2 创建Dockerfile
vim Dockerfile
内容如下:
dockerfile
# 使用官方OpenJDK 17镜像作为基础镜像
FROM openjdk:17-jdk-slim
# 维护者信息
LABEL maintainer="dunkeng"
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 将jar包复制到容器中
COPY your-app.jar /app.jar
# 暴露端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java","-jar","/app.jar"]
5.3 构建Docker镜像
docker build -t springboot-app .
5.4 运行容器
docker run -d \
--name=myapp \
-p 8080:8080 \
--restart=always \
springboot-app
参数说明:
-
-d
:后台运行 -
--restart=always
:容器意外退出时自动重启 -
-p 8080:8080
:端口映射
六、验证部署
-
检查容器运行状态:
docker ps
-
查看应用日志:
docker logs -f myapp
-
在宿主机浏览器访问:
http://虚拟机IP:8080/your-endpoint
七、常见问题解决
7.1 容器启动失败
# 查看容器日志
docker logs 容器ID
# 进入容器调试
docker exec -it 容器ID /bin/bash
7.2 数据库连接问题
-
确保MySQL容器正常运行
-
检查Spring Boot配置中的数据库IP、端口、用户名和密码
-
验证网络连通性:
telnet 虚拟机IP 3306
7.3 端口冲突
# 查看端口占用
netstat -tunlp | grep 端口号
# 修改Spring Boot应用端口
# 在application.properties中添加:
server.port=新端口号
八、优化建议
-
使用Docker Compose:简化多容器管理
version: '3' services: mysql: image: mysql:5.7.31 environment: MYSQL_ROOT_PASSWORD: root ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql app: build: . ports: - "8080:8080" depends_on: - mysql volumes: mysql_data:
-
配置健康检查:在Dockerfile中添加:
dockerfile
HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost:8080/actuator/health || exit 1
-
使用JVM参数优化:
dockerfile
ENTRYPOINT ["java","-Xms512m","-Xmx1024m","-jar","/app.jar"]
九、总结
本文详细介绍了从Spring Boot项目打包到在CentOS虚拟机中使用Docker部署的完整流程,包括:
-
项目打包与配置调整
-
CentOS环境准备
-
MySQL容器化部署
-
Spring Boot应用容器化
-
部署验证与问题排查
通过容器化部署,可以实现:
-
环境隔离,避免"在我机器上能运行"的问题
-
快速部署和扩展
-
一致的运行环境