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

Java(SpringBoot)项目打包(构建)成`Docker`镜像的几种方式 小简选择的是最后一个,第一个也还行吧,但是Google那个不需要本地有Docker环境,第一个我还是开着魔法(梯子)打包的,最后一个挺好的。看情况选择的,很久没更新啦!越来越懒了,嘿嘿,下篇再见。 阅读详情

我们知道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生效:

systemctl daemon-reload    
systemctl restart docker 

IDEA测试docker连接

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

配置一下 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上。

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

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

 

总结

本文主要介绍如何在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安装

spring boot 应用发布到 docker (完整版) 原文出自:http://blog.anxpp.com/index.php/archives/1075/ Spring boot 非常适合做微服务,如果再加上 docker ,就就就完美了! By 鱼泡泡技术团队 spring boot 应用发布到 docker 完整版 一、概述 spring boot 和 docker 本身就不多介绍了,本文主要介绍使用dock... 阅读详情

相关推荐

SpringBoot项目打包部署实战:从Maven到服务器运行全解析

在Java企业级开发中,项目构建与部署是连接开发与生产环境的关键环节。其核心原理在于通过构建工具将源代码、依赖库和配置打包成可独立运行的单元,实现环境隔离与一致性。这一过程的技术价值在于解决了“在我机器上能跑”的经典难题,提升了软件交付的可靠性和效率。常见的应用场景包括将本地开发的SpringBoot应用部署到Linux服务器、云主机或容器平台。本文聚焦于使用Maven构建可执行Jar包(Fat Jar)这一主流方案,详细解析了从pom.xml配置、多环境配置分离到服务器部署的完整流程,并针对“依赖冲突”、

weixin_33721427的博客 273

Maven 插件之 docker-maven-plugin 的使用

在我们持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。我们可以绑定 Docker 命令到 Maven 各个阶段,我们可以把 Docker 分为 build、tag、push,然后分别绑定 Maven 的 package、deploy 阶段,此时,我们只需要执行。

m0_67400973的博客 1万+

Linux 从0到1部署Jenkins + Docker 实现CICD自动化实战详解

Linux 从0到1部署Jenkins + Docker 实现CICD自动化实战详解

congge 4761

docker-maven-plugin:自动构建Maven多模块的Docker镜像,并推送到Docker Registry或阿里云

目录 docker-maven-plugin 基本介绍 使用手册 Maven Goals命令 Maven命令执行顺序 Skip Docker Goals Bound to Maven Phases(跳过) Configuration 使用示例 注意事项(准备工作) Maven多模块工程 Pom配置-父工程 配置信息 Pom配置-子工程 编写Dockerfile文件制作镜像 前提: 推送镜像-Docker Registry Docker Registry 2.0搭建...

琦彦 1万+

docker-maven-plugin:用于运行和创建Docker映像的Maven插件

docker-maven-plugin 这是一个Maven插件,用于构建Docker映像和管理用于集成测试的容器。 它适用于Maven 3.0.5和Docker 1.6.0或更高版本。 目标 目标 描述 默认生命周期阶段 创建并启动容器 整合前测试 停止并销毁容器 整合后测试 建立影像 安装 注意进行重建和重新启动 将图像推送到注册表 部署 从本地Docker主机中删除图像 整合后测试 显示容器日志 将Docker构建存档附加到Maven项目 包 将图像保存到文件 创建一个卷以在容器之间共享数据 整合前测试 删除创建的卷 整合后测试 文献资料 [ ]包含所有内容的详细参考。 是此插件功能的高级概述,并提供了一个使用示例。 提供的目标和可能的配置参数。 在samples/下面,并包含示例设置,您可以将它们用作自己项目的蓝图。 具有此插件的发行历史。 说明了如何为该项目做出贡献。 请求请求受到高度赞赏! Docker API支持 最低要求版本为Docker 1.6( v1.18 ) docker docker:watch需要Docker 1.8.1( v

C#开发者必备:VSPD虚拟串口快速配置指南(附汉化教程)

本文为C#开发者提供了VSPD虚拟串口的快速配置与汉化教程。详细介绍了如何安装、汉化VSPD,并创建稳定的虚拟串口对,重点讲解了如何将其集成到C#开发工作流中,使用SerialPort类进行数据通信测试、协议模拟及故障排查,有效提升硬件通信开发的效率。

weixin_29224529的博客 258

Maven插件之docker-maven-plugin

本文介绍了使用docker-maven-plugin插件实现Maven工程自动化构建Docker镜像的方法

demon7552003的小本本 2059

利用BMC和KVM远程安装联想服务器Ubuntu 22.04的完整指南

本文提供了一份详尽的指南,介绍如何利用联想服务器的BMC(基板管理控制器)和KVM(键盘、视频、鼠标)重定向功能,远程安装Ubuntu 22.04 LTS操作系统。内容涵盖从准备工作(如获取BMC信息、配置Java环境)、登录BMC并启动远程控制台,到挂载ISO镜像、设置引导以及完成Ubuntu安装与后续配置的全过程。该方法能极大提升服务器部署与运维效率,尤其适用于无法物理接触服务器的场景。

p8q9r0的博客 621

docker部署之私服管理

一、简介  docker私服是存放镜像的本地仓库,类似于docker hub。不过私服是本地的仓库,方便自己公司部署管理由微服务打包成的docker镜像。  话不多说,通过一个例子,教你快速搭建docker私服。 二、registry搭建 docker搭建 如果没有安装虚拟机,可以参考文章《VMware安装Centos7并联网使用》 docker安装参考文章《还不会安装docker?这里帮你搞定》 启动docker $ systemctl start docker 拉取registry镜像 $ d

一半的博客 3420

AI驱动的研发流程:定义高度专业和系统化的规划基准

在人工智能(AI)浪潮席卷全球的今天,软件研发的范式正经历着一场深刻而迅速的变革。AI技术的渗透,从最初的辅助工具角色,正逐步演变为驱动整个研发流程的核心引擎。传统的研发流程和项目管理方法论,在面对AI带来的高效率、高智能以及高复杂性挑战时,显得力不从心。企业对快速交付高质量软件产品、有效控制风险、并保证全流程可追溯性的需求日益迫切。

形上得其象,形下合于数;阴阳自济,玄理自明。 2181

QGC二次开发实战指南(一):从零构建自定义地面站界面

本文详细介绍了QGC二次开发实战指南,从零开始构建自定义地面站界面。通过QT和QML技术结合MAVLINK协议,开发者可以打造适合特定业务场景的无人机监控系统,提升操作效率与用户体验。文章包含环境搭建、界面设计、数据绑定等完整开发流程,是QGC二次开发的实用教程。

weixin_28693683的博客 496

springboot项目构建docker image镜像

本地打包到docker仓库,通过Maven插件自动部署

lovebosom的博客 913

杰理芯片外挂Flash音乐播放功能避坑指南(附FAT文件系统配置)

本文详细解析了杰理芯片外挂Flash实现音乐播放功能的技术要点与常见问题,包括硬件连接、SPI驱动配置、FAT文件系统烧录及音乐播放集成等关键环节。特别针对Flash选型、FAT文件系统配置等易错点提供实用解决方案,帮助开发者高效完成嵌入式音频系统开发。

yhn45678901的博客 833

springboot 启动时could not exec java_Spring Boot在Docek中的部署

一、概述 spring boot 和 docker 本身就不多介绍了,本文主要介绍使用 docker-maven-plugin 插件,直接将 spring boot 应用一键发布到 docker 容器中。后期文章会首发于本专栏,也会不定时发放福利 ,欢迎关注,点赞JAVA高级进阶​zhuanlan.zhihu.com二、安装并配置 Docker 笔者用于测试的 Linux 为 Cent...

weixin_39772352的博客 1371

【从零开始玩量化1】AKShare: Python开源财经数据接口库

文章目录量化的第一步:数据AKShare介绍AKShare安装AKShare使用AKTools安装/使用结语 量化的第一步:数据 想要玩量化,第一步要有数据,这个数据可能是历史交易数据、财务数据、宏观数据等等。我们最终要做的,无非就是从数据中分析出有价值的信息,以便用来指导投资策略。 在获取数据的这条道路上,我走了很多弯路,尝试了各种方法:使用Tushare到放弃、自己写网易股票页面的爬虫,自己写申万行业数据的爬虫、自己写同花顺问财的爬虫、使用聚宽的免费数据API等等,直到最终,我发现了AKShare。 A

量化投资助手的博客 5万+

cesium 深度图(获取区域最高最低点位)

文章摘要: Cesium深度图技术可用于获取区域地形高程数据,核心实现步骤包括:1)通过离屏相机构建独立渲染环境,使用正交投影确保采样精度;2)采用离屏渲染技术获取均匀分布的地形点数据。关键技术点包含多边形外包矩形计算、后台相机配置(5km高度正交投影)、1024×1024像素离屏视图设置,以及深度数据解析(RGBA格式转换和三维坐标还原)。该方法避免了主视图干扰,可精准获取区域内地形高程信息,为填挖方分析等应用提供基础数据支持。

God's asylum的博客 283

eclipse springboot无法访问templates_Spring Boot在Docek中的部署

一、概述 spring boot 和 docker 本身就不多介绍了,本文主要介绍使用 docker-maven-plugin 插件,直接将 spring boot 应用一键发布到 docker 容器中。后期文章会首发于本专栏,也会不定时发放福利 ,欢迎关注,点赞JAVA高级进阶​zhuanlan.zhihu.com二、安装并配置 Docker 笔者用于测试的 Linux 为 Cent...

weixin_35398720的博客 94

【DRAM存储器五十四】LPDDR5介绍--PHY简介和LPDDR5训练流程

简述LPDDR5 PHY的基本功能和训练流程简介

highman110的博客 907

Docker从零到实战:镜像构建、容器部署与Compose编排全攻略

容器化技术已成为现代软件交付与部署的核心基石,它通过操作系统级虚拟化实现应用与运行环境的隔离,解决环境不一致、依赖冲突等经典问题。其核心原理是将应用及其依赖打包为只读镜像,运行为轻量容器,配合Dockerfile定义构建过程,实现一次构建、随处运行。这种技术显著提升开发、测试、生产环境的一致性,并简化了服务部署与迁移流程,被广泛应用于Web服务发布、中间件搭建、微服务编排及CI/CD流水线。本文从Linux环境安装配置出发,系统讲解镜像管理、容器操作、数据持久化及端口映射,并通过Web项目与前后端分离案例演

371

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

docker环境安装及springboot+docker在idea上实现一键部署远程服务器

以下均是在虚拟机上操作的环境 一、docker安装 1、检查内核版本,必须是3.10及以上(docker要求centos系统的内核版本高于3.10) uname ‐r #如果系统版本较低,则使用yum update更新内核 2、安装docker yum install docker 3、输入y确认安装 4、启动docker [root@localhost ~]# sys...

dijiangcuo3529的博客 500

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

spring boot 应用发布到 docker

一、概述 spring boot 和 docker 本身就不多介绍了,本文主要介绍使用 docker-maven-plugin 插件,直接将 spring boot 应用一键发布到 docker 容器中。 笔者 docker 部署于一台 Centos 7.2 的云服务器,换做 VM 虚拟机的 Linux 也是一样的。 用到的所涉及的软件版本皆为当前最新的,构建工具为 maven,如果使用的其...

千寻啊千寻 339

Docker实战:从零到一部署前后端项目到Linux服务器

容器化技术正成为现代软件交付的基础能力,其核心价值在于将应用与运行环境一同打包,从根本上解决环境不一致、部署流程繁琐等工程痛点。通过镜像(Image)与容器(Container)的抽象,Docker让环境变得可携带、可版本管理、可分享,并基于Linux内核的隔离机制实现秒级启动与低资源占用。这一技术在微服务架构、统一开发环境、CI/CD流水线及中间件快速部署等场景中广泛应用。本文以Linux服务器为实操环境,演示如何安装Docker引擎、拉取镜像、运行MySQL容器、编写Dockerfile构建自定义镜像,

weixin_33895657的博客 448

龙芯3B6000服务器Docker部署Jenkins全流程与避坑指南

在国产化替代浪潮中,龙芯平台的应用部署成为许多开发者和运维团队必须面对的课题。最近在龙芯3B6000服务器上搭建CI/CD环境时,发现关于Docker部署Jenkins的完整中文资料相对零散,特别是针对龙芯架构的适配和优化细节。本文将系统梳理在龙芯3B6000(LoongArch架构)上,从零开始使用Docker部署Jenkins的完整流程,涵盖环境准备、镜像拉取、容器配置、插件安装到项目构建的全链路实践,并提供一套可复现的避坑指南。 无论你是初次接触龙芯平台的开发者,还是需要在国产化环境中搭建自动化流水线

weixin_33907511的博客 373

spring boot 应用发布到 docker 完整版

一、概述     spring boot 和 docker 本身就不多介绍了,本文主要介绍使用 docker-maven-plugin 插件,直接将 spring boot 应用一键发布到 docker 容器中。     文末会提供源码 Git 地址。     笔者 docker 部署于一台 Centos 7.2 的云服务器,换做 VM 虚拟机的 Linux 也是一样的。

292

SpringBoot权限管理系统持续集成实战:基于Jenkins的RuoYi自动化部署解决方案

本文面向Java开发团队和DevOps工程师,针对RuoYi权限管理系统在多环境部署中面临的手动操作繁琐、环境一致性差、部署效率低下等痛点,提供一套完整的Jenkins持续集成与自动化部署解决方案。通过标准化流水线设计、容器化部署策略和智能监控机制,实现从代码提交到生产环境的全流程自动化。 ## 技术挑战与部署痛点分析 **问题一:手动部署的重复性劳动** 传统部署模式下,开发人员需要手动执行

gitblog_00276的博客 391
上一篇: vue前端使用Docker部署
下一篇: Docker安装Elasticsearch以及ik分词器
FLY-DUCK
博客等级 码龄17年 25粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值