当前位置: 首页 > news >正文

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
http://www.dtcms.com/a/353679.html

相关文章:

  • 【C++】菱形继承深度解析+实际内存分布
  • 【题解】Codeforces Round 1045 (Div. 2) Problem.B ~ Problem.E
  • KANO 模型:功能不是“加一分”,而是“分五类”
  • YOLO-yaml/pt模型文件的差异
  • GitFlow工作流
  • 铠德科技为您详解静电与温冲背后的隐形损失
  • 下一代防火墙
  • nestjs 导出excel
  • JoyAgent-JDGenie开源多智能体系统详解:架构、部署与企业级应用案例
  • day22 回溯算法part01
  • Day6--HOT100--238. 除自身以外数组的乘积,41. 缺失的第一个正数,73. 矩阵置零
  • 前端漏洞(下)- ClickJacking漏洞
  • 指针 (六):sizeof和strlen细节强化之“做题篇”
  • stl--std::map
  • Java 使用Jna 调用 C# dll文件踩到的坑
  • SpringBoot整合Redis:从入门到实战的完整指南
  • 【Linux 小实战】自定义 Shell 的编写
  • LCD 上显示字符
  • zookeeper-集群扩缩容
  • 稳敏双态融合架构--架构师的练就
  • banner这个文件是怎么请求到后端数据的
  • Rust:引用
  • Vue-24-利用Vue3的element-plus库实现树形结构数据展示
  • Autodesk Maya 2026.2 全新功能详解:MotionMaker AI 动画、LookdevX 材质增强、USD 工作流优化
  • 在MiniOB源码中学习使用Flex与Bison解析SQL语句-第二节
  • 【Linux】正则表达式学习记录
  • FFMPEG api使用
  • 从disable_cost到disabled_nodes,最小代价预估质的飞跃
  • nestjs日志(nest-winston)
  • pyecharts可视化图表-tree:从入门到精通