工程目錄
dockerfile檔案
建立dockerfile文件,後面會用到。
檔案部署
在伺服器新建/data/docker/hellolearn資料夾(檔案路徑可自訂),將maven打包好的jar包和上文中建立的dockerfile檔案複製到伺服器新建的資料夾(/data/docker/hellolearn)。
產生映像
docker build -t hellolearn .
docker build -t 映像名稱:標籤dockerfile的相對位置,點號代表目前目錄,不寫tag預設是latest。
啟動容器
docker run -d -p 8301:8301 --name hellolearn hellolearn
docker start hellolearn
-d參數是讓容器後台運作;--name為指定容器的名稱;-p 是做連接埠映射,此時將伺服器中的8301(冒號前的連接埠)連接埠映射到容器中的8301(冒號後的連接埠)連接埠(application.properties配置的是8301)
存取web
jar套件映射部署部署
依照上文的步驟已足可以輕鬆應付docker部署springboot的全流程。但這樣在啟動容器後,每次需更新jar包時,都得重新製作鏡像,再重新製作容器。製程及其繁瑣,效率極低。那如何在不更新鏡像或容器的前提下直接更新jar包完成部署呢?
5.1 更新dockerfile
最後一行 entrypoint ["java","-jar","/data/learn-web-0.0.1-snapshot.jar"]
會執行容器裡/data目錄下的learn-web-0.0.1-snapshot.jar檔。
5.2 使用docker build指令建立映像
docker build -t hellolearn .
5.3 建立&啟動容器
#docker run --name hellolearn -it -v /data/docker/newhellolearn/package:/data -d -p 8301:8301 hellolearn
#-v 宿主機目錄關聯容器目錄。這樣宿主機的/data/docker/newhellolearn/package目錄就與docker的/data目錄進行對應。
這樣的話,當jar包發生變動時,直接更新宿主機的/data/docker/newhellolearn/package目錄下的jar包即可,更新jar包之後需要將容器重新啟動。
腳本部署
透過jar包部署方式造成一個問題,若jar包名字發生變化,例如版本號變化(learn-web-0.0.1-snapshot.jar--> >learn-web-1.0.1-snapshot.jar)。需要怎麼處理呢?以下就介紹第三種透過腳本部署的方式。
6.1 建立hellolearn.sh檔案
java -jar /data/learn-web-0.0.1-snapshot.jar
將hellolearn. sh上傳到/data/docker/hellolearn/scriptdeploy/package,這個資料夾路徑可以自訂,記住這個資料夾路徑,後面還會用到。
6.2 新增腳本執行權限
chmod x hellolearn.sh
6.3 建立dockerfile
cmd ["sh ","-c","/data/hellolearn.sh"]
表示在容器啟動時啟動6.1中建立的hellolearn.sh腳本。
注意最後一條指令上文中都是entrypoint,在腳本部署中改成了cmd,至於entrypoint和cmd的具體區別感興趣的可以了解一下。
6.4 上傳jar套件
將jar套件放入hellolearn.sh的同一個資料夾目錄,即/data/docker/hellolearn/scriptdeploy/package,建立容器時再將該目錄(宿主機目錄)與容器的/data目錄進行對應。 。
6.5 檔案目錄結構圖
這裡的目錄結構不知道大家暈不暈,上傳一張我這宿主機的目錄結構圖,一目了然。
6.6 建立映像
docker build -t hellolearn-script .
末尾的點號代表目前目錄,所以產生映像的指令需要在dockerfile所在的目錄執行。
6.7 建立&啟動容器
docker run --name hellolearn-script -it -v /data/docker/hellolearn/scriptdeploy/package:/data -d -p 8302 :8301 hellolearn-script
docker start hellolearn-script
##
將宿主機的/data/docker/hellolearn/scriptdeploy/package目錄與容器的/data目錄對映關聯。這樣的話,當jar包發生變動時,直接更新宿主機目錄下的jar包即可。即使jar包名字發生變化,也需要再更新hellolearn.sh腳本。更新之後重啟容器。
6.8 web測試效果
查看docker日誌
docker logs [options] container id
options說明:
-f : 追蹤日誌輸出
--since :顯示某個開始時間的所有日誌
-t : 顯示時間戳
-- tail :僅列出最新n條容器日誌
7.1 檢視指定時間後的日誌,只顯示最後100行:
##docker logs -f -t -- since="2020-10-01" --tail=100 container id7.2 查個指定時間區段的日誌##docker logs -t --since ="2020-10-01t19:00:00" --until "2020-10-01t19:00:00" container id
#7.3 檢視指定時間後面的日誌:
#docker logs -t --since="2020-10-01t19:00:00" container id
7.4 查看最近5分鐘的日誌:#docker logs --since 5m container id
7.5 透過exec 指令對指定的容器執行bash:docker exec hellolearn -it /bin/bash
#或 docker exec -it hellolearn bash
7.6 查看docker ip
遇到的問題
問題描述:error response from daemon: driver failed programming external connectivity on endpoint flamboyant_leavitt (iptables failed: iptables --wait -t nat -a docker -p tcp -d 0/0 --dport 8301 -j dnat --to-destination 172.17.0.2:8301 ! -i docker0: iptables: no chain/target/match by that name.
解決方案:重啟docker。
systemctl restart docker以上是docker怎麼部署SpringBoot及替換jar包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。

Java'splatformindependencefacilitatescodereusebyallowingbytecodetorunonanyplatformwithaJVM.1)Developerscanwritecodeonceforconsistentbehavioracrossplatforms.2)Maintenanceisreducedascodedoesn'tneedrewriting.3)Librariesandframeworkscanbesharedacrossproj

要解決Java應用程序中的平台特定問題,可以採取以下步驟:1.使用Java的System類查看系統屬性以了解運行環境。 2.利用File類或java.nio.file包處理文件路徑。 3.根據操作系統條件加載本地庫。 4.使用VisualVM或JProfiler優化跨平台性能。 5.通過Docker容器化確保測試環境與生產環境一致。 6.利用GitHubActions在多個平台上進行自動化測試。這些方法有助於有效地解決Java應用程序中的平台特定問題。

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。