Docker笔记(七)使用Docker部署Spring Boot项目

本文介绍如何使用Docker打包并部署Spring Boot多模块项目。

其中本文涉及的Docker的私库是用Nexus3搭建的。

使用Docker部署Spring Boot项目有三种方式

(1)使用 spring-boot-maven-plugin内置的build-image.
(2)使用 Google 的 jib-maven-plugin。
(3)使用 docker-maven-plugin。

以下是三种方式总结

方式需要启动docker需要Dockerfilefat jar
spring boot
jib(Google)
docker-maven

这3个里面最方便的是 SpringBoot 原生的方式,什么都不需要自己做,直接就能用。缺点是需要本地安装并启动Docker,并且下载依赖用Google的,要翻墙,不然会打包失败。另外只能打fat jar,依赖和配置分离的不支持。

最有特点的是Jib,不需要本地安装 Docker和Dockerfile,可以直接推送到指定的仓库,而且使用起来也很简单。需要在pom.xml中配置。

看起来最麻烦的就是 docker-maven-plugin 这个插件了,需要写 Dockerfile和本地安装并启动Docker,还得添加配置,但是,实际上他是最好用的,因为前2个与网络环境有关系,即使你配置了 Docker 镜像,也会报错。

1、使用docker-maven-plugin

1.1 打包时同时打镜像

在pom.xml添加插件docker-maven-plugin依赖,docker要开放2375端口

<build><finalName>demo-center</finalName><plugins><!--docker 插件--><plugin><groupId>io.fabric8</groupId><artifactId>docker-maven-plugin</artifactId><version>0.44.0</version><!--将插件绑定在某个phase执行--><executions><execution><id>build-image</id><!--将插件绑定在package阶段,换言之,只要执行mvn package ,就会自动执行mvn docker:build--><!--等同于命令:mvn clean package docker:build -Dmaven.test.skip=true	--><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><!-- Docker远程管理地址--><dockerHost>tcp://172.28.168.223:2375</dockerHost><!--私服地址不使用可以不配置--><!--<registry>私服地址</registry>--><images><image><!--格式:<harbor_host>/<harbor_project_name>/<image_name>:<tag>--><name>172.28.168.223:5180/library/${project.artifactId}:${project.version}</name><build><args><!--为Dockerfile中提供参数--><TAR_FILE>target/${project.build.finalName}-release.tar.gz</TAR_FILE><APP_NAME>${project.build.finalName}</APP_NAME></args><!--dockerFile位置--><dockerFileDir>${project.basedir}</dockerFileDir></build></image></images></configuration></plugin></plugins>
</build>

编写Dockerfile(放在插件所在pom的目录)

FROM openjdk:8-jdk-alpine# 指定时区
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo Asia/Shanghai > /etc/timezone# 创建目录
RUN mkdir /app# 添加阿里的arthas
# ADD arthas /app/arthas# 插件变量
ARG TAR_FILE
ARG APP_NAME# 复制tar包
COPY ${TAR_FILE} /app/${APP_NAME}.tar.gzWORKDIR /app# 解压tar
RUN tar -xvf ${APP_NAME}.tar.gz# 标明开放端口,并不做真实映射
EXPOSE 9080# 执行启动脚本
WORKDIR /app/${APP_NAME}/bin
ENTRYPOINT ["sh", "startup.sh"]

运行打包命令mvn package
在这里插入图片描述
到docker服务查看docker images,发现项目的镜像已打包成功
在这里插入图片描述

1.2 maven deploy时推送镜像到harbor

在上面的插件配置中增加以下内容
在这里插入图片描述
完整的插件配置如下:

<build><finalName>auth-center</finalName><plugins><!--docker 插件--><plugin><groupId>io.fabric8</groupId><artifactId>docker-maven-plugin</artifactId><version>0.44.0</version><!--将插件绑定在某个phase执行--><executions><execution><id>build-image</id><!--将插件绑定在package阶段,换言之,只要执行mvn package ,就会自动执行mvn docker:build--><!--等同于命令:mvn clean package docker:build -Dmaven.test.skip=true	--><phase>package</phase><goals><goal>build</goal></goals></execution><execution><id>push-image</id><!--将插件绑定在package阶段,换言之,只要执行mvn deploy ,就会自动执行mvn docker:push--><!--等同于命令:mvn clean deploy docker:push -Dmaven.test.skip=true	--><phase>deploy</phase><goals><goal>push</goal></goals></execution></executions><configuration><!-- Docker远程管理地址--><dockerHost>tcp://172.28.168.223:2375</dockerHost><!-- Docker推送镜像仓库harbor地址 --><pushRegistry>http://172.28.168.223:5180</pushRegistry><!--harbor私有仓库的用户名与密码--><authConfig><username>admin</username><password>Harbor12345</password></authConfig><images><image><!--格式:<harbor_host>/<harbor_project_name>/<image_name>:<tag>--><name>172.28.168.223:5180/library/${project.artifactId}:${project.version}</name><build><args><!--为Dockerfile中提供参数--><TAR_FILE>target/${project.build.finalName}-release.tar.gz</TAR_FILE><APP_NAME>${project.build.finalName}</APP_NAME></args><!--dockerFile位置--><dockerFileDir>${project.basedir}</dockerFileDir></build></image></images></configuration></plugin></plugins>
</build>

运行mvn clean deploy会同时把包上传到maven仓库、镜像上传到harbor
在这里插入图片描述
登录Harbor可以看到上传的镜像
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/685414.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手系列!使用 Zilliz Cloud 和 AWS Bedrock 搭建 RAG 应用

检索增强生成&#xff08;Retrieval Augemented Generation, RAG&#xff09;是一种 AI 框架&#xff0c;它通过结合信息检索和自然语言处理&#xff08;NLP&#xff09;能力从而增强文本生成。具体而言&#xff0c;RAG 系统中的语言模型通过一种检索机制查询和搜索知识库或外部…

rocketmq控制台部署

网络找rocketmq控制台有源码包&#xff0c;还需要编译太麻烦&#xff0c;找到了 rocketmq-dashboard-1.0.1-SNAPSHOT.jar已经编译后的jar&#xff0c;只有简单修改服务器端口和监控rocketmq集群地址和端口就可以。需要jar资源的可以咨询本人。 步骤1&#xff1a;根据需要配置ro…

LinkedList链表

LinkedList 的全面说明 LinkList底层实现了双向链表和双端队列特点可以添加任意元素&#xff08;元素可以重复&#xff09;&#xff0c;包括null线程不安全&#xff0c;没有实现同步 LinkedList 的底层操作机制 LinkedList底层维护了一个双向链表LinkList中维护了两个属性fi…

VBA_NZ系列工具NZ06:VBA创建PDF文件说明

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…

CoT个人记录

1.Few-shot COT&#xff08;CoT, 思维链&#xff09; 通过向大语言模型展示一些少量的例子(Few-shot )&#xff0c;在样例中解释推理过程&#xff0c;大语言模型在回答时也会模拟人类思考推理的过程生成中间的推理步骤,&#xff0c;再得到答案。这种推理的解释往往会引导出更准…

1725 ssm资产管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm资产管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/…

拼团商城系统搭建如何做?

团购商城就是团体到商城进行购物的一种交易方式&#xff0c;其场景应用包括装修建材、家居用品、汽车、房屋、家电、电脑、生活用品等各个领域。作为消费者&#xff0c;也能从中享受5%到40%不等的商品优惠幅度。那么&#xff0c;拼团商城系统搭建如何做&#xff1f;我们从优势、…

最长递增子序列 详解 CPP

目录 前言思路梳理题解最优思路 我的思路思路一 考虑连续 对一半 思路二 基于思路一的优化 思路三 基于思路二的优化 √ 通过了但是效率太低 我的代码 前言 今天继续做动态dp的第三题&#xff0c;最大子序和&#xff0c;昨天做最大连续子数组的和已经有一些写状态转移方程的经…

2010年认证杯SPSSPRO杯数学建模D题(第一阶段)服务网点的分布全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 D题 服务网点的分布 原题再现&#xff1a; 服务网点、通讯基站的设置&#xff0c;都存在如何设置较少的站点&#xff0c;获得较大效益的问题。通讯基站的覆盖范围一般是圆形的&#xff0c;而消防、快餐、快递服务则受到道路情况和到达时间的限…

这份走心的母亲节礼物清单,请查收!

老舍在《我的母亲》中写道&#xff1a;“人&#xff0c;活到八九十岁&#xff0c;有母亲在&#xff0c;便可以多少还有点孩子气。失了慈母便像花插在瓶子里&#xff0c;虽然还有色有香&#xff0c;却失去了根。有母亲的人&#xff0c;心里是安定的。”母亲&#xff0c;对我们每…

Git详解之五:分布式Git

为了便于项目中的所有开发者分享代码&#xff0c;我们准备好了一台服务器存放远程 Git 仓库。经过前面几章的学习&#xff0c;我们已经学会了一些基本的本地工作流程中所需用到的命令。接下来&#xff0c;我们要学习下如何利用 Git 来组织和完成分布式工作流程。 特别是&#…

搭建知识库必备:12个开源 Wiki 软件工具盘点

在任何成功的公司中&#xff0c;部门间的知识共享是至关重要的。如果没有一个简单的信息交流方法&#xff0c;团队怎样才能有效合作呢&#xff1f;Wiki软件提供了一种创建、组织及在全公司范围内分享知识的直接方法。但是&#xff0c;哪一种Wiki软件是最佳的选择呢&#xff1f;…