如何打jar包為Docker鏡像并部署
* 解決打包和部署應(yīng)用程序的痛點(diǎn):
將Java應(yīng)用程序打包為可移植的Docker鏡像,并通過容器化方式實(shí)現(xiàn)應(yīng)用程序的部署和運(yùn)行。這種方法可以解決以下痛點(diǎn):
- 環(huán)境一致性問題:在不同的環(huán)境中運(yùn)行應(yīng)用程序可能會(huì)遇到依賴環(huán)境配置不一致的問題,導(dǎo)致應(yīng)用程序無(wú)法正常運(yùn)行。使用Docker鏡像可以將應(yīng)用程序與其依賴的運(yùn)行時(shí)環(huán)境打包在一起,確保在任何環(huán)境中都能以相同的方式運(yùn)行。
- 依賴管理困難:應(yīng)用程序的依賴關(guān)系可能復(fù)雜且難以管理,不同的應(yīng)用程序可能需要不同版本的依賴庫(kù)。將應(yīng)用程序打包為Docker鏡像可以將所有依賴項(xiàng)一起打包,避免了在不同環(huán)境中手動(dòng)配置和管理依賴的麻煩。
- 部署和升級(jí)復(fù)雜性:傳統(tǒng)的應(yīng)用程序部署和升級(jí)可能涉及手動(dòng)復(fù)制文件、配置環(huán)境、啟動(dòng)服務(wù)等繁瑣步驟,容易出錯(cuò)且耗時(shí)。使用Docker鏡像可以簡(jiǎn)化部署和升級(jí)過程,只需通過運(yùn)行容器即可完成應(yīng)用程序的啟動(dòng)和更新,大大減少了部署的復(fù)雜性和風(fēng)險(xiǎn)。
- 資源利用和擴(kuò)展性:傳統(tǒng)部署方式可能會(huì)面臨資源浪費(fèi)和擴(kuò)展性不足的問題,例如每個(gè)應(yīng)用程序都需要獨(dú)立的服務(wù)器資源。而使用Docker容器化可以更好地利用服務(wù)器資源,多個(gè)容器可以在同一臺(tái)物理機(jī)上運(yùn)行,實(shí)現(xiàn)資源共享和擴(kuò)展。
通過將應(yīng)用程序打包為Docker鏡像,并在容器中運(yùn)行,可以提供更高的靈活性、可移植性和可靠性,簡(jiǎn)化應(yīng)用程序的部署和管理,提升開發(fā)和運(yùn)維效率,降低系統(tǒng)運(yùn)行成本。*
解決打包配置版本問題:
在最大的父項(xiàng)目pom文件下規(guī)定一個(gè)
spring-boot-maven-plugin.version版本(降級(jí),高版本不需要)
<spring-boot-maven-plugin.version>2.4.3</spring-boot-maven-plugin.version>
在全局內(nèi)的需要打包的項(xiàng)目?jī)?nèi)的pom文件下寫此打包配置依賴:
<build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot-maven-plugin.version}</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
打包部署鏡像運(yùn)行容器
clean+package打jar包
復(fù)制此jar包到 服務(wù)器 某個(gè)目錄下
在項(xiàng)目根目錄下,創(chuàng)建Dockerfile的文本文件,并將以下內(nèi)容添加到文件中:
內(nèi)容:
# 基礎(chǔ)鏡像 FROM openjdk:8-jre # author(可更換) MAINTAINER luo # 掛載目錄(可更換) VOLUME /home/luo # 創(chuàng)建目錄(可更換和上面保持一致) RUN mkdir -p /home/luo # 指定路徑(可更換和上面保持一致) WORKDIR /home/luo # 復(fù)制jar文件到路徑(YouName=換成你的=jar包名稱) COPY ./jar/YouName.jar /home/luo/YouName.jar #下面也也可增加復(fù)制配置文件到同級(jí)路徑下 # 啟動(dòng)認(rèn)證服務(wù) ENTRYPOINT ["java","-jar","YouName.jar"]
把Dockerfile腳本也移動(dòng)到j(luò)ar包的服務(wù)器目錄下:
把jar包打包成鏡像運(yùn)行成容器
1.在項(xiàng)目根目錄下執(zhí)行以下命令,將jar包打包成docker鏡像:
your-jar-file.jar
是你要打包的jar包的文件名。
docker build -t your-image-name .
如果要給此鏡像一個(gè)版本號(hào)那就用這個(gè)語(yǔ)句:
其中,“your-image-name”是鏡像名稱,“1.0”是版本號(hào),“.”表示Dockerfile文件在當(dāng)前目錄中。
docker build -t your-image-name:1.0 .
2.執(zhí)行以下命令把鏡像啟動(dòng)容器:
其中,-p
參數(shù)用于指定容器內(nèi)部端口映射到主機(jī)的端口,8080:8080
表示將容器內(nèi)部的8080端口映射到主機(jī)的8080端口上。-d
參數(shù)用于指定容器在后臺(tái)運(yùn)行。
docker run -d -p 8080:8080 your-image-name
第一個(gè)端口號(hào)是主機(jī)(本地)端口號(hào),后面的端口號(hào)是服務(wù)器內(nèi)部端口號(hào)
3.最后:
訪問http://localhost:8080
即可訪問應(yīng)用程序。
解決問題
1.Docker部署鏡像時(shí),報(bào)jdk下載失敗的問題:
有圖如例:
解決:
1.直接在Docker公共鏡像倉(cāng)庫(kù)拉取所需要的jdk(注意:版本要一致!!)
docker pull openjdk:8-jre
2.如果還下載不下來(lái)就使用此方案:
http://www.dbjr.com.cn/server/304213uch.htm
到此這篇關(guān)于如何打jar包為Docker鏡像并部署的文章就介紹到這了,更多相關(guān)Docker鏡像部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker國(guó)內(nèi)鏡像源配置及走代理設(shè)置小結(jié)
本文主要介紹了配置Docker國(guó)內(nèi)鏡像源及代理設(shè)置,以加快鏡像拉取速度,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01Docker安裝Kong API Gateway并使用的詳細(xì)教程
這篇文章主要介紹了Docker安裝Kong API Gateway并使用,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08docker完整配置nginx+php+mysql的方法步驟
這篇文章主要介紹了docker完整配置nginx+php+mysql的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-02-02Logshark調(diào)試Logstash及Filebeat?pipelines使用詳解
這篇文章主要為大家介紹了Logshark調(diào)試Logstash及Filebeat?pipelines使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12docker安裝prometheus和grafana的詳細(xì)過程
prometheus通過各種Exporter采集到監(jiān)控?cái)?shù)據(jù),然后存儲(chǔ)進(jìn)prometheus中,以供查詢展示,這篇文章主要介紹了docker安裝prometheus和grafana,需要的朋友可以參考下2023-02-02