SpringBoot项目使用docker-maven-plugin插件构建docker镜像以及推送到docker hub或docker registry私服

这篇具有很好参考价值的文章主要介绍了SpringBoot项目使用docker-maven-plugin插件构建docker镜像以及推送到docker hub或docker registry私服。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们知道docker可将应用程序和基础设施层隔离,可更快地打包、测试以及部署应用程序。本文主要介绍SpringBoot项目如何构建docker镜像以及推送到私服或者docker hub服务器上。

本文介绍的方式是使用docker-maven-plugin的方式构建SpringBoot的docker镜像以及推送到私服或docker hub服务器上。

Docker环境配置

本地环境配置

docker-maven-plugin 插件默认连接本地 Docker 地址为:localhost:2375,如果我们本地开发环境有docker环境并准备使用本地开发环境的docker,只需要先设置下本地开发环境的环境变量。

DOCKER_HOST=tcp://<host>:2375

服务器环境配置

如果使用CentOS服务器上的docker环境 (CentOS上安装docker环境),则需要在服务器上修改 docker 配置,开启允许远程访问 docker 的功能,开启方式很简单,修改 /usr/lib/systemd/system/docker.service 文件,ExecStart中加入如下内容:

-H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

docker-maven-plugin,Docker,Java开发笔记,经验分享,docker,spring boot,容器 

 修改好配置后,使用如下命令重启docker生效:

systemctl daemon-reload    
systemctl restart docker 

IDEA测试docker连接

IDEA 中我们可以测试服务器上的docker环境是否连接成功,打开 File->Settings->Build,Execution,Deployment->Docker ,然后配置一下 Docker 的远程连接地址:

docker-maven-plugin,Docker,Java开发笔记,经验分享,docker,spring boot,容器

配置一下 Docker 的地址,配置完成后,提示 Connection successful 信息,表示 Docker 已经连接上了。

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执行install操作的时候,执行docker的build和push -->
                    <execution>
                        <id>buildAndPush</id>
                        <phase>install</phase>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- 连接到 带docker环境的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>
                    <!-- 格式:私有仓库/镜像名称:版本号, 如果要执行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项目执行maven的install命令阶段,会执行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>
                    <!-- 格式:私有仓库/镜像名称:版本号, 如果要执行push操作, 那么镜像名称必须为私有仓库为前缀,不然无效。-->
                    <imageName>flyduck128/${project.artifactId}</imageName>
                    <!-- push到 docker hub 结束 -->

Dockerfile文件配置

Dockerfile文件放入项目的/src/main/docker目录,在上面的pom.xml中dockerDirectory节点中保持一致。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镜像制作逻辑如下:

  1. 项目的运行依赖 Java 环境,所以镜像基于 openjdk:8镜像来构建。
  2. 容器中创建/user/local/app目录,将打包的zip文件拷贝到容器中,并移动到/user/local/app目录,然后解压zip文件到/user/local/app目录。
  3. 将程序的端口通过EXPOSE暴露出来。
  4. 最后就是配置一下启动命令,由于我们springboot项目使用的zip打包发布的方式,所以启动的方式和默认springboot项目有些区别。这里我们单独将启动配置放入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上。

docker-maven-plugin,Docker,Java开发笔记,经验分享,docker,spring boot,容器

 项目install完成后,登录linux服务器,可以看到镜像已经构建成功:

docker-maven-plugin,Docker,Java开发笔记,经验分享,docker,spring boot,容器

登录docker hub网站,可以看到镜像已经推送到docker hub上: 

 docker-maven-plugin,Docker,Java开发笔记,经验分享,docker,spring boot,容器

总结

本文主要介绍如何在IDEA中将SpringBoot项目构建docker镜像并推送到私服或者docker hub上,本文通过使用docker-maven-plugin插件的方式,连接docker环境的linux服务器构建docker镜像,并推送到docker hub上。如果需要推送到私服上,只需要将pom.xml中推送的配置修改私服的配置即可。示例代码已经上传至Gitee上,感兴趣的小伙伴可以直接获取查看。

参考

CentOS上安装docker环境

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上 - 码农教程

详细docker-maven-plugin使用方法_服务器_网站技巧 - 编程客栈

私服docker registry server安装文章来源地址https://www.toymoban.com/news/detail-598591.html

到了这里,关于SpringBoot项目使用docker-maven-plugin插件构建docker镜像以及推送到docker hub或docker registry私服的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot配置docker-maven-plugin实现构建与推送镜像

    1、优化前: 目前构建docker镜像都是先执行mvn clean package打包之后,将target目录下的jar包放到服务器上,再通过Dockerfile去build成镜像,步骤多,而且每次都需要登录服务器进行操作,十分麻烦。 2、优化后: 在Spring Boot项目中引入docker-maven-plugin进行相关配置,之后就可以在项目

    2024年02月15日
    浏览(49)
  • Spring Boot配置docker-maven-plugin实现构建与推送镜像(Dockerfile)

    0、前提:docker、 maven、java均已安装,docker 镜像私服均已设置网络也开通 本文基于Docker进行构建,也可以指定构建信息到 POM 中构建,大家自行搜索 1、首先是一些网络和docker相关配置的打开 2、针对maven 的 setting.xml 文件的修改 3、项目的pom文件,引入docker maven plugin 及相关配

    2024年02月07日
    浏览(42)
  • idea打包docker镜像时出现“Failed to execute goal com.spotify:docker-maven-plugin:1.2.2:build (build-image) “

     问题解决参考地址 解决方法1:先看第一张图片,一开始我也是不知道什么原因导致的,后来看到build时获取的ProgressMessage信息都是空的,然后一点点排查,然后发现是镜像命名的问题的,镜像命名不允许使用驼峰命令。   解决方法2:可能是docker 上没有内存了,也会报错。

    2024年02月11日
    浏览(54)
  • 【Maven】SpringBoot项目使用maven-assembly-plugin插件多环境打包

    1.创建SpringBoot项目并在pom.xml文件中添加maven-assembly-plugin配置 2.创建 在src/main/assembly目录下创建assembly.xml文件 3.在src/main/bin创建在linux环境启动jar包的脚本 4.配置application.yml文件 5.启动项目 6.打包 7.打包后的目录结构 8.上传到linux服务器并启动jar包 9.调用接口测试 10.源码地址

    2024年02月12日
    浏览(42)
  • 【SpringBoot】Maven 版本管理与 flatten-maven-plugin 插件的使用及分析

    IntelliJ IDEA 2021.3 JDK 1.8.0_301 Apache Maven 3.8.1 org.codehaus.mojo:versions-maven-plugin 1.2.7 https://www.mojohaus.org/flatten-maven-plugin/ 自 Maven 3.5.0-beta-1 开始,可以使用 ${revision}, ${sha1} and/or ${changelist} 这样的变量作为版本占位符。 像这样: 或者像这样: 可以使用这样的命令: 缺点: Install / D

    2024年02月12日
    浏览(43)
  • SpringBoot使用git-commit-id-maven-plugin打包

    git-commit-id-maven-plugin 是一个maven 插件,用来在打包的时候将git-commit 信息打进jar中。 这样做的好处是可以将发布的某版本和对应的代码关联起来,方便查阅和线上项目的维护。至于它的作用,用官方说法,这个功能对于大型分布式项目来说是无价的。 你是否经常遇到这样的问

    2024年02月21日
    浏览(29)
  • 【项目实战】使用Maven插件(jacoco-maven-plugin),实现生成代码覆盖率报告

    jacoco-maven-plugin是一个Maven插件,用于生成代码覆盖率报告。 它可以帮助您了解您的代码中哪些部分已经被测试覆盖,哪些部分需要更多的测试。 注意,jacoco-maven-plugin 需要 Java 1.5 或更高版本才能运行。 要使用jacoco-maven-plugin,需要在Maven项目中添加以下配置:

    2024年02月15日
    浏览(45)
  • Maven项目解决cannot resolve plugin maven-deploy-plugin:2.7

    导入maven项目后,编辑的时候提示一些插件加载失败!大概率是你的网络有问题,插件下载失败。 如下图:(网络突然好了,我想截图但是没有复现,用网上找到的截图代替,明白意思就行) 其余的情况也可以用同样的方式解决。 问题的原因基本上就是网络问题导致的下载

    2024年02月14日
    浏览(44)
  • SpringBoot:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile

     首先以上就是我的报错问题,我这个出现的情况就是刚刚创建一个springboot项目,还没写任何东西,刚打算运行一下,就产生了这个问题,在网上也看了很多文章,有人说可能是jdk版本和自己本地的版本不对,大家也可以试一下,先把jdk版本的地方都修改正确。但是这个对于

    2024年02月13日
    浏览(64)
  • 使用maven创建springboot项目

    命令行或者idea、eclipse快捷创建也可以 访问loalhost:8080,因为没有其他接口所以报错 新建HelloController.java 重新启动项目访问

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包