亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

淺談使用Maven插件構建Docker鏡像的方法

2024-07-13 10:15:32
字體:
來源:轉載
供稿:網友

本文介紹了使用Maven插件構建Docker鏡像的方法,分享給大家,具體如下:

工具

工欲善其事,必先利其器。筆者經過調研,有以下幾款Docker的Maven插件進入筆者視野:

 

插件名稱 官方地址
docker-maven-plugin https://github.com/spotify/docker-maven-plugin
docker-maven-plugin https://github.com/fabric8io/docker-maven-plugin
docker-maven-plugin https://github.com/bibryam/docker-maven-plugin

 

筆者從Stars、文檔易用性以及更新頻率三個緯度考慮,選用了第一款。

使用插件構建Docker鏡像

簡單使用

我們以之前的項目:microservice-discovery-eureka為例:

在pom.xml中添加下面這段

 <build>  <plugins>   <!-- docker的maven插件,官網:https://github.com/spotify/docker-maven-plugin -->   <plugin>    <groupId>com.spotify</groupId>    <artifactId>docker-maven-plugin</artifactId>    <version>0.4.12</version>    <configuration>     <!-- 注意imageName一定要是符合正則[a-z0-9-_.]的,否則構建不會成功 -->     <!-- 詳見:https://github.com/spotify/docker-maven-plugin Invalid repository name ... only [a-z0-9-_.] are allowed-->     <imageName>microservice-discovery-eureka</imageName>     <baseImage>java</baseImage>     <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>     <resources>      <resource>       <targetPath>/</targetPath>       <directory>${project.build.directory}</directory>       <include>${project.build.finalName}.jar</include>      </resource>     </resources>    </configuration>   </plugin>  </plugins> </build>

執行命令:

mvn clean package docker:build

我們會發現控制臺有類似如下內容:

[INFO] Building image microservice-discovery-eurekaStep 1 : FROM javaPulling from library/javaDigest: sha256:581a4afcbbedd8fdf194d597cb5106c1f91463024fb3a49a2d9f025165eb675fStatus: Downloaded newer image for java:latest ---> ea40c858f006Step 2 : ADD /microservice-discovery-eureka-0.0.1-SNAPSHOT.jar // ---> d1c174083bcaRemoving intermediate container 91913d847c20Step 3 : ENTRYPOINT java -jar /microservice-discovery-eureka-0.0.1-SNAPSHOT.jar ---> Running in 0f2aeccdfd46 ---> d57b027ca65aRemoving intermediate container 0f2aeccdfd46Successfully built d57b027ca65a[INFO] Built microservice-discovery-eureka[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 01:38 min[INFO] Finished at: 2016-09-18T01:05:05-07:00[INFO] Final Memory: 40M/198M

恭喜,構建成功了。

我們執行docker images 會發現該鏡像已經被構建成功:

REPOSITORY      TAG     IMAGE ID   CREATED    SIZEmicroservice-discovery-eureka latest    d57b027ca65a  About a minute ago 681.5 MB

啟動鏡像

docker run -p 8761:8761 microservice-discovery-eureka

我們會發現該Docker鏡像會很快地啟動。

訪問測試

訪問http://Docker宿主機IP:8761 ,能夠正??吹紼ureka界面。

使用Dockerfile進行構建

上文講述的方式是最簡單的方式,很多時候,我們還是要借助Dockerfile進行構建的,首先我們在/microservice-discovery-eureka/src/main/docker目錄下,建立文件Dockerfile

FROM java:8VOLUME /tmpADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jarRUN bash -c 'touch /app.jar'EXPOSE 9000ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

修改pom.xml

<build>  <plugins>   <!-- docker的maven插件,官網:https://github.com/spotify/docker-maven-plugin -->   <plugin>    <groupId>com.spotify</groupId>    <artifactId>docker-maven-plugin</artifactId>    <version>0.4.12</version>    <configuration>     <!-- 注意imageName一定要是符合正則[a-z0-9-_.]的,否則構建不會成功 -->     <!-- 詳見:https://github.com/spotify/docker-maven-plugin Invalid repository name ... only [a-z0-9-_.] are allowed-->     <imageName>microservice-discovery-eureka-dockerfile</imageName>     <!-- 指定Dockerfile所在的路徑 -->     <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>     <resources>      <resource>       <targetPath>/</targetPath>       <directory>${project.build.directory}</directory>       <include>${project.build.finalName}.jar</include>      </resource>     </resources>    </configuration>   </plugin>  </plugins> </build>

其他步驟一樣。這樣即可使用Dockerfile進行構建Docker鏡像啦。

將Docker鏡像push到DockerHub上

首先修改Maven的全局配置文件settings.xml,添加以下段落

<servers> <server> <id>docker-hub</id> <username>你的DockerHub用戶名</username> <password>你的DockerHub密碼</password> <configuration>  <email>你的DockerHub郵箱</email> </configuration> </server></servers>

 在DockerHub上創建repo

項目pom.xml修改為如下:注意imageName的路徑要和repo的路徑一致

<build>  <plugins>   <!-- docker的maven插件,官網:https://github.com/spotify/docker-maven-plugin -->   <plugin>    <groupId>com.spotify</groupId>    <artifactId>docker-maven-plugin</artifactId>    <version>0.4.12</version>    <configuration>     <!-- 注意imageName一定要是符合正則[a-z0-9-_.]的,否則構建不會成功 -->     <!-- 詳見:https://github.com/spotify/docker-maven-plugin Invalid repository       name ... only [a-z0-9-_.] are allowed -->     <!-- 如果要將docker鏡像push到DockerHub上去的話,這邊的路徑要和repo路徑一致 -->     <imageName>eacdy/test</imageName>     <!-- 指定Dockerfile所在的路徑 -->     <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>     <resources>      <resource>       <targetPath>/</targetPath>       <directory>${project.build.directory}</directory>       <include>${project.build.finalName}.jar</include>      </resource>     </resources>     <!-- 以下兩行是為了docker push到DockerHub使用的。 -->     <serverId>docker-hub</serverId>     <registryUrl>https://index.docker.io/v1/</registryUrl>    </configuration>   </plugin>  </plugins> </build>

執行命令:

mvn clean package docker:build -DpushImage

搞定,等構建成功后,我們會發現Docker鏡像已經被push到DockerHub上了。

將鏡像push到私有倉庫

在很多場景下,我們需要將鏡像push到私有倉庫中去,這邊為了講解的全面性,私有倉庫采用的是配置登錄認證的私有倉庫。

和push鏡像到DockerHub中一樣,我們首先需要修改Maven的全局配置文件settings.xml,添加以下段落

<servers> <server> <id>docker-registry</id> <username>你的DockerHub用戶名</username> <password>你的DockerHub密碼</password> <configuration>  <email>你的DockerHub郵箱</email> </configuration> </server></servers>

將項目的pom.xml改成如下,

<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.12</version> <configuration> <!-- 路徑為:私有倉庫地址/你想要的鏡像路徑 --> <imageName>reg.itmuch.com/test-pull-registry</imageName> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <resources>  <resource>  <targetPath>/</targetPath>  <directory>${project.build.directory}</directory>  <include>${project.build.finalName}.jar</include>  </resource> </resources> <!-- 與maven配置文件settings.xml一致 --> <serverId>docker-registry</serverId> </configuration></plugin>

執行:

mvn clean package docker:build -DpushImage

稍等片刻,將會push成功。

如果想要從私服上下載該鏡像,執行:

docker login reg.itmuch.com # 然后輸入賬號和密碼docker pull reg.itmuch.com/test-pull-registry

將插件綁定在某個phase執行

在很多場景下,我們有這樣的需求,例如執行mvn clean package 時,自動地為我們構建docker鏡像,可以嗎?答案是肯定的。我們只需要將插件的goal 綁定在某個phase即可。

所謂的phase和goal,可以這樣理解:maven命令格式是:mvn phase:goal ,例如mvn package docker:build 那么,package 和 docker 都是phase,build 則是goal 。

下面是示例:

首先配置屬性:

<properties><docker.image.prefix>reg.itmuch.com</docker.image.prefix></properties>

插件配置:

 <build> <plugins>  <plugin>  <groupId>com.spotify</groupId>  <artifactId>docker-maven-plugin</artifactId>  <executions>   <execution>   <id>build-image</id>   <phase>package</phase>   <goals>    <goal>build</goal>   </goals>   </execution>  </executions>  <configuration>   <imageName>${docker.image.prefix}/${project.artifactId}</imageName>   <baseImage>java</baseImage>   <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>   <resources>   <resource>    <targetPath>/</targetPath>    <directory>${project.build.directory}</directory>    <include>${project.build.finalName}.jar</include>   </resource>   </resources>  </configuration>  </plugin> </plugins> </build>

 如上,我們只需要添加:

  <executions>   <execution>   <id>build-image</id>   <phase>package</phase>   <goals>    <goal>build</goal>   </goals>   </execution>  </executions>

即可。本例指的是講docker的build目標,綁定在package這個phase上。也就是說,用戶只需要執行mvn package ,就自動執行了mvn docker:build 。

常見異常

連接不上2375(一般在Win7上出現)

 

復制代碼 代碼如下:

Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect -> [Help 1]

 

解決步驟:

輸入docker-machine env

$Env:DOCKER_TLS_VERIFY = "1"$Env:DOCKER_HOST = "tcp://192.168.99.100:2376"$Env:DOCKER_CERT_PATH = "C:/Users/Administrator/.docker/machine/machines/default

為插件添加配置

<!-- 解決Connect to localhost:2375的問題的其中一種方式,注意要跟docker-machine env相一致 --><dockerHost>https://192.168.99.100:2376</dockerHost>    <dockerCertPath>C:/Users/Administrator/.docker/machine/machines/default</dockerCertPath>

修改后插件配置變為:

<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.12</version> <configuration>  <imageName>eacdy/test</imageName>  <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>  <!-- 解決Connect to localhost:2375的問題的其中一種方式,注意要跟docker-machine env相一致 -->  <dockerHost>https://192.168.99.100:2376</dockerHost>  <dockerCertPath>C:/Users/Administrator/.docker/machine/machines/default</dockerCertPath>  <resources>   <resource>    <targetPath>/</targetPath>    <directory>${project.build.directory}</directory>    <include>${project.build.finalName}.jar</include>   </resource>  </resources>  <!-- 以下兩行是為了docker push到DockerHub使用的。 -->  <serverId>docker-hub</serverId>  <registryUrl>https://index.docker.io/v1/</registryUrl> </configuration></plugin>

參考:https://github.com/spotify/docker-maven-plugin/issues/116

TIPS

  1. imageName必須符合正則[a-z0-9-_.],否則將會構建失敗
  2. 插件默認使用localhost:2375去連接Docker,如果你的Docker端口不是2375,需要配置環境變量DOCKER_HOST=tcp://<host>:2375

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲www在线观看| 欧美极品在线播放| 成人午夜一级二级三级| 在线观看久久av| 91麻豆国产语对白在线观看| 91视频免费在线| 精品久久久久久久久久| 亚洲精品福利资源站| 色妞久久福利网| 欧洲s码亚洲m码精品一区| 国产精品精品视频一区二区三区| 亚洲成年人在线播放| 成人情趣片在线观看免费| 九色精品免费永久在线| 日本精品va在线观看| 亚洲国产另类 国产精品国产免费| 亚洲欧美激情另类校园| 久久精品电影一区二区| 久久久精品一区| 久久久久亚洲精品成人网小说| 成人性教育视频在线观看| 亚洲国产91色在线| 精品国产乱码久久久久久天美| 欧美激情亚洲另类| 国模精品系列视频| 国产视频精品xxxx| 成人福利在线视频| 福利一区视频在线观看| 91天堂在线观看| 久久精品中文字幕免费mv| 国产欧美 在线欧美| 欧美影院成年免费版| 精品日本高清在线播放| 日本欧美爱爱爱| 亚洲激情视频在线观看| 热门国产精品亚洲第一区在线| 国产一区二区精品丝袜| 亚洲护士老师的毛茸茸最新章节| 国产视频999| 人体精品一二三区| 精品国产91久久久久久老师| 亚洲精品日产aⅴ| 97视频在线观看免费高清完整版在线观看| 在线免费看av不卡| 欧美激情在线有限公司| 丝袜美腿亚洲一区二区| 国产一区二区三区欧美| 午夜精品久久久久久99热软件| 国产+成+人+亚洲欧洲| 98精品国产高清在线xxxx天堂| 91高潮在线观看| 欧美性猛交xxxx乱大交蜜桃| 国产精品美女免费看| 中文字幕视频一区二区在线有码| 精品久久久久国产| 亚洲欧美国内爽妇网| 欧美专区日韩视频| 欧美大片网站在线观看| 欧美日韩国产页| 亚洲欧美中文另类| 欧美色欧美亚洲高清在线视频| 欧美精品一区二区免费| 欧美精品videos另类日本| 久久久国产成人精品| 亚洲三级黄色在线观看| 黄色一区二区在线| 亚洲a成v人在线观看| 亚洲电影免费观看| 中文字幕在线精品| 国产69精品99久久久久久宅男| 欧美剧在线观看| 日韩av在线看| 亚洲深夜福利在线| 欧美xxxx18性欧美| 亚洲三级av在线| 久久久在线观看| 亚洲理论片在线观看| 国产精品黄视频| 亚洲美腿欧美激情另类| 亚洲成avwww人| 九九热精品在线| 国产成人精品在线视频| 欧美电影免费观看高清| 日韩在线免费av| 国产精品久久久久久久av大片| 欧美精品精品精品精品免费| 久久久久久亚洲精品不卡| 91视频8mav| 欧美精品激情在线观看| 中文字幕亚洲欧美日韩高清| 欧美激情va永久在线播放| 久久91精品国产91久久久| 国内精品久久久久久久| 日韩视频在线免费观看| 国产欧美va欧美va香蕉在| 欧美激情a∨在线视频播放| 欧美诱惑福利视频| 一区二区三区久久精品| 九九热这里只有精品6| 精品久久久久久亚洲国产300| 国产欧美精品在线| wwwwwwww亚洲| 欧美美女18p| 国产精品久久97| 欧美乱大交做爰xxxⅹ性3| 久久综合久久88| 性色av香蕉一区二区| 欧美另类暴力丝袜| 欧美成年人视频| 性欧美长视频免费观看不卡| www.亚洲免费视频| 国产精品自拍偷拍| 欧美激情一级二级| 97碰碰碰免费色视频| 国产精品一区电影| 日韩欧美国产成人| 国产精品盗摄久久久| 亚洲天堂日韩电影| 日韩欧美在线国产| 成人a免费视频| 国产精品旅馆在线| 91精品国产自产91精品| 国产一区二区三区视频| 国产精品久久久久aaaa九色| 在线视频欧美日韩| 国产在线精品一区免费香蕉| 久久精品夜夜夜夜夜久久| 成人久久一区二区| 亚洲xxxxx电影| 国产精品一区=区| 欧美日韩在线看| 久久99热精品这里久久精品| 亚洲欧美中文在线视频| 国产精品久久久久久久久久尿| 国产午夜精品麻豆| 色青青草原桃花久久综合| 国产精品爽黄69天堂a| 亚洲欧美激情视频| 亚洲跨种族黑人xxx| 国产一区二区在线免费视频| 久久久久久久影院| 久久午夜a级毛片| 亚洲热线99精品视频| 久久久免费在线观看| 国内揄拍国内精品少妇国语| 亚洲欧美一区二区激情| 欧美视频第一页| 精品自在线视频| 国内揄拍国内精品少妇国语| 国产三级精品网站| 亚洲综合国产精品| 欧美另类精品xxxx孕妇| 久久久久久久97| 亚洲精品美女久久久久| 久久夜色精品国产| 国产精品99久久99久久久二8| 日韩成人小视频| 最近免费中文字幕视频2019| 91老司机在线| 国产日本欧美在线观看| 国产精品久久久久久久天堂| 国产69精品久久久久99| 成人免费大片黄在线播放| 欧美激情中文字幕乱码免费|