springboot项目,利用docker打包部署
Windows + WSL2 + Docker Desktop 部署 SpringBoot 项目指南
(没有安装docker的,如果是windows家庭中文版的,可以看我上一篇帖子:windows家庭版安装docker和redis-CSDN博客)
本教程将说明如何在 Windows 系统 下,使用 WSL2 + Docker Desktop 对 IDEA 开发的 SpringBoot 项目 进行 Docker 打包、镜像构建、容器运行 的全流程操作。
1. 环境准备
(1) 确保已安装以下工具
工具 | 安装方式 | 验证命令 |
---|---|---|
WSL2 | 微软官方文档 | wsl -l -v |
Docker Desktop | 官网下载 | docker --version |
JDK 17+ | Oracle JDK | java -version |
Maven | Apache Maven | mvn -v |
IntelliJ IDEA | JetBrains 官网 | - |
(2) 配置 Docker 使用 WSL2
-
打开 Docker Desktop → Settings → General → Use WSL 2 based engine(勾选)。
-
Resources → WSL Integration → 启用你的 WSL 发行版(如
Ubuntu-20.04
)。
2. 项目准备(IDEA 操作)
(1) 创建 SpringBoot 项目
1.File → New → Project → Spring Initializr
2.填入如下图信息。
填入项目名字:docker-demo ,选择java语言,Maven项目,填入group和artifact,JDK选择17,java17,jar包点击next下一步
3.选择Spring Web,点击创建。
然后我们在idea 中配置好maven路径和jdk信息后,开始编写一个简单的接口。
鼠标右键,New->Java Class,填入 controller.DockerController
在DockerController中编写如下代码,输出hello,docker!
@RestController
public class DockerController {@GetMapping("/hello")public String hello(){return "hello,docker!";}
}
在DockerDemoApplication中编写如下代码:
@SpringBootApplication
public class DockerDemoApplication {public static void main(String[] args) {SpringApplication.run(DockerDemoApplication.class, args);}}
本地运行测试:mvn spring-boot:run
,访问 http://localhost:8080/hello
确认正常。
3. 添加 Docker 支持
(1) 在项目中创建 Dockerfile
在 项目根目录 新建 Dockerfile
(无后缀),内容如下:
输入Dockerfile回车
# 第一阶段:构建阶段(Builder),用 Maven 下载依赖、打包应用
FROM maven:3.9.6 AS builder
WORKDIR /build# 覆盖容器内的 Maven settings.xml(配置镜像、仓库等)
COPY settings.xml /root/.m2/settings.xml# 复制 pom.xml 先下载依赖,利用 Docker 缓存加速后续构建
COPY pom.xml .
RUN mvn dependency:go-offline -Dmaven.repo.local=/root/.m2/repository# 复制项目源码,执行打包(假设是 Spring Boot,生成 jar)
COPY src ./src
RUN mvn package -Dmaven.repo.local=/root/.m2/repository -DskipTests# 第二阶段:运行阶段(Runner),基于 OpenJDK 构建轻量运行镜像
FROM openjdk:17-jdk-slim
WORKDIR /app# 从构建阶段拷贝打包好的 jar 到运行镜像
COPY --from=builder /build/target/docker-demo-0.0.1-SNAPSHOT.jar app.jar# 暴露端口(与 Spring Boot 配置的 server.port 一致)
EXPOSE 8080# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
📌 注意:your-project-name.jar
要替换成你的实际 JAR 包名(如 demo-0.0.1-SNAPSHOT.jar
)。通常是pom中的<artifactId>docker-demo</artifactId> <version>0.0.1-SNAPSHOT</version>这两个参数拼接起来。如果实在不行就打包一下,看看target目录下实际的jar名字。(打包方法:运行 mvn clean package,然后到项目的target目录看下生成的jar文件名字。或者点击idea右侧的maven,在lifecycle里面先点击clean,运行完后点击package)
4. 构建 Docker 镜像
(1) 在 WSL2 终端操作
-
打开 WSL2(比如 Ubuntu):
-
按
Win + R
,输入wsl
进入 WSL 终端。或者直接点击图标打开。
-
-
进入项目目录(假设项目在 Windows 的
D:\projects\demo
):cd /mnt/d/projects/demo
(WSL 通过 /mnt/
访问 Windows 文件系统。)
mvn clean package -DskipTests
打包的时候,我们遇到如下问题:
就是我们的项目是jdk17的,docker里面没有。我们拉一下17的版本:
docker pull openjdk:17
安装好后,再次打包还是报错:
这时执行 mvn -v 显示maven版本是3.6.3,不支持jdk17。
那么我们拉取下maven新版本:
docker pull maven:3.9.6
这时候在执行如下打包命令:
# 构建镜像(在 Dockerfile 目录执行)
docker build -t myapp:1.0 .
注意这里如果拉取依赖比较漫长的话,一定一定要配置下从阿里云下载依赖。
注意看上图中并不是从阿里云下载的,所以会很漫长。我们修改下:
在项目根目录创建settings.xml文件:
<settings><mirrors><mirror><id>aliyun</id><name>Aliyun Mirror</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>central</mirrorOf></mirror></mirrors>
</settings>
这样就会从阿里云下载,速度很快。
再次执行:
docker build -t myapp:1.0 .
如上可以看到成功了。
然后我们执行查看镜像命令:
docker images
如上图可以看到myapp这个镜像。
然后我们运行:
docker run -d -p 8080:8080 myapp:1.0
执行成功如下:
同时我们在docker desktop界面也可以看到这个运行实例:
然后我们访问下http://localhost:8080/hello
输出成功!