还在手动部署SpringBoot应用?试试这个自动化插件!

还在用Jenkins?试试这款阿里出品的IDEA插件,部署项目贼香 阅读详情

摘要

最近又发现了一款好用的Maven插件,fabric8io出品的docker-maven-plugin,可以把SpringBoot应用方便的部署到Docker容器中去。该插件可以实现打包镜像、推送到镜像仓库、运行应用等一系列操作,本文将对其用法进行详细介绍,希望对大家有所帮助!

安装私有镜像仓库

由于之后我们需要推送到私有镜像仓库,我们预先安装好,使用的是Docker公司开发的私有镜像仓库Registry。

  • 下载Registry的Docker镜像;
docker pull registry:2
复制代码
  • 使用Docker容器运行Registry服务,需要添加环境变量REGISTRY_STORAGE_DELETE_ENABLED=true开启删除镜像的功能;
docker run -p 5000:5000 --name registry2 \
--restart=always \
-e REGISTRY_STORAGE_DELETE_ENABLED="true" \
-d registry:2
复制代码
  • 修改Docker Daemon的配置文件,文件位置为/etc/docker/daemon.json,由于Docker默认使用HTTPS推送镜像,而我们的镜像仓库没有支持,所以需要添加如下配置,改为使用HTTP推送;
{
  "insecure-registries": ["192.168.3.101:5000"]
}
复制代码
  • 最后使用如下命令重启Docker服务。
systemctl daemon-reload && systemctl restart docker
复制代码

镜像仓库可视化

由于私有镜像仓库管理比较麻烦,而docker-registry-ui有专门的页面可以方便地管理镜像,所以我们安装它来管理私有镜像仓库。

  • 下载docker-registry-ui的Docker镜像;
docker pull joxit/docker-registry-ui:static
复制代码
  • 使用Docker容器运行docker-registry-ui服务;
docker run -p 8280:80 --name registry-ui \
--link registry2:registry2 \
-e REGISTRY_URL="http://registry2:5000" \
-e DELETE_IMAGES="true" \
-e REGISTRY_TITLE="Registry2" \
-d joxit/docker-registry-ui:static
复制代码
  • 我们先来试试私有镜像仓库是否可用,首先下载一个测试用的镜像busybox;
docker pull busybox
复制代码
  • 给镜像busybox打上私有仓库的标签,并设置版本为v1.0;
docker tag busybox 192.168.3.101:5000/busybox:v1.0
复制代码
  • 之后推送到私有镜像仓库去;
docker push 192.168.3.101:5000/busybox:v1.0
复制代码

 

 

插件使用

fabric8io出品的docker-maven-plugin是一款集Docker镜像管理和容器管理于一身的插件,动动手指就可以把我们的SpringBoot应用部署到Docker容器中了,非常好用,下面来讲讲它的用法。

在IDEA中正确使用Maven插件

  • 一般我们如果没有使用IDEA,都是手敲Maven命令来执行,在IDEA中我们只要双击右侧面板中的Maven命令即可执行,非常方便。

 

 

  • 如果你想使用自定义命令的话,可以使用Execute Maven Goal这个功能,这里我使用的是mvn clean package命令。

 

 

构建镜像

  • 要想使用docker-maven-plugin,需要在pom.xml中添加该插件;
<build>
    <plugins>
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.33.0</version>
            <configuration>
                <!-- Docker 远程管理地址-->
                <dockerHost>http://192.168.3.101:2375</dockerHost>
                <!-- Docker 推送镜像仓库地址-->
                <pushRegistry>http://192.168.3.101:5000</pushRegistry>
                <images>
                    <image>
                        <!--由于推送到私有镜像仓库,镜像名需要添加仓库地址-->
                        <name>192.168.3.101:5000/mall-tiny/${project.name}:${project.version}</name>
                        <!--定义镜像构建行为-->
                        <build>
                            <!--定义基础镜像-->
                            <from>java:8</from>
                            <args>
                                <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                            </args>
                            <!--定义哪些文件拷贝到容器中-->
                            <assembly>
                                <!--定义拷贝到容器的目录-->
                                <targetDir>/</targetDir>
                                <!--只拷贝生成的jar包-->
                                <descriptorRef>artifact</descriptorRef>
                            </assembly>
                            <!--定义容器启动命令-->
                            <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                            <!--定义维护者-->
                            <maintainer>macrozheng</maintainer>
                        </build>
                    </image>
                </images>
            </configuration>
        </plugin>
    </plugins>
</build>
复制代码
  • 我们构建镜像之前需要先将项目打包,然后再构建,否则会出错,直接使用如下命令即可;
mvn package docker:build
复制代码
  • 打包完成后就可以在我们的服务器上看到这个镜像了;
[root@linux-local mydata]# docker images
REPOSITORY                                     TAG                 IMAGE ID            CREATED             SIZE
192.168.3.101:5000/mall-tiny/mall-tiny-fabric   0.0.1-SNAPSHOT      6b8bc6faeb0b        9 seconds ago       680MB
复制代码
  • 当然我们也可以设置使用package命令时直接打包镜像,修改pom.xml,在<plugin>节点下添加<executions>配置即可;
<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.33.0</version>
    <executions>
        <!--如果想在项目打包时构建镜像添加-->
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
</plugin>
复制代码
  • 使用不同的Maven插件构建Docker镜像时方法往往不同,这时候直接使用Dockerfile来构建会比较好,我们先写好Dockerfile文件并放到项目根目录下;
# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前maven目录生成的文件复制到docker容器的/目录下
COPY maven /
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-fabric-0.0.1-SNAPSHOT.jar"]
# 指定维护者的名字
MAINTAINER macrozheng
复制代码
  • 然后修改pom.xml文件,将<build>节点配置替换为如下内容,仅需配置Dockerfile所在目录即可。
<build>
     <dockerFileDir>${project.basedir}</dockerFileDir>
</build>
复制代码

推送到镜像仓库

  • 接下来我们使用docker:push命令即可把镜像推送到私有镜像仓库;
mvn docker:push
复制代码
  • 之后在我们的私有镜像仓库就可以看到镜像了;

 

 

 

操作容器

  • docker-maven-plugin不仅可以操作镜像,还可以操作容器,比如我们以前需要使用如下Docker命令来运行容器;
docker run -p 8080:8080 --name mall-tiny-fabric \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-fabric/logs:/var/logs \
-d 192.168.3.101:5000/mall-tiny/mall-tiny-fabric:0.0.1-SNAPSHOT
复制代码
  • 现在我们只需在插件中配置即可,在<image>节点下添加<run>节点可以定义容器启动的行为:
<!--定义容器启动行为-->
<run>
    <!--设置容器名,可采用通配符-->
    <containerNamePattern>${project.artifactId}</containerNamePattern>
    <!--设置端口映射-->
    <ports>
        <port>8080:8080</port>
    </ports>
    <!--设置容器间连接-->
    <links>
        <link>mysql:db</link>
    </links>
    <!--设置容器和宿主机目录挂载-->
    <volumes>
        <bind>
            <volume>/etc/localtime:/etc/localtime</volume>
            <volume>/mydata/app/${project.artifactId}/logs:/var/logs</volume>
        </bind>
    </volumes>
</run>
复制代码
  • 之后直接使用docker:start命令即可启动了;
mvn docker:start
复制代码
[root@linux-local mydata]# docker ps
CONTAINER ID        IMAGE                                                         COMMAND                  CREATED             STATUS              PORTS                                            NAMES
95ce77c0394b        192.168.3.101:5000/mall-tiny/mall-tiny-fabric:0.0.1-SNAPSHOT   "java -jar /mall-tin…"   32 seconds ago      Up 31 seconds       0.0.0.0:8080->8080/tcp                           mall-tiny-fabric
复制代码
  • 停止容器使用docker:stop命令即可;
mvn docker:stop
复制代码
  • 删除容器使用docker:remove命令,是不是很方便!
mvn docker:remove

 

Jenkins+gitee实现springboot项目自动化部署 自动化部署 一、引言 说在前面 在实际开发中,我们经常要一边开发一边测试(不是开发人员对自己代码的单元测试,而是开发人员将代码提交合并后,由测试人员测试);或者前后端分离后,经常会修改接口,这些情况都会涉及到频繁的打包部署。在智慧的劳动人民面前,繁琐重复的工作必将消失在历史的舞台上,当手动部署已成昨日,舞台上的聚光灯将聚焦在自动化部署上。 回顾历史 传统的打包部署虽已成风,但不妨碍我们缅怀过去,回顾我们曾经手动部署的青春。手动打包常规步骤: 1.提交代码 2.问一下同组小伙伴有没有要提交.. 阅读详情

相关推荐

SpringBoot应用在K8S环境下的部署

在K8S上部署和在Docker上部署有很多相似之处。K8S上很多部署用的脚本,和使用Docker Compose的部署脚本非常类似。如果你之前用过Docker,那么你就可以轻松上手K8S!

m0_64132144的博客 1534

Maven项目中在xxx.xml ,xxx.properties 中为什么能使用 ${} 来引用pom文件中的属性

--------------------20180927----------------- .xml和 .properties 文件都能配置属性。 .properties文件主要是key-value键值对形式,只需要简单的getProperty(key)方法或者setProperty(key,value)方法就可以读取或者写入内容,如果只是用来进行属性配置,使用.properties文件会比较方便。 参考:XML与Properties文件区别 --------------------20180524-.

qq_44885775的博客 2462

【异常】Maven提示错误The expression ${artifactId} is deprecated. Please use ${project.artifactId} instead.

在使用Maven构建的Web项目时,遇到了一些内容提示,如下。

奶爸的编程之路,也就一周冷个三天 3107

maven(四)-maven属性

Maven的六类属性 1.内置属性 主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本 2.POM属性 用户可以使用该属性引用POM文件中对应元素的值,常用的POM属性包括: ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java ${project.bui...

haoxin963的专栏 593

还在手动部署springboot项目?不妨试试它,让你部署项目飞起来!

简单来说,docker是个好东西! 目录 docker 介绍 安装 docker Ubuntu 安装 docker CentOS 安装 docker 通过脚本安装 拉取 java 环境 创建 springboot 项目 打包 springboot 到 docker docker 查看容器的日志 查看 log4j2 输出问文件日志 docker 介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器

9.冄2.7.號的博客 242

Spring Boot Maven插件使用详解

主要为大家详细介绍了Spring Boot Maven插件使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

idea中使用maven打包的outputDirectory标签使用${user dir}和{project.artifactId}的解释

idea中使用maven打包的outputDirectory标签使用${user dir}和{project.artifactId}的解释

m0_51113232的博客 3151

CMOS锁相环核心:四种鉴频鉴相器(PFD)结构深度剖析与选型指南

本文深入剖析了CMOS锁相环中四种鉴频鉴相器(PFD)的结构与性能,包括传统RS触发器型、非时钟型、预充电型和边沿触发型PFD。通过详细的电路分析、实测数据和工程案例,提供了PFD选型的实用指南,帮助工程师根据速度、功耗和精度需求选择最优方案,提升锁相环设计效率。

weixin_42530458的博客 587

${project.artifactId}: bad substitution

对springboot启动脚本进行jvm参数调优,直接部署启动脚本报这个错误。排除语法、格式等问题错误,测试是没有经过maven打包直接部署原文件导致的。maven -clean -->> maven -package 后再替换启动脚本即可。

Suni1ShIne的博客 381

Speedtree学习笔记(案例)——拥有多种材质的植物如何导入使用(以草为例)

注:Speedtree无论保存还是导入模型其存储路径不可有中文。 第一步拆分草的模型 根据所需的材质去拆分(例:假若草的果实,茎秆和叶子是不同的材质那么就需拆分为三份;假若画的全部颜色及材质一样就没有必要去拆分模型) 第二步导入草的模型 在Mesh面板中依次导入草的模型——Do nothing additional right now 第三步扩大草的生长区域范围(可省略)...

L人青的博客 5722

基于STM32的无人机智能避障与路径规划系统设计

本文详细介绍了基于STM32的无人机智能避障与路径规划系统设计,涵盖硬件选型、传感器组合、软件架构及算法实现。通过多传感器数据融合和改进的VFH+算法,系统在复杂环境中实现92%以上的避障成功率。STM32微控制器的实时性和低功耗特性为无人机自主导航提供了可靠保障,适用于工业巡检、仓储物流等场景。

blockchain9miner的博客 877

还在手动部署SpringBoot应用?试试这个自动化插件

最近又发现了一款好用的Maven插件,fabric8io出品的docker-maven-plugin,可以把SpringBoot应用方便的部署到Docker容器中去。该插件可以实现打包镜像、推送到镜像仓库、运行应用等一系列操作,本文将对其用法进行详细介绍,希望对大家有所帮助! 安装私有镜像仓库 由于之后我们需要推送到私有镜像仓库,我们预先安装好,使用的是Docker公司开发的私有镜像仓库Registry。 下载Registry的Docker镜像; docker pull registry:2 .

m0_67505824的博客 653

CRC_16---ModBus 计算方法及代码实现

1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1; 2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。 计算步骤为: (1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器; (2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器; (3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器

1万+

还在使用第三方Docker插件?SpringBoot官方插件真香!

为了方便为SpringBoot应用构建Docker镜像,我们经常会使用Maven插件来打包镜像。之前一直使用的是第三方插件,有spotify和fabric8出品的两种docker-mav...

macrozheng的专栏 3082

Linux:安装Debian最新10.x操作系统(超详细)

安装Debian最新10.x操作系统安装Debian最新10.x操作系统1.下载Debian镜像2. 镜像安装引导启动页面,选择图形化安装:选择语言、时区,选中后点击continue:选择键盘模式:配置Hostname主机名,设置Root密码创建普通用户名和密码,进入磁盘分区步骤,选择“所有文件放在同一个分区”确认分区信息磁盘配置完,进入软件安装模块:选择源:进入软件包配置,等待配置结束根据需要选择软件包安装3. 安装完成重启后登录使用 安装Debian最新10.x操作系统 1.下载Debian镜像 下载D

HowieXue 薛永浩的博客 3万+

Python 安装 PyTorch(GPU)详细教程

本章教程,介绍如何安装PyTorch GPU版本的具体教程。

猿小白的博客 1625

使用Docker插件实现Springboot项目远程部署

IntelliJ IDEA的Docker插件能帮助我们将当前工程制作成Docker镜像、运行在指定的远程机器上,是学习和开发阶段的好帮手。 一、开发环境准备 本次实战需要提前准备好以下内容: 开发环境操作系统:win10 IntelliJ IDEA: 2018.2.4 (Ultimate Edition) JDK:1.8.0_181 Maven:3.5.0 Docker服务所在环境:CentOS Linux release 7.6.1810 Docker:1.13.1, build b2f7

码觉客的博客 1万+

Codex 100个真实案例 - 用AI画业务流程图Mermaid(产品经理都馋哭了)

还在用 Visio、ProcessOn 拖拖拽拽画流程图?改一个箭头方向就要调半天?本案例教你用 Codex 自然语言描述业务流程,AI 自动转为 Mermaid 代码,一秒生成专业流程图、时序图、甘特图、饼图!还能搭建在线渲染工具、批量导出 PNG/SVG、集成到文档系统。产品经理、架构师、项目经理都能用,从此画图再也不是体力活!

yueyeguzhuo的专栏 351
上一篇: 程序员:是不是但凡我有一个MySQL的问题回答不上来,就进不了你们公司?
下一篇: 玩转SpringBoot之整合 shiro 权限框架
java架构师小芷
博客等级 码龄6年 216粉丝 519原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值