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 JDKjava -version
MavenApache Mavenmvn -v
IntelliJ IDEAJetBrains 官網-

(2) 配置 Docker 使用 WSL2

  1. 打開 Docker Desktop?→?Settings?→?General?→?Use WSL 2 based engine(勾選)。

  2. 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 終端操作

  1. 打開 WSL2(比如 Ubuntu):

    • 按?Win + R,輸入?wsl?進入 WSL 終端。或者直接點擊圖標打開。

  2. 進入項目目錄(假設項目在 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

輸出成功!?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909812.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MO+內核32位普冉單片機PY32F003開發板

PY32F003開發板是基于普冉半導體PY32F003微控制器設計的低成本入門級開發工具&#xff0c; PY32F003系列微控制器采用高性能的 32 位ARM Cortex-M0內核&#xff0c;寬電壓工作范圍的 MCU。嵌入高達32Kbytes flash 和 4Kbytes SRAM 存儲器&#xff0c;最高工作頻率 32MHz。PY32…

MySql 用存儲過程刪除所有用戶表

用拼接語句總是會出問題 -- 1. 禁用外鍵約束&#xff08;防止級聯刪除失敗&#xff09;[1]() SET SESSION FOREIGN_KEY_CHECKS 0; -- 2. 生成并執行刪除語句&#xff08;替換 your_database_name&#xff09; SELECT CONCAT(DROP TABLE IF EXISTS , TABLE_NAME, ;) -- 預覽語…

Java八股文——MySQL「鎖篇」

講一下MySQL里有哪些鎖&#xff1f; 面試官您好&#xff0c;MySQL中的鎖機制非常豐富&#xff0c;它是保證數據一致性和并發安全的核心。我通常會從鎖的粒度&#xff08;加鎖范圍&#xff09; 和鎖的模式&#xff08;功能&#xff09; 這兩個維度來理解它們。 第一維度&#…

B站精品課程

【Python并發編程】線程&#xff0c;進程&#xff0c;協程&#xff0c;線程安全&#xff0c;多線程&#xff0c;死鎖&#xff0c;線程池等與案例解析&#xff0c;從入門到精通 https://www.bilibili.com/video/BV1EfdcYmEff/?spm_id_from333.337.search-card.all.click&v…

# ubuntu中安裝使用五筆輸入法

先 清理舊輸入法并重新安裝 fcitx5 五筆輸入法&#x1f447; &#x1f4e6; 第一步&#xff1a;清理舊的 Fcitx5 及相關輸入法組件 sudo apt purge fcitx* mozc* ibus* -y sudo apt autoremove --purge -y&#x1f4dd; 說明&#xff1a; fcitx* 會清除舊版本 Fcitx/Fcitx5。…

LSM樹與B+樹優缺點分析

1. LSM樹優化了順序寫&#xff0c;因此寫性能很好&#xff0c;但在查詢上&#xff1a; 需要從Level 0到Level n一直順序查下去。極端情況是LSM樹中不存在該數據&#xff0c;則需要遍歷L0->Ln&#xff0c;最后返回空集。 解決方法是用布隆過濾器優化查詢。 2. B樹范圍查詢性…

【成都魚住未來身份證】 身份證讀取與解析———未來之窗行業應用跨平臺架構——智能編程——仙盟創夢IDE

讀取身份證開發配置 function readerid魚住未來科技(){const webUrl http:// "127.0.0.1:30004" /api/info$.ajax({url: webUrl,type: GET,dataType: json,success: function (result) {// processContent.text(web api接口&#xff1a; webUrl 讀取身份證信息…

開啟并連接redis以及端口占用問題

開啟命令行 redis-server.exe redis.windows.conf 端口占用問題 查看端口&#xff1a; 輸入命令行&#xff1a; netstat -ano | findstr :6379 找到并停止pid號&#xff1a; 這個要用到cmd管理員身份打開 taskkill /f /pid 你的端口號 重新開啟就行了 再用另一個cmd進行連…

MCP數據可視化服務器配置依賴

# requirements.txt # MCP數據可視化服務器依賴包# 核心MCP包 mcp>=0.1.0# 數據處理 pandas>=2.0.0 numpy>=1.24.0# 可視化 matplotlib>=3.7.0 seaborn>=0.12.0# 異步支持 asyncio-mqtt>=0.13.0# JSON處理 jsonschema>=4.17.0# 圖像處理 Pillow>=9.5.0…

量化面試綠皮書:14. 鐘表零件

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 14. 鐘表零件 一個時鐘(順時針編號為 1-12)從墻上掉了下來&#xff0c;摔成三塊你發現每塊上的數字之和是相等的。 Q: 每塊上的數字是多少&…

AndroidR平臺ToastPresenter引出BinderProxy泄漏

一、問題描述 針對SA8155車機系統Qnx+Android,自動化測試模擬發送CAN信號測試,壓測報出多例BinderProxy leak引起system_server重啟 問題1 [CRASH] system_server osVersion: V1.2.***,提交時間:2025-06-05 ***,復現了2次java.lang.AssertionError: Binder ProxyMap has…

windows11中切換到其他桌面再切回當前桌面,任務欄的WPS有好幾個窗口

感謝知乎的網友 原文鏈接 新建一個后綴為 .reg 的文本文件&#xff0c;將以下內容粘貼進去&#xff0c;保存&#xff0c;然后雙擊運行 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\kingsoft\Office\6.0\wpsoffice\Application Settings]"enable_m…

從匯編的角度揭開C++ this指針的神秘面紗(下)

<接上篇> 我們接著來看一段C的代碼&#xff1a; class A { public:int func(int j){return j _i;} private:int _i; };int main() {A a;a.func(3);return 0; } 這里定義了一個類A&#xff0c;在main函數中定義了A類的對像a。同時用a調用了成員函數func。我們來看一…

Kafka代碼模板

Kafka 服務器&#xff08;Broker&#xff09; 的配置 server.properties # broker.id: 每個 Kafka Broker 的唯一標識符。broker.id 必須在整個 Kafka 集群中唯一。 broker.id0# 配置 Kafka Broker 監聽客戶端請求的地址和端口。這個配置決定了 Kafka 服務將接受來自生產者、…

最大子數組和C++

給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 子數組是數組中的一個連續部分。 示例 1&#xff1a; 輸入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 輸出&#xff1a;…

centos 7單機安裝ceph并創建rbd塊設備

1. 安裝依賴包 新增阿里云源ceph下載地址 vim /etc/yum.repos.d/ceph.repo [ceph] nameceph baseurlhttp://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ gpgcheck0 [ceph-noarch] namecephnoarch baseurlhttp://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/ gpgcheck…

Jenkins搭建、權限管理、參數化、流水線等詳細教程!

部署Jenkins 一、jenkins 安裝 官網&#xff1a; https://jenkins.io yum 安裝 jenkins *jenkins 依賴 java 環境 #注意2.346之后的版本不再支持jdk8 卸載舊jenkins #查詢以前是否安裝jenkins rpm -qa |grep jenkins #卸載 jenkins yum -y remove jenkins rpm -e jenkins…

百度飛槳(PaddlePaddle)案例分享:基于 PaddleOCR 的圖像文字提取系統

一、案例背景 在實際教學、辦公及政務系統中&#xff0c;紙質材料&#xff08;如手寫作文、表格、試卷等&#xff09;仍廣泛存在。為提升信息處理效率&#xff0c;采用 OCR&#xff08;Optical Character Recognition&#xff09;技術將圖像中的文字提取為可編輯文本已成為剛需…

python操控鼠標

在已知屏幕坐標的情況下&#xff0c;可以通過 Python 的 pyautogui 或 pynput 等庫實現網頁上的鼠標點擊操作。以下是具體步驟和代碼示例&#xff1a; 1. 使用 PyAutoGUI&#xff08;推薦&#xff09; pyautogui 是一個簡單易用的庫&#xff0c;可以直接通過屏幕坐標控制鼠標點…

UV 與 Bun 深度解析

UV 與 Bun 深度解析&#xff1a;現代開發工具的安裝與使用指南 什么是 UV&#xff1f; UV&#xff08;Ultra-Velocity&#xff09;是由 Astral 公司&#xff08;Ruff 的創建者&#xff09;開發的超高速 Python 包管理工具&#xff1a; 用 Rust 編寫&#xff0c;速度極快&…