还在手动部署SpringBoot应用?试试这个自动化插件!
JAVA葵花宝典
共 5045字,需浏览 11分钟
· 2020-09-03
最近又发现了一款好用的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
访问 docker-registry-ui
管理界面,即可查看到busybox
镜像,地址:http://192.168.3.101:8280
插件使用
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.fabric8groupId>
<artifactId>docker-maven-pluginartifactId>
<version>0.33.0version>
<configuration>
<dockerHost>http://192.168.3.101:2375dockerHost>
<pushRegistry>http://192.168.3.101:5000pushRegistry>
<images>
<image>
<name>192.168.3.101:5000/mall-tiny/${project.name}:${project.version}name>
<build>
<from>java:8from>
<args>
<JAR_FILE>${project.build.finalName}.jarJAR_FILE>
args>
<assembly>
<targetDir>/targetDir>
<descriptorRef>artifactdescriptorRef>
assembly>
<entryPoint>["java", "-jar","/${project.build.finalName}.jar"]entryPoint>
<maintainer>macrozhengmaintainer>
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>
<groupId>io.fabric8groupId>
<artifactId>docker-maven-pluginartifactId>
<version>0.33.0version>
<executions>
<execution>
<id>build-imageid>
<phase>packagephase>
<goals>
<goal>buildgoal>
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
文件,将
节点配置替换为如下内容,仅需配置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
现在我们只需在插件中配置即可,在
节点下添加
节点可以定义容器启动的行为:
<run>
<containerNamePattern>${project.artifactId}containerNamePattern>
<ports>
<port>8080:8080port>
ports>
<links>
<link>mysql:dblink>
links>
<volumes>
<bind>
<volume>/etc/localtime:/etc/localtimevolume>
<volume>/mydata/app/${project.artifactId}/logs:/var/logsvolume>
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
项目源码地址
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-fabric
推荐阅读
评论
五一抢票难,Github上这几个Python项目,你可以试试
又到五一长假啦(虽然其实就放了1天),大家是打算家里蹲or出去玩,又或者是在公司加班呢...今天给大家介绍三个和12306相关的项目,看看你是否用得上。/01/ py12306py12306购票助手,顾名思义,12306买票的~需要在python 3.6以上版本运行程序。1. 安装依赖gi
Crossin的编程教室
0
自动化测试做得好的标准是什么
自动化测试要做得好的标准,主要包括以下几个方面:一、高覆盖率与精准定位1、测试用例覆盖全面:自动化测试应覆盖产品的核心功能、关键业务流程以及常见的异常场景,确保测试范围广泛,降低遗漏风险。2、问题定位准确:自动化测试应能够精准地识别并定位问题,包括缺陷的位置、产生的原因以及可能的影响,为开发团队提供
测试开发社区
0
这五款牛逼的 IDEA 插件,堪称代码质量检查利器!
来源:blog.csdn.net/a745233700?type=blog一、Alibaba Java Coding Guidelines二、CheckStyle:三、PMD四、FindBugs:五、SonarLint:总结随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度
码农突围
0
SpringBoot 实现图片防盗链功能
程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 4 分钟。来自:blog.csdn.net/weixin_46157208/article/details/138051737前言出于安全考虑,我们需要后端返回的图片只允许在某个网站内展示,不想被爬虫拿到图片地
程序员的成长之路
0
Java8 Steam流太难用了?那你可以试试 JDFrame
来源:juejin.cn/post/7356652717392740404👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接
小哈学Java
1
springboot第70集:字节跳动后端三面经,一文让你走出微服务迷雾架构周刊
创建一个使用Kubernetes (K8s) 和 Jenkins 来自动化 GitLab 前端项目打包的CI/CD流水线,需要配置多个组件。下面,我将概述一个基本的设置步骤和示例脚本,以帮助你理解如何使用这些工具整合一个自动化流程。前提条件确保你已经有:Kubernetes 集群:用于部署 Jenk
程序源代码
0
21.3K star!推荐一款可视化自动化测试/爬虫/数据采集神器!功能免费且强大!
【温馨提示】由于公众号更改了推送规则,不再按照时间顺序排列,如果不想错过测试开发技术精心准备的的干货文章,请将测试开发技术设为“星标☆”,看完文章在文尾处点亮“在看”!大家好,我是狂师!在大数据时代,信息的获取与分析变得尤为重要。对于开发者、数据分析师乃至非技术人员来说,能够高效地采集网络数据并进行
测试开发技术
4
【第128期】提升编程效率VSCode变量命名插件推荐
概述 在编程的世界里,一个好的变量名不仅能够提升代码的可读性,还能反映出程序员的专业水平。Visual Studio Code(VSCode)作为一个广受欢迎的代码编辑器,拥有丰富的插件生态系统,其中不乏能够帮助我们高效命名变量的工具。今天,我们就来介绍几款VSCode上能够提升变量命名效率的插件
前端微服务
0