docker部署spring boot,安装jdk17、maven3.8.8详细步骤
安装JDK和Maven
在Docker中部署Spring Boot项目需要先安装JDK和Maven。以下是详细步骤:
1.1 安装 JDK 和 Maven
# 安装 JDK 17(推荐版本)
sudo yum install -y java-17-openjdk-devel# 安装 Maven
sudo yum install -y maven
1.2 验证安装
java -version
# 预期输出:openjdk version "17.0.x"mvn -v
# 预期输出:Apache Maven 3.8.x
1.3 升级jdk到17、升级maven3.8.8
1.3.1 jdk
# 卸载 OpenJDK 8
sudo yum remove -y java-1.8.0-openjdk*# 卸载旧版 Maven
sudo yum remove -y maven# 添加 Red Hat 官方仓库(CentOS 7)
sudo yum install -y https://cdn.azul.com/zulu/bin/zulu-repo-1.0.0-1.noarch.rpm# 安装 Zulu JDK 17(Azure 认证版本)
sudo yum install -y zulu17-jdk# 验证安装
java -version
# 预期输出:openjdk version "17.0.12" 2024-07-16 LTS
1.3.2 maven
# 下载 Maven 3.8.8
wget https://archive.apache.org/dist/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz# 如果上述链接失效,可直接使用阿里云镜像
wget https://mirrors.cloud.tencent.com/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz# 确保目标目录存在
sudo mkdir -p /opt# 解压文件(注意文件名需与下载的包名一致)
sudo tar -xzf apache-maven-3.8.8-bin.tar.gz -C /opt/# 编辑环境变量文件
echo 'export MAVEN_HOME=/opt/apache-maven-3.8.8' | sudo tee -a /etc/profile
echo 'export PATH=$MAVEN_HOME/bin:$PATH' | sudo tee -a /etc/profile# 使配置生效
source /etc/profilemvn -v
# 预期输出:
# Apache Maven 3.8.8 (...)
# Maven home: /opt/apache-maven-3.8.8
构建 Spring Boot 项目
2.1 项目配置(pom.xml)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.8</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>wendaoplatform</artifactId><version>0.0.1-SNAPSHOT</version><name>wendaoplatform</name><description>wendaoplatform</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.4</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>3.0.4</version><scope>test</scope></dependency><dependency><groupId>de.mkammerer</groupId><artifactId>argon2-jvm</artifactId><version>2.11</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.11.2</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.11.2</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.12</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-jsqlparser</artifactId><version>3.5.12</version></dependency><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.17</version></dependency><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>3.5.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>3.4.8</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration></plugin><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></project>
2.2 打包项目
# 在项目根目录执行
mvn clean package
编写 Dockerfile
3.1 在项目根目录创建 Dockerfile
# 使用 Eclipse Temurin JDK 17 作为基础镜像
FROM eclipse-temurin:17-jre# 设置工作目录
WORKDIR /app# 将 JAR 文件复制到容器中
COPY wendaoplatform-0.0.1-SNAPSHOT.jar /app/app.jar# 暴露应用程序端口(根据您的应用需要修改)
EXPOSE 1122# 设置容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "app.jar"]
构建 Docker 镜像
# 在项目根目录执行
docker build -t spring-boot-app:latest .
运行 Docker 容器
# 如果之前创建了 wdzm_network,加入该网络
docker run -p 8080:8080 \--network wdzm_network \--name spring-boot-app \-v /root/spring-boot-app/logs:/app/logs \-e SPRING_PROFILES_ACTIVE=prod \-d spring-boot-app:latest
配置 Nginx 反向代理
server {listen 80;server_name 192.168.0.64;# 前端静态文件(已部署的 Vue 项目)root /usr/share/nginx/html/dist;index index.html;location / {try_files $uri $uri/ /index.html;}# 代理 Spring Boot APIlocation /api/ {proxy_pass http://spring-boot-app:8080/; # 使用容器名称proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
重新加载 Nginx
docker restart nginx
检查容器状态
docker ps | grep spring-boot-app
# 预期输出:0.0.0.0:8080->8080/tcp