我們知道docker可將應用程序和基礎設施層隔離,可更快地打包、測試以及部署應用程序。本文主要介紹SpringBoot項目如何構建docker鏡像以及推送到私服或者docker hub服務器上。
本文介紹的方式是使用docker-maven-plugin的方式構建SpringBoot的docker鏡像以及推送到私服或docker hub服務器上。
Docker環(huán)境配置
本地環(huán)境配置
docker-maven-plugin 插件默認連接本地 Docker 地址為:localhost:2375,如果我們本地開發(fā)環(huán)境有docker環(huán)境并準備使用本地開發(fā)環(huán)境的docker,只需要先設置下本地開發(fā)環(huán)境的環(huán)境變量。
DOCKER_HOST=tcp://<host>:2375
服務器環(huán)境配置
如果使用CentOS服務器上的docker環(huán)境?(CentOS上安裝docker環(huán)境),則需要在服務器上修改 docker 配置,開啟允許遠程訪問 docker 的功能,開啟方式很簡單,修改 /usr/lib/systemd/system/docker.service 文件,ExecStart中加入如下內容:
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
?
?修改好配置后,使用如下命令重啟docker生效:
systemctl daemon-reload
systemctl restart docker
IDEA測試docker連接
IDEA 中我們可以測試服務器上的docker環(huán)境是否連接成功,打開?File->Settings->Build,Execution,Deployment->Docker
?,然后配置一下 Docker 的遠程連接地址:
配置一下 Docker 的地址,配置完成后,提示 Connection successful 信息,表示 Docker 已經(jīng)連接上了。
SpringBoot項目引入docker-maven-plugin插件
pom.xml配置
項目中引入docker-maven-plugin插件,在pom.xml引入插件并做相應的配置:
<project>
<!-- other setting-->
<build>
<plugins>
<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>buildAndPush</id>
<phase>install</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 連接到 帶docker環(huán)境的linux服務器 編譯image -->
<dockerHost>http://192.168.**.***:2375</dockerHost>
<!-- push到 docker hub 開始 -->
<!-- serverId 這個是配置在maven的setting.xml中私服的登錄賬戶信息-->
<serverId>docker-hub</serverId>
<retryPushCount>1</retryPushCount>
<retryPushTimeout>2000</retryPushTimeout>
<registryUrl>https://index.docker.io/v1/</registryUrl>
<!-- 格式:私有倉庫/鏡像名稱:版本號, 如果要執(zhí)行push操作, 那么鏡像名稱必須為私有倉庫為前綴,不然無效。-->
<imageName>flyduck128/${project.artifactId}</imageName>
<!-- push到 docker hub 結束 -->
<!-- 指定tag版本 -->
<imageTags>
<imageTag>v1.0</imageTag>
</imageTags>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!-- optionally overwrite tags every time image is built with docker:build -->
<forceTags>true</forceTags>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.zip</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
Docker命令可以綁定到maven各階段命令中。該示例配置中我們在execution上將docker的build和push命令綁定在了maven的install階段命令中。當springboot項目執(zhí)行maven的install命令階段,會執(zhí)行docker的build和push命令。
如果需要推送到docker hub或者私服,還需要在本地的maven目錄的setting.xml中配置相應的server:
<server>
<id>docker-hub</id>
<username>flyduck128</username>
<password>***</password>
<configuration>
<email>***@qq.com</email>
</configuration>
</server>
如果我們不需要推送到docker hub或者私服,可以不配置docker的push命令以及相應的推送配置:
<!-- push到 docker hub 開始 -->
<!-- serverId 這個是配置在maven的setting.xml中私服的登錄賬戶信息-->
<serverId>docker-hub</serverId>
<retryPushCount>1</retryPushCount>
<retryPushTimeout>2000</retryPushTimeout>
<registryUrl>https://index.docker.io/v1/</registryUrl>
<!-- 格式:私有倉庫/鏡像名稱:版本號, 如果要執(zhí)行push操作, 那么鏡像名稱必須為私有倉庫為前綴,不然無效。-->
<imageName>flyduck128/${project.artifactId}</imageName>
<!-- push到 docker hub 結束 -->
Dockerfile文件配置
Dockerfile文件放入項目的/src/main/docker目錄,在上面的pom.xml中dockerDirectory節(jié)點中保持一致。Dockerfile文件配置如下:
FROM openjdk:8
MAINTAINER flyduck 'flyduck@flyduck.com'
ENV APP_HOME=/usr/local/app
ENV PROJECT_HOME=${APP_HOME}/springboot-docker-1.0-SNAPSHOT
COPY springboot-docker-1.0-SNAPSHOT.zip springboot-docker.zip
RUN mkdir -p ${APP_HOME} && mv springboot-docker.zip ${APP_HOME}
RUN cd ${APP_HOME} && unzip springboot-docker.zip && rm -rf springboot-docker.zip
RUN chmod 777 ${PROJECT_HOME}/bin/dockerrun.sh
EXPOSE 7003
ENTRYPOINT sh ${PROJECT_HOME}/bin/dockerrun.sh
Dockerfile鏡像制作邏輯如下:
- 項目的運行依賴 Java 環(huán)境,所以鏡像基于 openjdk:8鏡像來構建。
- 容器中創(chuàng)建/user/local/app目錄,將打包的zip文件拷貝到容器中,并移動到/user/local/app目錄,然后解壓zip文件到/user/local/app目錄。
- 將程序的端口通過EXPOSE暴露出來。
- 最后就是配置一下啟動命令,由于我們springboot項目使用的zip打包發(fā)布的方式,所以啟動的方式和默認springboot項目有些區(qū)別。這里我們單獨將啟動配置放入dockerrun.sh文件,然后通過運行dockerrun.sh文件的方式啟動程序。
dockerrun.sh運行程序配置如下:
# app home
APP_HOME=/usr/local/app/springboot-docker-1.0-SNAPSHOT
# java jar
PROJECT_NAME=${APP_HOME}/springboot-docker-1.0-SNAPSHOT.jar
#spring init load application properties or yml
CONF_FILE=${APP_HOME}/config/application.yml
# java opts.
JAVA_OPTS="-Xms64m -Xmx64m -Xmn64m"
#pid file
PID_CONF=${APP_HOME}/pid/process.pid
java ${JAVA_OPTS} -Djava.ext.dirs=${APP_HOME}/lib:$JAVA_HOME/jre/lib/ext -Dspring.config.location=${CONF_FILE} -jar ${PROJECT_NAME}
構建鏡像以及推送到服務器
在IDEA中直接點擊install,會先打包springboot項目,然后在dockerHost配置的服務器上構建鏡像,最后推送到registerUrl配置的docker私服或者hub docker上。
?項目install完成后,登錄linux服務器,可以看到鏡像已經(jīng)構建成功:
登錄docker hub網(wǎng)站,可以看到鏡像已經(jīng)推送到docker hub上:?
?
總結
本文主要介紹如何在IDEA中將SpringBoot項目構建docker鏡像并推送到私服或者docker hub上,本文通過使用docker-maven-plugin插件的方式,連接docker環(huán)境的linux服務器構建docker鏡像,并推送到docker hub上。如果需要推送到私服上,只需要將pom.xml中推送的配置修改私服的配置即可。示例代碼已經(jīng)上傳至Gitee上,感興趣的小伙伴可以直接獲取查看。
參考
CentOS上安裝docker環(huán)境
Maven 插件之 docker-maven-plugin 的使用
Github上docker-maven-plugin源碼地址
docker與Spring boot的集成:docker-maven-plugin使用
Maven 插件之 docker-maven-plugin 的使用
docker-maven-plugin的github地址
使用Maven插件構建SpringBoot項目,生成Docker鏡像push到DockerHub上 - 碼農(nóng)教程
詳細docker-maven-plugin使用方法_服務器_網(wǎng)站技巧 - 編程客棧文章來源:http://www.zghlxwxcb.cn/news/detail-598591.html
私服docker registry server安裝文章來源地址http://www.zghlxwxcb.cn/news/detail-598591.html
到了這里,關于SpringBoot項目使用docker-maven-plugin插件構建docker鏡像以及推送到docker hub或docker registry私服的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!