最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Maven插件docker-maven-plugin的使用

 更新時間:2021年06月21日 11:53:02   作者:哎_小羊_168  
在我們持續(xù)集成過程中,項目工程一般使用 Maven 編譯打包,然后生成鏡像,docker-maven-plugin 插件就是為了幫助我們在Maven工程中,通過簡單的配置,自動生成鏡像并推送到倉庫中。感興趣的可以了解一下

1、docker-maven-plugin 介紹

在我們持續(xù)集成過程中,項目工程一般使用 Maven 編譯打包,然后生成鏡像,通過鏡像上線,能夠大大提供上線效率,同時能夠快速動態(tài)擴容,快速回滾,著實很方便。docker-maven-plugin 插件就是為了幫助我們在Maven工程中,通過簡單的配置,自動生成鏡像并推送到倉庫中。

2、環(huán)境、軟件準備

本次演示環(huán)境,我是在本機 Mac OX 上操作,以下是安裝的軟件及版本:

  • Docker:version 17.03.1-ce
  • Maven:version 3.3.9
  • Java: version 1.8.0_91
  • docker-maven-plugin:1.0.0

注意:這里我們要測試 Java Maven 項目用 docker-maven 插件打鏡像,上傳鏡像等操作,所以需要先安裝一下 Docker、Maven、Java,這里忽略安裝過程。

3、Demo 示例

3.1 配置 DOCKER_HOST

docker-maven-plugin 插件默認連接本地 Docker 地址為:localhost:2375,所以我們需要先設(shè)置下環(huán)境變量。

DOCKER_HOST=tcp://<host>:2375

注意:如果沒有設(shè)置 DOCKER_HOST 環(huán)境變量,可以命令行顯示指定 DOCKER_HOST 來執(zhí)行,如我本機指定 DOCKER_HOST:DOCKER_HOST=unix:///var/run/docker.sock mvn clean install docker:build。

3.2 示例構(gòu)建鏡像

構(gòu)建鏡像可以使用一下兩種方式,第一種是將構(gòu)建信息指定到 POM 中,第二種是使用已存在的 Dockerfile 構(gòu)建。
第一種方式,支持將 FROM, ENTRYPOINT, CMD, MAINTAINER 以及 ADD 信息配置在 POM 中,不需要使用 Dockerfile 配置。但是如果使用 VOLUME 或其他 Dockerfile 中的命令的時候,需要使用第二種方式,創(chuàng)建一個 Dockerfile,并在 POM 中配置 dockerDirectory 來指定路徑即可。

這里我們以一個 Java Maven 項目 mavendemo 作為示例演示一下。

3.2.1 指定構(gòu)建信息到 POM 中構(gòu)建

<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>mavendemo</imageName>
                <baseImage>java</baseImage>
                <maintainer>docker_maven docker_maven@email.com</maintainer>
                <workdir>/ROOT</workdir>
                <cmd>["java", "-version"]</cmd>
                <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                <!-- 這里是復(fù)制 jar 包到 docker 容器指定目錄配置 -->
                <resources>
                    <resource>
                        <targetPath>/ROOT</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

3.2.2 使用 Dockerfile 構(gòu)建

pom.xml配置

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

${basedir}/docker/Dockerfile 配置

FROM java
MAINTAINER docker_maven docker_maven@email.com
WORKDIR /ROOT
CMD ["java", "-version"]
ENTRYPOINT ["java", "-jar", "${project.build.finalName}.jar"]

以上兩種方式執(zhí)行docker:build效果是一樣的,執(zhí)行輸出過程大致如下:

[INFO] --- docker-maven-plugin:1.0.0:build (default-cli) @ mavenDemo ---
[INFO] Building image mavendemo
Step 1/5 : FROM java
 ---> d23bdf5b1b1b
Step 2/5 : MAINTAINER docker_maven docker_maven@email.com
 ---> Using cache
 ---> 2faf180d4a50
Step 3/5 : WORKDIR /ROOT
 ---> Using cache
 ---> 862210f7956a
Step 4/5 : ENTRYPOINT java -jar mavenDemo.jar
 ---> Running in 96bbe83de6ec
 ---> c29009c88993
Removing intermediate container 96bbe83de6ec
Step 5/5 : CMD java -version
 ---> Running in f69b8d2a75b1
 ---> bc8d54014325
Removing intermediate container f69b8d2a75b1
Successfully built bc8d54014325

執(zhí)行完成后,使用docker images查看生成的鏡像:

REPOSITORY       TAG           IMAGE ID            CREATED             SIZE
mavendemo        latest        333b429536b2        38 minutes ago      643 MB

3.3 執(zhí)行命令

mvn clean package docker:build 只執(zhí)行 build 操作

mvn clean package docker:build -DpushImage 執(zhí)行 build 完成后 push 鏡像

mvn clean package docker:build -DpushImageTag 執(zhí)行 build 并 push 指定 tag 的鏡像

注意:這里必須指定至少一個 imageTag,它可以配置到 POM 中,也可以在命令行指定。命令行指定如下:mvn clean package docker:build -DpushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2,POM 文件中指定配置如下:

<build>
  <plugins>
    ...
    <plugin>
      <configuration>
        ...
        <imageTags>
           <imageTag>imageTag_1</imageTag>
           <imageTag>imageTag_2</imageTag>
        </imageTags>
      </configuration>
    </plugin>
    ...
  </plugins>
</build>

3.4 綁定Docker 命令到 Maven 各個階段

我們可以綁定 Docker 命令到 Maven 各個階段,我們可以把 Docker 分為 build、tag、push,然后分別綁定 Maven 的 package、deploy 階段,此時,我們只需要執(zhí)行mvn deploy就可以完成整個 build、tag、push操作了,當我們執(zhí)行mvn build就只完成 build、tag 操作。除此此外,當我們想跳過某些步驟或者只執(zhí)行某個步驟時,不需要修改 POM 文件,只需要指定跳過 docker 某個步驟即可。比如當我們工程已經(jīng)配置好了自動化模板了,但是這次我們只需要打鏡像到本地自測,不想執(zhí)行 push 階段,那么此時執(zhí)行要指定參數(shù)-DskipDockerPush就可跳過 push 操作了。

<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>mavendemo</imageName>
                <baseImage>java</baseImage>
                <maintainer>docker_maven docker_maven@email.com</maintainer>
                <workdir>/ROOT</workdir>
                <cmd>["java", "-version"]</cmd>
                <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                <resources>
                    <resource>
                        <targetPath>/ROOT</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
            <executions>
                <execution>
                    <id>build-image</id>
                    <phase>package</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
                <execution>
                    <id>tag-image</id>
                    <phase>package</phase>
                    <goals>
                        <goal>tag</goal>
                    </goals>
                    <configuration>
                        <image>mavendemo:latest</image>
                        <newName>docker.io/wanyang3/mavendemo:${project.version}</newName>
                    </configuration>
                </execution>
                <execution>
                    <id>push-image</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>push</goal>
                    </goals>
                    <configuration>
                        <imageName>docker.io/wanyang3/mavendemo:${project.version}</imageName>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

以上示例,當我們執(zhí)行mvn package時,執(zhí)行 build、tag 操作,當執(zhí)行mvn deploy時,執(zhí)行build、tag、push 操作。如果我們想跳過 docker 某個過程時,只需要:

  • -DskipDockerBuild 跳過 build 鏡像
  • -DskipDockerTag 跳過 tag 鏡像
  • -DskipDockerPush 跳過 push 鏡像
  • -DskipDocker 跳過整個階段

例如:我們想執(zhí)行 package 時,跳過 tag 過程,那么就需要mvn package -DskipDockerTag。

3.5 使用私有 Docker 倉庫地址

實際工作環(huán)境中,我們需要 push 鏡像到我們私有 Docker 倉庫中,使用d ocker-maven-plugin 插件我們也是很容易實現(xiàn),有幾種方式實現(xiàn):

一、修改 POM 文件 imageName 操作

...
<configuration>
    <imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName>
    ...
</configuration>
...

二、修改 POM 文件中 newName 操作

...
<configuration>
    <imageName>mavendemo</imageName>
    ...
</configuration>
<execution>
    <id>tag-image</id>
    <phase>package</phase>
    <goals>
        <goal>tag</goal>
    </goals>
    <configuration>
        <image>mavendemo</image>
        <newName>registry.example.com/wanyang3/mavendemo:v1.0.0</newName>
    </configuration>
</execution>
...

3.6 安全認證配置

當我們 push 鏡像到 Docker 倉庫中時,不管是共有還是私有,經(jīng)常會需要安全認證,登錄完成之后才可以進行操作。當然,我們可以通過命令行 docker login -u user_name -p password docker_registry_host 登錄,但是對于自動化流程來說,就不是很方便了。使用 docker-maven-plugin 插件我們可以很容易實現(xiàn)安全認證。

首先在 Maven 的配置文件 setting.xml 中增加相關(guān) server 配置,主要配置 Docker registry用戶認證信息。

<servers>
  <server>
    <id>my-docker-registry</id>
    <username>wanyang3</username>
    <password>12345678</password>
    <configuration>
      <email>wanyang3@mail.com</email>
    </configuration>
  </server>
</servers>

然后只需要在 pom.xml 中使用 server id 即可。

<plugin>
  <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <configuration>
      <imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName>
      ...
      <serverId>my-docker-registry</serverId>
    </configuration>
  </plugin>
</plugins>

3.7 其他參數(shù)

docker-maven-plugin 插件還提供了很多很實用的配置,稍微列舉幾個參數(shù)吧。

參數(shù) 說明 默認值
<forceTags>true</forceTags> build 時強制覆蓋 tag,配合 imageTags 使用 false
<noCache>true</noCache> build 時,指定 –no-cache 不使用緩存 false
<pullOnBuild>true</pullOnBuild> build 時,指定 –pull=true 每次都重新拉取基礎(chǔ)鏡像 false
<pushImage>true</pushImage> build 完成后 push 鏡像 false
<pushImageTag>true</pushImageTag> build 完成后,push 指定 tag 的鏡像,配合 imageTags 使用 false
<retryPushCount>5</retryPushCount> push 鏡像失敗,重試次數(shù) 5
<retryPushTimeout>10</retryPushTimeout> push 鏡像失敗,重試時間 10s
<rm>true</rm> build 時,指定 –rm=true 即 build 完成后刪除中間容器 false
<useGitCommitId>true</useGitCommitId> build 時,使用最近的 git commit id 前7位作為tag,例如:image:b50b604,前提是不配置 newName false

4、FAQ

1、執(zhí)行 build images 時,報錯情況一:

[INFO] Building image mavendemo
org.apache.http.impl.execchain.RetryExec execute
I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: No such file or directory
[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project mavenDemo: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.io.IOException: No such file or directory -> [Help 1]

這個是因為 Docker 服務(wù)沒有啟動造成的,啟動 Docker 即可。

2、執(zhí)行 build images 時,報錯情況二:

ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project mavenDemo: Exception caught: Request error: POST unix://localhost:80/build?t=mavenDemo: 500, body: {"message":"Error parsing reference: \"mavenDemo\" is not a valid repository/tag: repository name must be lowercase"}: HTTP 500 Internal Server Error -> [Help 1]

這個是因為鏡像名字不正確,Docker 鏡像名稱需匹配[a-z0-9-_.]。

參考資料

docker-maven-plugin

到此這篇關(guān)于Maven插件docker-maven-plugin的使用的文章就介紹到這了,更多相關(guān)docker-maven-plugin 使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Spring集成Redis的兩種方式

    詳解Spring集成Redis的兩種方式

    在工作中,我們用到分布式緩存的時候,第一選擇就是Redis,今天介紹一下SpringBoot如何集成Redis的,具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • Java未賦值變量的初始值解析(默認值)

    Java未賦值變量的初始值解析(默認值)

    這篇文章主要介紹了Java未賦值變量的初始值(默認值),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 基于Spring的Maven項目實現(xiàn)發(fā)送郵件功能的示例

    基于Spring的Maven項目實現(xiàn)發(fā)送郵件功能的示例

    這篇文章主要介紹了基于Spring的Maven項目實現(xiàn)發(fā)送郵件功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Spring Boot 搭建 ELK正確看日志的配置流程

    Spring Boot 搭建 ELK正確看日志的配置流程

    這篇文章主要介紹了Spring Boot 搭建 ELK正確看日志的配置流程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 基于Springboot+Junit+Mockito做單元測試的示例

    基于Springboot+Junit+Mockito做單元測試的示例

    本篇文章主要介紹了基于Springboot+Junit+Mockito做單元測試的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Spring Cloud Alibaba配置多環(huán)境管理詳解與實戰(zhàn)代碼

    Spring Cloud Alibaba配置多環(huán)境管理詳解與實戰(zhàn)代碼

    本文通過實際案例詳細介紹了springboot配置多環(huán)境管理的使用,以及基于nacos的配置多環(huán)境管理的實踐,在實際開發(fā)中,配置多環(huán)境管理是一個很難避開的問題,同時也是微服務(wù)治理中一個很重要的內(nèi)容,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • java實現(xiàn)稀疏矩陣的壓縮與解壓的方法

    java實現(xiàn)稀疏矩陣的壓縮與解壓的方法

    這篇文章主要介紹了java實現(xiàn)稀疏矩陣的壓縮與解壓 ,把該稀疏矩陣壓縮以三元組形式表示并以文件形式保存,再寫另一個程序讀取文件中的信息把壓縮后的三元組還原成原來的稀疏矩陣,需要的朋友可以參考下
    2022-03-03
  • Spring注入Map集合實現(xiàn)策略模式詳解

    Spring注入Map集合實現(xiàn)策略模式詳解

    這篇文章主要介紹了Spring注入Map集合實現(xiàn)策略模式詳解,Spring提供通過@Resource注解將相同類型的對象注入到Map集合,并將對象的名字作為key,對象作為value封裝進入Map,需要的朋友可以參考下
    2023-11-11
  • 解決@RequestBody搭配@Data的大坑

    解決@RequestBody搭配@Data的大坑

    這篇文章主要介紹了解決@RequestBody搭配@Data的大坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • IDEA2020.2.3

    IDEA2020.2.3 "reading maven projects"卡住的問題

    這篇文章主要介紹了IDEA2020.2.3 "reading maven projects"卡住的問題及問題原因探究,通過多種方法給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-10-10

最新評論

芦溪县| 潮州市| 特克斯县| 西和县| 彰化市| 庄浪县| 滦平县| 乃东县| 泸西县| 休宁县| 吉林市| 浦县| 彰武县| 景宁| 封开县| 乌拉特后旗| 双峰县| 修水县| 原阳县| 阜城县| 永和县| 深泽县| 仁布县| 忻州市| 新余市| 祁门县| 淅川县| 旌德县| 中宁县| 南充市| 平果县| 仙桃市| 云安县| 安陆市| 泗阳县| 马山县| 河池市| 武宁县| 秀山| 玉屏| 行唐县|