?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
輸出成功!?