欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java(SpringBoot)項(xiàng)目打包(構(gòu)建)成Docker鏡像的幾種常見方式

 更新時(shí)間:2023年12月14日 09:58:27   作者:小簡(JanYork)  
在對(duì)Spring Boot應(yīng)用程序進(jìn)行Docker化時(shí),為應(yīng)用程序選擇正確的基礎(chǔ)鏡像非常重要,下面這篇文章主要給大家介紹了關(guān)于Java(SpringBoot)項(xiàng)目打包(構(gòu)建)成Docker鏡像的幾種常見方式,需要的朋友可以參考下

前置說明

  • 最為原始的打包方式
  • spring-boot-maven-plugin插件
  • jib-maven-plugin插件
  • dockerfle-maven-plugin插件

最為原始的方式

也就是使用Docker的打包命令去打包,麻煩,我這里不多說。

spring-boot-maven-plugin插件打包

SpringBoot自己內(nèi)置了一個(gè)Docker鏡像打包工具,在spring-boot-starter-parent中,我們無需多余的設(shè)置。

優(yōu)點(diǎn):不需要寫DockerFile,Spring建議的安全、內(nèi)存、性能等問題都不需要管。

jib-maven-plugin插件

來自Google的一款打包插件。

優(yōu)點(diǎn):不需要本地安裝Docker,也不需要寫DockerFile,Jib 可以直接推送到指定的Docker倉庫。

dockerfle-maven-plugin插件

需要寫DockerFile也需要本地Docker環(huán)境,但是恰恰是最好用的,最穩(wěn)定的,最自由把控的。

優(yōu)點(diǎn):穩(wěn)定,不受網(wǎng)絡(luò)限制,DockerFile自己寫,自由度很高,想怎么改怎么改,個(gè)人推薦這個(gè)。

SpringBoot打包鏡像

我們無需引入依賴,SpringBoot自帶了。

打包命令:

mvn spring-boot:build-image

但是我不喜歡用命令,IDEA都給你可視化了,何必敲命令呢?而且命令還需要設(shè)置Maven環(huán)境變量。

就和打JAR包一樣,我們點(diǎn)一下就可以。

但是SpringBoot的打包會(huì)因?yàn)榫W(wǎng)絡(luò)(不通暢),而導(dǎo)致失敗。

打包完成是這樣:

我們?nèi)ゲ榭幢镜冂R像有沒有。

運(yùn)行測試一下。

說實(shí)話我運(yùn)行失敗了,因?yàn)槲翼?xiàng)目里面有一下東西它不好搞,比如微信支付的證書文件和KEY文件,一般的SpringBoot項(xiàng)目可以,但是我這個(gè)恰恰不行,我需要自己寫DockerFile去創(chuàng)建卷映射才好。

JIB打包鏡像

配置插件依賴:

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.toemail.smtp.ToEmailApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>3.3.1</version>
                <configuration>
                    <!--from節(jié)點(diǎn)用來設(shè)置鏡像的基礎(chǔ)鏡像,相當(dāng)于Docerkfile中的FROM關(guān)鍵字-->
                    <from>
                        <!--基礎(chǔ)鏡像名稱(建議使用國內(nèi)公開鏡像,下載速度快,更穩(wěn)定) -->
                        <image>java:8u172-jre-alpine</image>
                    </from>
                    <to>
                        <!--鏡像名稱和tag,使用了mvn內(nèi)置變量${project.version},表示當(dāng)前工程的version-->
                        <image>demo:${project.version}</image>
                    </to>
                    <!--容器相關(guān)的屬性-->
                    <container>
                        <!--jvm內(nèi)存參數(shù)-->
                        <jvmFlags>
                            <jvmFlag>-Xms4g</jvmFlag>
                            <jvmFlag>-Xmx4g</jvmFlag>
                        </jvmFlags>
                        <!--要暴露的端口-->
                        <ports>
                            <port>8899</port>
                        </ports>
                    </container>
                </configuration>
            </plugin>

我這里用的目前最新版本。

另外,很多配置我都寫了注釋,如果你想了解更多可以查一下JIB的相關(guān)文檔。

命令

mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild

IDEA

報(bào)錯(cuò)

如果出現(xiàn)這錯(cuò)誤:

就添加以下配置:

還是報(bào)錯(cuò)

好像是它這個(gè)官方倉庫需要認(rèn)證登錄,我靠,我真不喜歡這破插件,垃圾(暗暗罵道)。

突然解決

這個(gè)鏡像,需要指定具體倉庫URL地址的。

但是我現(xiàn)在這個(gè)不行,所以我要換一個(gè)阿里的倉庫。

改成了這樣:

<to>
  <image>registry.cn-qingdao.aliyuncs.com/jibjava/jibfirst</image>
</to>

阿里云有時(shí)候私有倉庫需要密碼,也可以換成其他私有倉庫。

		<from>
            <image>registry.cn-qingdao.aliyuncs.com/jibjava/jibfirst</image>
            <auth>
              <username>阿里云賬號(hào)</username>
              <password>阿里云密碼</password>
            </auth>
          </from>

XML標(biāo)簽詳解

from:拉取的鏡像的配置,默認(rèn)為gcr.io/distroless/java
to:要生成的鏡像的配置
image:拉取或生成的鏡像名稱
auth: 認(rèn)證信息,分別為用戶名和密碼
container: 容器的屬性
jvmFlgs: JVM 容器的參數(shù),和 Dockerfile 的 ENTRYPOINT作用相同
mainClass: 啟動(dòng)類限定名
args: main 方法的傳入?yún)?shù)
ports: 容器暴露的端口,和 Dockerfile 的EXPOSE作用相同

成功

DockerFileMaven打包

DockerFile

FROM c9katayama/java8:latest
# 創(chuàng)建目錄
RUN mkdir -p /dashboard
# 拷貝文件
COPY dashboard.jar /dashboard/dashboard.jar
# 暴露端口
EXPOSE 8099
# 啟動(dòng)命令
CMD ["java", "-jar", "/dashboard/dashboard.jar"]

DockerFile不多說,請自行學(xué)習(xí)。

依賴展示:

			<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.11</version>
                <dependencies>
                    <dependency>
                        <groupId>javax.activation</groupId>
                        <artifactId>javax.activation-api</artifactId>
                        <version>1.2.0</version>
                        <scope>compile</scope>
                    </dependency>
                </dependencies>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                        <imageTag>latest</imageTag>
                    </imageTags>
                </configuration>
            </plugin>

但是這一段插件的XML別用,因?yàn)檫@是rocketmq可視化控制臺(tái)的官方寫的,你可以自己配置。

正常的一般插件的XML就這樣:

		<plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>${project.artifactId}:${project.version}</imageName>
                <!-- 指定 Dockerfile 路徑-->
                <dockerDirectory>${basedir}/docker</dockerDirectory> 
                <!-- 這里是復(fù)制 jar 包到 docker 容器指定目錄配置,也可以寫到 Docokerfile 中 -->
                <resources>
                    <resource>
                        <targetPath>/ROOT</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>

其余配置可以自行瀏覽器搜索一下:docker-maven-plugin配置項(xiàng)

構(gòu)建命令

mvn package

嘗試打包

我這里直接IDEA點(diǎn)擊打包,討厭命令。

注意:需要本地有Docker,并且開啟遠(yuǎn)程連接,WindowsDocker安裝小簡上一篇文章寫過的,可以看看,Linux的沒寫。

好用多了,一次成功。

還是這個(gè)最好用,推薦!?。?/p>

總結(jié)

小簡選擇的是最后一個(gè),第一個(gè)也還行吧,但是Google那個(gè)不需要本地有Docker環(huán)境,第一個(gè)我還是開著魔法(梯子)打包的,最后一個(gè)挺好的。

到此這篇關(guān)于Java(SpringBoot)項(xiàng)目打包(構(gòu)建)成Docker鏡像的幾種常見方式的文章就介紹到這了,更多相關(guān)SpringBoot打包成Docker鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 探究Java中Integer緩沖區(qū)底層原理

    探究Java中Integer緩沖區(qū)底層原理

    本文將會(huì)給大家講一講Integer這個(gè)包裝類的底層原理。在現(xiàn)在的就業(yè)環(huán)境下,我們需要知其然,還要知其所以然,才能更好地滿足就業(yè)需求,感興趣的小伙伴可以參考閱讀
    2023-05-05
  • Java使用OpenCV進(jìn)行圖像處理的示例代碼

    Java使用OpenCV進(jìn)行圖像處理的示例代碼

    OpenCV是一個(gè)開源的計(jì)算機(jī)視覺庫,廣泛應(yīng)用于圖像處理、機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺等領(lǐng)域,盡管OpenCV主要使用C/C++進(jìn)行開發(fā),但它也為Java提供了綁定,使得Java開發(fā)者能夠利用其強(qiáng)大的圖像處理功能,在本篇文章中,我們將詳細(xì)介紹如何在Java中使用OpenCV,需要的朋友可以參考下
    2025-03-03
  • k8s解決java服務(wù)下載超時(shí)問題小結(jié)

    k8s解決java服務(wù)下載超時(shí)問題小結(jié)

    我們在走ingress的java程序的時(shí)候,往往會(huì)有導(dǎo)出數(shù)據(jù)的功能,這個(gè)時(shí)候就會(huì)有因網(wǎng)絡(luò)慢、后臺(tái)處理時(shí)間過長導(dǎo)致下載超時(shí),也有因下載文件太大,導(dǎo)致下載失敗,下面給分享k8s解決java服務(wù)下載超時(shí)問題,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • springMVC前臺(tái)傳數(shù)組類型,后臺(tái)用list類型接收實(shí)例代碼

    springMVC前臺(tái)傳數(shù)組類型,后臺(tái)用list類型接收實(shí)例代碼

    這篇文章主要介紹了springMVC前臺(tái)傳數(shù)組類型,后臺(tái)用list類型接收實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java線程通信中關(guān)于生產(chǎn)者與消費(fèi)者案例分析

    Java線程通信中關(guān)于生產(chǎn)者與消費(fèi)者案例分析

    這篇文章主要介紹了Java線程通信中關(guān)于生產(chǎn)者與消費(fèi)者案例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Spring容器初始化及問題解決方案

    Spring容器初始化及問題解決方案

    這篇文章主要介紹了Spring容器初始化及問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • springboot集成kafka消費(fèi)手動(dòng)啟動(dòng)停止操作

    springboot集成kafka消費(fèi)手動(dòng)啟動(dòng)停止操作

    這篇文章主要介紹了springboot集成kafka消費(fèi)手動(dòng)啟動(dòng)停止操作,本文給大家介紹項(xiàng)目場景及解決分析,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Java之一文詳解String字符串的用法

    Java之一文詳解String字符串的用法

    本文將給大家重點(diǎn)講解一下String的用法,因?yàn)檫@個(gè)太常用,也太常考了。String字符串的內(nèi)容是比較多的,需要初學(xué)者進(jìn)行專門的學(xué)習(xí),尤其是它的一些底層原理更需要我們來了解,需要的同學(xué)跟著小編一起學(xué)習(xí)吧
    2023-05-05
  • 詳解Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)

    詳解Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)

    本篇文章主要介紹了詳解Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 詳解mybatis plus使用insert沒有返回主鍵的處理

    詳解mybatis plus使用insert沒有返回主鍵的處理

    這篇文章主要介紹了詳解mybatis plus使用insert沒有返回主鍵的處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論