Maven打包構(gòu)建Docker鏡像并推送到倉庫
對于開發(fā)完成的服務(wù)要發(fā)布至服務(wù)器Docker時,我剛學習了解Docker時構(gòu)建鏡像方式是將我的本地服務(wù)先通過maven打包稱為jar包,然后再上傳至我的服務(wù)器上,通過Dockerfile將其構(gòu)建成為鏡像。后來才了解了直接通過maven命令直接打包構(gòu)建的方式,以下是完成這一操作的步驟。
一,服務(wù)器Docker配置
修改daemon.json文件,開放端口2375
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
我的文件如下所示:
{
"insecure-registries":["10.xx.xx.xx:5000"],
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
{
"graph":"/Data/docker"
}
二,本地項目maven配置
2.1 pom.xml
在項目的pom文件引入docker-maven-plugin插件
<plugin>
<!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin -->
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
<!-- 當mvn執(zhí)行install操作的時候,執(zhí)行docker的build和push -->
<execution>
<id>build</id>
<phase>install</phase>
<goals>
<goal>build</goal>
<!-- <goal>push</goal>-->
</goals>
</execution>
</executions>
<configuration>
<!-- 連接到 帶docker環(huán)境的linux服務(wù)器 編譯image -->
<dockerHost>http://10.xx.xx.xx:2375</dockerHost>
<!--格式:私有倉庫/鏡像名稱:版本號, 如果要執(zhí)行push操作, 那么鏡像名稱必須為私有倉庫為前綴,不然無效。-->
<imageName>10.xx.xx.xx:5000/${project.artifactId}:${docker.tag}</imageName>
<!--指定dockerfile文件路徑-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!-- 指定jar包路徑,這里對應(yīng)Dockerfile中復制 jar 包到 docker 容器指定目錄配置,也可以寫到 Docokerfile 中 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!--跳過測試-->
<!-- push到 docker hub 開始 -->
<!-- serverId 這個是配置在maven的setting.xml中私服的登錄賬戶信息-->
<!-- <serverId>docker-hub</serverId>-->
<retryPushCount>3</retryPushCount>
<retryPushTimeout>2000</retryPushTimeout>
<registryUrl>10.xx.xx.xx:5000</registryUrl>
<!-- 是否自動推送到Registry Server, 建議手動推送 -->
<pushImage>${docker.push}</pushImage>
<!-- push到 docker hub 結(jié)束 -->
</configuration>
</plugin>
重要配置解釋:
- dockerHost:docker所在服務(wù)器的ip和開放的端口
- imageName:最終構(gòu)建的鏡像名稱
- dockerDirectory:本地dockerfile文件存放路徑
- targetPath:本地jar包生成位置
- registryUrl:服務(wù)器docker的倉庫地址
- pushImage:是否在構(gòu)建鏡像后同時推送到Docker倉庫
2.2 dockerfile
在本地項目的src/main下創(chuàng)建docker目錄,在docker目錄下創(chuàng)建dockerfile文件
FROM 10.xx.xx.xx:5000/java
VOLUME /tmp
ENV LANG C.UTF-8
COPY *.jar app.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Djava.util.Arrays.useLegacyMergeSort=true", "-jar","app.jar"]
2.3 驗證
此時,對該項目進行mvn install
時,相當于會同時進行docker:build的動作,將本地項目jar包構(gòu)建成鏡像到服務(wù)器中
2.4 統(tǒng)一dockerfile
如果每個服務(wù)的鏡像構(gòu)建沒有差異,可以將dockerfile從子項目中抽出來,就不需要在每一個項目模塊中都創(chuàng)建相同的文件,直接放在項目根路徑下就可以進行通用,同時修改pom配置文章來源:http://www.zghlxwxcb.cn/news/detail-454601.html
<!--指定dockerfile文件路徑-->
<dockerDirectory>${project.parent.basedir}/docker</dockerDirectory>
此時的dockerfile存儲位置為項目父級目錄的docker文件夾下。文章來源地址http://www.zghlxwxcb.cn/news/detail-454601.html
到了這里,關(guān)于Maven打包構(gòu)建Docker鏡像并推送到倉庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!