idea?Maven?插件?docker-maven-plugin?打包docker鏡像上傳到遠(yuǎn)程倉庫的過程詳解
原理:
docker-maven-plugin調(diào)用一個 docker的api,進(jìn)行打包鏡像,tag標(biāo)簽,push到遠(yuǎn)程倉庫。
遠(yuǎn)程倉庫的密碼,在本地maven的setting.xml里配置一個server ,idea根據(jù)id可以獲取到遠(yuǎn)程倉庫的賬號,密碼
一、docker主機(jī)開啟docker 遠(yuǎn)程訪問API
Ubuntu:
vi /lib/systemd/system/docker.service
Centos7
vi /usr/lib/systemd/system/docker.service
找到ExecStart
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
修改完后 重置重啟
systemctl daemon-reload systemctl restart docker
防火墻開放端口:2375
驗(yàn)證
http://ip:2375/images/json 或curl http:/ip:2375/info
二、在docker主機(jī)配置遠(yuǎn)程倉庫地址,以便非https 也能訪問
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
],
"insecure-registries": ["registry1的IP地址:端口號","registry2的IP地址:端口號"]
}修改完后 重置重啟
systemctl daemon-reload systemctl restart docker
三、maven 配置 遠(yuǎn)程倉庫的賬號密碼
編輯 maven settings.xml文件
<server>
<id>local_docker</id>
<username>lulu</username>
<password>123456</password>
</server>四、pom 配置
<properties>
<project.name>bluetoothled</project.name>
<!-- 私有倉庫配置,需要settings.xml文件配合serverId對應(yīng)的倉庫服務(wù) 賬號密碼 -->
<docker.serverId>local_docker</docker.serverId>
<docker.registry>192.168.182.100:5000</docker.registry>
<docker.host>http://192.168.182.100:2375</docker.host>
</properties><build>
<plugins>
<!-- Srping Boot 打包工具 打包成可執(zhí)行的jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--打包后 復(fù)制jar包到指定文件目錄-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- 復(fù)制資源后的輸出目錄 -->
<outputDirectory>target</outputDirectory>
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- docker插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<!-- 私有倉庫配置,需要settings.xml文件配合serverId對應(yīng)的服務(wù)地址 -->
<serverId>${docker.serverId}</serverId>
<!-- docker私服地址 -->
<registryUrl>${docker.registry}</registryUrl>
<!-- 指定docker server的地址,該配置不需要本機(jī)安裝docker -->
<dockerHost>${docker.host}</dockerHost>
<imageName>${project.name}/${project.artifactId}:${project.version}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!-- docker的構(gòu)建目錄(構(gòu)建上下文),包含Dockerfile -->
<dockerDirectory>target</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<executions>
<!-- package之前清除上一次構(gòu)建的image -->
<execution>
<id>remove-image</id>
<phase>package</phase>
<goals>
<goal>removeImage</goal>
</goals>
<configuration>
<imageName>
${project.name}/${project.artifactId}
</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
</configuration>
</execution>
<execution>
<id>remove-tag-image</id>
<phase>package</phase>
<goals>
<goal>removeImage</goal>
</goals>
<configuration>
<imageName>
${docker.registry}/${project.name}/${project.artifactId}
</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
</configuration>
</execution>
<!-- 將docker:build綁定到package這個phase -->
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
<configuration>
<!-- imageName中若不指定tag,則會打上latest -->
<imageName>${project.name}/${project.artifactId}:${project.version}</imageName>
<!-- 可以使用<imageTags>標(biāo)簽打其他額外的tag -->
</configuration>
</execution>
<!-- 將docker:tag綁定到package這個phase -->
<execution>
<id>tag-image</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<!-- docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG] -->
<!-- images與IMAGE[:TAG]對應(yīng),必須在build階段已經(jīng)構(gòu)建了 -->
<image>${project.name}/${project.artifactId}:${project.version}</image>
<!-- newName與tag命令的第二個參數(shù)對應(yīng) -->
<newName>
${docker.registry}/${project.name}/${project.artifactId}:${project.version}
</newName>
</configuration>
</execution>
<execution>
<id>tag-image-latest</id>
<phase>deploy</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<!-- docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG] -->
<!-- images與IMAGE[:TAG]對應(yīng),必須在build階段已經(jīng)構(gòu)建了 -->
<image>${project.name}/${project.artifactId}:${project.version}</image>
<!-- newName與tag命令的第二個參數(shù)對應(yīng) -->
<newName>
${docker.registry}/${project.name}/${project.artifactId}:latest
</newName>
</configuration>
</execution>
<!-- 將docker:push綁定到deploy這個phase -->
<execution>
<id>push-image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>
${docker.registry}/${project.name}/${project.artifactId}:${project.version}
</imageName>
</configuration>
</execution>
<execution>
<id>push-image-latest</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>
${docker.registry}/${project.name}/${project.artifactId}:latest
</imageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>docker-maven-plugin詳細(xì)說明請參考http://www.dbjr.com.cn/article/224164.htm
五、在idea中命令控制臺中使用
創(chuàng)建鏡像
mvn clean package docker:build
推送鏡像到Registry
mvn clean package docker:build -DpushImage
推送指定tag的鏡像到Registry
mvn clean package docker:build -DpushImageTag
執(zhí)行 build、tag、push 操作
mvn deploy
如果想跳過 docker 某個過程時,只需要:
-DskipDockerBuild 跳過 build 鏡像
-DskipDockerTag 跳過 tag 鏡像
-DskipDockerPush 跳過 push 鏡像
-DskipDocker 跳過整個階段
到此這篇關(guān)于ideaMaven插件docker-maven-plugin打包docker鏡像上傳到遠(yuǎn)程倉庫的文章就介紹到這了,更多相關(guān)ideaMaven插件docker-maven-plugin內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
從java反編譯及字節(jié)碼角度探索分析String拼接字符串效率
這篇文章主要介紹了從java反編譯及字節(jié)碼角度探索分析String拼接字符串效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
springcloud使用Hystrix進(jìn)行微服務(wù)降級管理
這篇文章主要介紹了springcloud使用Hystrix進(jìn)行微服務(wù)降級管理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
基于Java中進(jìn)制的轉(zhuǎn)換函數(shù)詳解
下面小編就為大家?guī)硪黄贘ava中進(jìn)制的轉(zhuǎn)換函數(shù)詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
Java數(shù)據(jù)結(jié)構(gòu)與算法之樹(動力節(jié)點(diǎn)java學(xué)院整理)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法之樹的相關(guān)知識,最主要的是二叉樹中的二叉搜索樹,需要的朋友可以參考下2017-04-04
SpringBoot配置文件高級用法實(shí)戰(zhàn)分享
Spring Boot配置文件的優(yōu)先級是一個重要的概念,它決定了當(dāng)存在多個配置文件時,哪個配置文件中的配置將被優(yōu)先采用,本文給大家介紹了SpringBoot配置文件高級用法實(shí)戰(zhàn),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08
Spring如何動態(tài)自定義logback日志目錄詳解
這篇文章主要給大家介紹了關(guān)于Spring如何動態(tài)自定義logback日志目錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
詳解Spring MVC的異步模式(高性能的關(guān)鍵)
本篇文章主要介紹了詳解Spring MVC的異步模式(高性能的關(guān)鍵),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02

