基于SpringBoot項(xiàng)目實(shí)現(xiàn)Docker容器化部署的主要步驟
將Spring Boot項(xiàng)目部署到Docker容器中的涉及幾個(gè)主要步驟:
準(zhǔn)備Docker鏡像
- 首先,需要選擇一個(gè)基礎(chǔ)鏡像,通常是包含Java運(yùn)行時(shí)環(huán)境的鏡像,例如OpenJDK??梢詮腄ocker Hub或其他鏡像倉(cāng)庫(kù)中獲取這些鏡像。
- 接下來(lái),需要在基礎(chǔ)鏡像上構(gòu)建一個(gè)包含Spring Boot應(yīng)用程序的鏡像。這包括將應(yīng)用程序的JAR文件、依賴(lài)項(xiàng)和配置文件添加到鏡像中。
編寫(xiě)Dockerfile
- Dockerfile是一個(gè)文本文件,其中包含了構(gòu)建Docker鏡像的指令。需要編寫(xiě)一個(gè)Dockerfile來(lái)指定如何構(gòu)建包含Spring Boot應(yīng)用程序的鏡像。
- 在Dockerfile中,可以使用COPY指令將本地文件(包括Spring Boot應(yīng)用程序的JAR文件和配置文件)復(fù)制到鏡像中。
- 使用RUN指令可以在容器內(nèi)運(yùn)行命令,例如安裝依賴(lài)項(xiàng)或執(zhí)行應(yīng)用程序的構(gòu)建。
- 使用CMD或ENTRYPOINT指令指定在容器啟動(dòng)時(shí)要運(yùn)行的命令,通常是啟動(dòng)Spring Boot應(yīng)用程序的命令。
構(gòu)建Docker鏡像
- 使用docker build命令根據(jù)Dockerfile構(gòu)建Docker鏡像。例如:docker build -t my-spring-boot-app .,其中-t選項(xiàng)用于指定鏡像的名稱(chēng)和標(biāo)簽。
運(yùn)行Docker容器
- 使用docker run命令運(yùn)行你的Docker鏡像。例如:docker run -p 8080:8080 my-spring-boot-app,其中-p選項(xiàng)用于將主機(jī)的端口映射到容器的端口,以便外部可以訪(fǎng)問(wèn)應(yīng)用程序。
- 還可以使用其他選項(xiàng)來(lái)配置容器,例如掛載卷、設(shè)置環(huán)境變量等。
訪(fǎng)問(wèn)應(yīng)用程序
- 一旦容器運(yùn)行,可以通過(guò)訪(fǎng)問(wèn)主機(jī)的端口(在上述示例中是8080)來(lái)訪(fǎng)問(wèn)運(yùn)行在Docker容器中的Spring Boot應(yīng)用程序。
Docker容器化部署Spring Boot項(xiàng)目的原理涉及將應(yīng)用程序及其依賴(lài)項(xiàng)打包到一個(gè)Docker鏡像中,然后在容器內(nèi)運(yùn)行該鏡像。這使得應(yīng)用程序在不同環(huán)境中更加可移植和隔離,同時(shí)也方便了部署和擴(kuò)展。使用Docker可以大大簡(jiǎn)化應(yīng)用程序的部署流程,并提供了更好的資源管理和隔離,以及更高的可伸縮性。
閑言少敘,上科技!?。?/h2>
方式一:直接構(gòu)建jar包運(yùn)行的鏡像
- 將打包好程序,上傳到服務(wù)器的指定目錄
- 例如:/home/www/spring-boot-image/spring-boot-docker-1.0.jar
- 在該目錄下創(chuàng)建Dockerfile文件
FROM openjdk:8u312 MAINTAINER zhangt ADD spring-boot-docker-1.0.jar zhangt.jar EXPOSE 8520 ENTRYPOINT ["java","-jar","zhangt.jar"]
Dockerfile的內(nèi)容解釋?zhuān)?br />
FROM openjdk:8u312
這一行指定了基礎(chǔ)鏡像,從openjdk:8u312鏡像構(gòu)建。它使用了OpenJDK 8的版本號(hào)為312的鏡像作為基礎(chǔ)。這是一個(gè)包含Java運(yùn)行時(shí)環(huán)境的基礎(chǔ)鏡像。MAINTAINER zhangt
這一行設(shè)置了維護(hù)者信息,盡管在較新版本的Docker中,MAINTAINER已不再建議使用,而可以使用LABEL來(lái)添加類(lèi)似的元數(shù)據(jù)信息。ADD spring-boot-docker-1.0.jar zhangt.jar
這一行使用ADD指令將本地的spring-boot-docker-1.0.jar文件復(fù)制到鏡像中,并重命名為zhangt.jar。這個(gè)JAR文件包含了Spring Boot應(yīng)用程序的可執(zhí)行代碼。EXPOSE 8520
這一行使用EXPOSE指令聲明容器將監(jiān)聽(tīng)的端口號(hào),這里指定為8520。請(qǐng)注意,這只是一個(gè)元數(shù)據(jù)聲明,它不會(huì)自動(dòng)將端口映射到主機(jī)上。ENTRYPOINT ["java","-jar","zhangt.jar"]
這一行設(shè)置了容器啟動(dòng)時(shí)要執(zhí)行的命令。在這種情況下,容器將以java -jar zhangt.jar命令啟動(dòng),這會(huì)運(yùn)行Spring Boot應(yīng)用程序。java命令會(huì)啟動(dòng)Java虛擬機(jī)(JVM),并執(zhí)行zhangt.jar中的可執(zhí)行代碼。
這Dockerfile的作用是基于OpenJDK 8u312鏡像構(gòu)建一個(gè)包含Spring Boot應(yīng)用程序的Docker鏡像。一旦構(gòu)建完成,可以使用這個(gè)鏡像來(lái)運(yùn)行Spring Boot應(yīng)用程序的容器,容器將監(jiān)聽(tīng)8520端口,可以通過(guò)適當(dāng)?shù)亩丝谟成鋪?lái)讓外部訪(fǎng)問(wèn)應(yīng)用程序。
創(chuàng)建好Dockerfile文件之后,執(zhí)行命構(gòu)建鏡像
docker build -t zhangt .
注意最后的 . 表示Dockerfile在當(dāng)前文件目錄下。zhangt表示構(gòu)建的鏡像,構(gòu)建成功后可以使用**docker images**命令查看鏡像。-t 選項(xiàng)用于指定鏡像的名稱(chēng)和標(biāo)簽,你可以將 zhangt 替換為你想要的名稱(chēng)和標(biāo)簽。
鏡像構(gòu)建成功之后,就可以運(yùn)行容器
docker run -d --restart=always --name zhangt -p 8520:8520 zhangt
各個(gè)參數(shù)的含義:
docker run: 用于啟動(dòng) Docker 容器的命令。-d: 這是一個(gè)選項(xiàng),表示在后臺(tái)(守護(hù)進(jìn)程模式)運(yùn)行容器。容器將在后臺(tái)運(yùn)行,不會(huì)占據(jù)終端。--restart=always: 這是另一個(gè)選項(xiàng),表示容器在退出時(shí)總是重新啟動(dòng)。即使容器因?yàn)殄e(cuò)誤或其他原因而停止,Docker 也會(huì)嘗試自動(dòng)重新啟動(dòng)容器。--name zhangt: 這是用于給容器指定一個(gè)名稱(chēng)的選項(xiàng)。容器的名稱(chēng)被設(shè)置為 “zhangt”。-p 8520:8520: 這是用于將主機(jī)端口與容器端口進(jìn)行映射的選項(xiàng)。這個(gè)選項(xiàng)將主機(jī)的 8520 端口映射到容器的 8520 端口。這樣,外部可以通過(guò)訪(fǎng)問(wèn)主機(jī)的 8520 端口來(lái)訪(fǎng)問(wèn)容器內(nèi)運(yùn)行的應(yīng)用程序。zhangt: 這是容器的名稱(chēng)或鏡像名稱(chēng),表示要運(yùn)行的容器是基于名為 “zhangt” 的 Docker 鏡像創(chuàng)建的。如果 “zhangt” 是一個(gè)鏡像名稱(chēng),Docker 將查找該鏡像并在容器中運(yùn)行它。
這個(gè)命令的目的是在后臺(tái)運(yùn)行一個(gè) Docker 容器,該容器使用 “zhangt” 鏡像創(chuàng)建,并將主機(jī)的 8520 端口映射到容器的 8520 端口。容器的名稱(chēng)設(shè)置為 “zhangt-p”,并且如果容器在任何情況下退出,Docker 會(huì)自動(dòng)重新啟動(dòng)它。這通常用于部署應(yīng)用程序,以確保應(yīng)用程序在意外情況下能夠自動(dòng)恢復(fù)。
啟動(dòng)容器后可以使用 **docker ps**命令查看啟動(dòng)的容器docker logs -f --tail 1000 容器id,可以查看服務(wù)的日志。
如果想更新jar包,只需要使用docker cp spring-boot-docker-1.0.jar 容器ID:/zhangt.jar,就可以將spring-boot-docker-1.0.jar拷貝進(jìn)容器并重命名,然后docker restart 容器ID重啟容器。
方式二:基于jdk鏡像運(yùn)行容器 在服務(wù)器中來(lái)取jdk鏡像
docker pull openjdk:8u181
創(chuàng)建目錄,并將jar包上傳到該目錄
cd /home/ mkdir www/spring-boot-docker
在Jar放置的同級(jí)目錄,編寫(xiě)shell腳本命名為:start.sh
#!/bin/bash echo -e "\n################ build service start #########################" # delete docker container echo -e "\n1, delete docker container [developer-platform-basic-dev] start ......" sudo docker rm -f spring-boot-docker-1.0 # docker run # docker run developer-platform-basic-1.0.0 echo -e "\n2, docker run build container [spring-boot-docker-1.0] start ......" sudo docker run --name spring-boot-docker-1.0 -d -p 8741:8741 \ -v /home/www/spring-boot-docker:/jar openjdk:8u181 \ java -jar /jar/spring-boot-docker-1.0.jar --spring.profiles.active=dev echo -e "\n3, docker ps container [spring-boot-docker-1.0] start ...." sudo docker ps -a | grep spring-boot-docker-1.0 echo -e "\n4, docker logs container [spring-boot-docker-1.0] start ...." sudo docker logs -f -t spring-boot-docker-1.0 > ./logs/log_$(date +%Y%m%d).out 2>&1 & echo -e "\n################ build service end #########################"
核心腳本解釋?zhuān)?br />1.
sudo docker run這是用于在Docker中運(yùn)行容器的命令。通常需要使用sudo權(quán)限來(lái)執(zhí)行Docker命令,以確保具有足夠的權(quán)限來(lái)管理容器。
2.--name spring-boot-docker-1.0: 這是為Docker容器指定的名稱(chēng),容器的名稱(chēng)被設(shè)置為"spring-boot-docker-1.0"。
3.-d: 這是一個(gè)選項(xiàng),表示在后臺(tái)運(yùn)行容器(即以守護(hù)進(jìn)程模式運(yùn)行),而不是在前臺(tái)交互模式下運(yùn)行。
4.-p 8741:8741: 這個(gè)選項(xiàng)用于將主機(jī)的端口與容器的端口進(jìn)行映射。具體來(lái)說(shuō),將主機(jī)的8741端口映射到容器的8741端口,這樣外部可以通過(guò)主機(jī)的8741端口訪(fǎng)問(wèn)容器中的應(yīng)用程序。
5.-v /home/www/spring-boot-docker:/jar: 這個(gè)選項(xiàng)用于將主機(jī)的文件系統(tǒng)目錄與容器內(nèi)的目錄進(jìn)行掛載。在這種情況下,將主機(jī)上的/home/www/spring-boot-docker目錄掛載到容器內(nèi)的/jar目錄。這通常用于將應(yīng)用程序的代碼和資源文件從主機(jī)復(fù)制到容器中,以便在容器內(nèi)運(yùn)行應(yīng)用程序。
6.openjdk:8u181: 這是要在容器中使用的Docker鏡像的名稱(chēng)和標(biāo)簽。在這里,使用的是一個(gè)基于OpenJDK 8u181的Java鏡像,該鏡像包含了Java運(yùn)行時(shí)環(huán)境。
7.java -jar /jar/spring-boot-docker-1.0.jar --spring.profiles.active=dev: 這是在容器內(nèi)運(yùn)行的命令。它啟動(dòng)了Java虛擬機(jī)(JVM),并在JVM內(nèi)運(yùn)行了一個(gè)Spring Boot應(yīng)用程序。具體來(lái)說(shuō),它運(yùn)行了/jar/spring-boot-docker-1.0.jar這個(gè)JAR文件,并通過(guò)–spring.profiles.active=dev指定了一個(gè)Spring配置文件的激活配置。
這個(gè)腳本的作用是創(chuàng)建一個(gè)名為"spring-boot-docker-1.0"的Docker容器,該容器運(yùn)行一個(gè)基于Spring Boot的Java應(yīng)用程序,該應(yīng)用程序監(jiān)聽(tīng)8741端口,并將主機(jī)上的/home/www/spring-boot-docker目錄掛載到容器內(nèi)的/jar目錄,以供應(yīng)用程序使用。這樣,可以通過(guò)主機(jī)的8741端口訪(fǎng)問(wèn)運(yùn)行在容器中的Spring Boot應(yīng)用程序。
運(yùn)行腳本 sh start.sh以后發(fā)布,只需要把宿主機(jī)目錄里的jar包替換掉,重啟容器。
到此這篇關(guān)于基于SpringBoot項(xiàng)目實(shí)現(xiàn)Docker容器化部署的文章就介紹到這了,更多相關(guān)SpringBoot Docker容器化部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL 新增字段但 Java 實(shí)體未更新存在潛在問(wèn)題與解決方案
在 Java + MySQL 的開(kāi)發(fā)中,我們通常使用 ORM 框架(如 MyBatis、MyBatis-Plus、Hibernate)來(lái)映射數(shù)據(jù)庫(kù)表與 Java 對(duì)象,這篇文章主要介紹了MySQL 新增字段但 Java 實(shí)體未更新:潛在問(wèn)題與解決方案,需要的朋友可以參考下2025-04-04
Java Lock鎖多線(xiàn)程中實(shí)現(xiàn)流水線(xiàn)任務(wù)
這篇文章主要介紹了Java Lock鎖多線(xiàn)程中實(shí)現(xiàn)流水線(xiàn)任務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Spring MVC使用jstl 標(biāo)簽c:forEach 遍歷輸出雙層嵌套List的數(shù)據(jù)方式
這篇文章主要介紹了Spring MVC使用jstl 標(biāo)簽c:forEach 遍歷輸出雙層嵌套List的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
教你用java完美封裝微信模板消息的發(fā)送動(dòng)態(tài)
這篇文章主要介紹了教你用java完美封裝微信模板消息的發(fā)送動(dòng)態(tài),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04
java 過(guò)濾器模式(Filter/Criteria Pattern)詳細(xì)介紹
這篇文章主要介紹了java 過(guò)濾器模式(Filter/Criteria Pattern)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10
阿里資深技術(shù)專(zhuān)家:在各階段中3年經(jīng)驗(yàn)的java程序員應(yīng)該具備哪些技術(shù)能力
這篇文章主要介紹了阿里資深技術(shù)專(zhuān)家:在各階段中3年經(jīng)驗(yàn)的java程序員應(yīng)該具備哪些技術(shù)能力,本文給大家列舉了一些內(nèi)容,大家可以根據(jù)自己需要有方法的掌握,感興趣的朋友跟隨小編一起看看吧2020-07-07
Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法
這篇文章主要介紹了Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法的相關(guān)資料,需要的朋友可以參考下2017-03-03
java報(bào)錯(cuò):找不到或無(wú)法加載主類(lèi)的解決方法簡(jiǎn)單粗暴
本文主要介紹了java報(bào)錯(cuò):找不到或無(wú)法加載主類(lèi)的解決方法簡(jiǎn)單粗暴,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

