最近在將應(yīng)用部署到容器平臺(tái),需要在打包時(shí)生成docker鏡像,在網(wǎng)上首先搜到了docker-maven-plugin這個(gè)插件,但使用起來(lái)很麻煩,在maven和dockfile都要做很多額外的配置。后來(lái)在官方Github看到作者推薦使用dockerfile-maven-plugin這個(gè)新的插件,于是替換成這個(gè),但這個(gè)插件在網(wǎng)上的相關(guān)資料較少。在此記錄一哈
pom配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
< plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-deploy-plugin</ artifactId > < configuration > < skip >true</ skip > </ configuration > </ plugin > <!-- Dockerfile maven plugin --> < plugin > < groupId >com.spotify</ groupId > < artifactId >dockerfile-maven-plugin</ artifactId > < version >1.4.10</ version > < executions > <!--<execution>--> <!--<id>default</id>--> <!--<goals>--> <!--<!–如果package時(shí)不想用docker打包,就注釋掉這個(gè)goal–>--> <!--<goal>build</goal>--> <!--<goal>push</goal>--> <!--</goals>--> <!--</execution>--> </ executions > < configuration > < repository >docker-reg.****.com/feedback/${artifactId}-${profiles.active}</ repository > < tag >${project.version}</ tag > < buildArgs > < JAR_FILE >target/${project.build.finalName}.jar</ JAR_FILE > </ buildArgs > </ configuration > </ plugin > |
setting.xml配置
這個(gè)文件在maven目錄下,可以 cd $M2_HOME/conf 進(jìn)入。
在pluginGroups中增加一個(gè)com.spotify
1
2
3
|
< pluginGroups > < pluginGroup >com.spotify</ pluginGroup > </ pluginGroups > |
登錄情況
需要登錄
關(guān)于如何驗(yàn)證登錄,坑比較多。如果你在habor設(shè)置你的倉(cāng)庫(kù)為私有,那必須要登錄,按照官方配置就可以,如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< plugin > < groupId >com.spotify</ groupId > < artifactId >dockerfile-maven-plugin</ artifactId > < version >${version}</ version > < configuration > < username >repoUserName</ username > < password >repoPassword</ password > < repository >${docker.image.prefix}/${project.artifactId}</ repository > < buildArgs > < JAR_FILE >target/${project.build.finalName}.jar</ JAR_FILE > </ buildArgs > </ configuration > </ plugin > |
無(wú)需登錄
但因?yàn)槲遗渲昧嗽趉8s自動(dòng)從habor獲取鏡像,所以設(shè)置了公開(kāi),這種情況下無(wú)需登錄,但有時(shí)也會(huì)執(zhí)行失敗,此時(shí)你需要?jiǎng)h掉~(yú)/.docker/config.json中的這個(gè)網(wǎng)站的配置。
1
2
3
4
5
6
7
8
9
10
11
12
|
cat ~/.docker/config.json { "auths" : { "192.168.87.110:5000" : { "auth" : "YWRtaW46JKDtaW4xMjM=" }(刪掉此處) }, "HttpHeaders" : { "User-Agent" : "Docker-Client/18.09.0 (linux)" } } |
確認(rèn)這里為空后,如果還報(bào)錯(cuò),可以再執(zhí)行一次docker login … ,這樣就成功了
maven多模塊情況配置
在多模塊的情況下,打包插件一定要放置在Application子模塊中,如果放在root pom中會(huì)導(dǎo)致打包不成功。
如下情況:
- -app
- ? -common
- ? -file
- ? -application
- ? -pom.xml
這種情況,我們可以分兩個(gè)步驟
第一步先打包全部模塊,在根目錄下
1
|
mvn clean package -P test |
第二步在要打包鏡像的子模塊中執(zhí)行deploy命令
1
|
mvn dockerfile:build dockerfile:push |
這樣,就能成功將子模塊打包為鏡像并push。
jenkins
在本地測(cè)試完之后,要將這個(gè)流程弄到j(luò)enkins,做一些配置。
jenkins服務(wù)器安裝docker
此處不再贅述,maven的setting.xml等配置和本地一樣。
修改jenkins項(xiàng)目配置
此時(shí),由于項(xiàng)目需要打包兩次(一次在根目錄打包,第二次在子目錄打包為鏡像),所以需要執(zhí)行兩次mvn命令,和之前不一樣,所以將第一次的執(zhí)行還是使用jenkins的Build模塊。
第二次的執(zhí)行放置在post steps中通過(guò)命令在執(zhí)行
1
2
|
cd 子模塊目錄 mvn clean package -P $ env dockerfile:build dockerfile:push |
這樣,就可以完成打包并制作鏡像的步驟了
到此這篇關(guān)于dockerfile-maven-plugin使用指南小結(jié)的文章就介紹到這了,更多相關(guān)dockerfile-maven-plugin使用 內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/acingdreamer/article/details/102959852