使用Dockerfile依赖maven基础镜像部署springboot的程序案例

1、准备springboot Demo代码

  • 就一个controller层代码,返回当前时间及hello world

2、项目根目录下,新建DockerFile文件

  • 注意,等本地配置完毕后,Dockerfile文件需要与项目helloworld同级,这里先放项目里面

3、docker hub找mevn的linux镜像名称

官网地址:http://hub.docker.com

我打不开官网,用了这个:

Docker Maven镜像tag

4、编写DockerFile

  • 注意:执行Dockerfile时,该文件必须与项目helloworld在同一级目录
#请把DokcerFile 放至helloworld同级目录
#来源的基础镜像,这里不需要单独FROM JDK,因为maven镜像里面附带了JDK
FROM maven:alpine
#作者
LABEL authors="shuizhu"

#指定环境变量url为/usr/helloworld
ENV url /usr/helloworld

#指定容器的工作目录
WORKDIR ${url}

#复制helloworld下的所有文件到镜像中的/usr/helloworld目录中
COPY helloworld /usr/helloworld

#把maven镜像中的maven配置文件settings.xml,替换为自己的settings.xml,为了加快下载
COPY helloworld/settings.xml /usr/share/maven/conf/settings.xml

#MVN 打包
RUN ["mvn","package"]

#执行java -jar启动命令
ENTRYPOINT ["java", "-jar","target/helloworld-0.0.1-SNAPSHOT.jar"]

5、Dockerfile使用的参数详解

RUN
  • 镜像构建时,执行的命令,会生成新镜像层,一般用于:yum安装源、MVN构建、下载或配置,chmod授权
CMD
  • 容器启动时执行的命令,若容器run时(docker run),附带有启动参数,那么CMD不会执行
  • 当CMD与ENTRYPOINT共存时,CMD会当做参数,传递给ENTRYPOINT(相当于字符串,拼接到ENTRYPOINT后)
ENTRYPOINT
  • 容器启动时执行的命令,若容器run时(docker run),附带有启动参数,那么参数会拼接到ENTRYPOINT后面
RUN、CMD、ENTRYPOINT总结

1> dockerfile存在多个CMD或ENTRYPOINT时,只会执行最后一个CMD或ENTRYPOINT

2> RUN可以存在多个,且都会执行

3> 当CMD与ENTRYPOINT共存时,CMD会当做参数,传递给ENTRYPOINT(相当于字符串,拼接到ENTRYPOINT后),因此,不需要变动的参数我们一般写到ENTRYPOINT中,需要变动的参数一般写到CMD中,传递给ENTRYPOINT

4> 当docker  run时附带有启动参数,那么CMD不会执行,且启动参数会附带在ENTRYPOINT后面

5> 三种语法相同:

  • 方式一:RUN  ["值1","值2",...] ,推荐使用这种方式,该方式会被解析为JSON数组,必须使用双引号
  • 方式二:RUN  值1  值2  ....
COPY
  • 语法:COPY   目录或普通文件   路径
  • 当COPY的为目录时,不会复制目录本身,只会复制其内容
 ADD
  • 语法:ADD    目录或普通文件/压缩文件等特殊文件/链接 路径
  • 压缩文件CPOY后,镜像内会自动解压
  • 当为目录时,不会复制目录本身,只会复制其内容
COPY 与ADD总结
  1. docker都是根据上下文去构建容器的,因此第一个参数不能出现../(容器会找不到),可以出现 ./ 表示当前目录
  2. ADD是COPY的增强版

6、复制项目文件到linux

把项目文件helloworld上传到服务器任意目录

7、移动Dockerfile

网上的教程都是直接上传jar文件的,Dockerfile里面直接去执行jar即可

我这需要对springboot项目进行打包,再运行,这个操作都是在docker容器中进行的,而Dockerfile在项目中,而我没办法在dockerfile  COPY时去操作上层目录helloworld,因此我在构建镜像前,把Dockerfile移到helloworld同一目录。

如下:

8、构建镜像

  • 需要确保helloworld文件中有settings.xml文件,否则镜像构建时,会使用默认maven下载链接,构建会很久甚至失败

在Dockerfile目录中,执行:

docker build -t mydemo:v1.0 .

-t:tag标签,对构建的镜像打标签,格式:镜像名称:版本

ps:RUN  ["mvn" , "package"]:RUN是在镜像构建时执行的,因此在构建时,package动作会很久,正常的云环境中,这一步骤一般是交给jenkins实现的

构建用了201s,大部分时间花费在maven打包上,而且这还是在使用阿里maven仓库的基础上.....

9、查看构成成功的镜像

docker images

10、启动镜像

docker run -d -p 8080:8080 --name helloworld mydemo:v1.0

-d:后台运行

-p 8080:8080:docker容器中的8080端口与宿主机的8080端口映射

--name helloworld:给启动的镜像容器命名为helloworld

mydemo:v1.0:需要启动的镜像是哪个

执行后,使用 docker ps 查看正在运行的容器

11、查看镜像启动日志

docker logs helloworld

 得知:镜像启动时(docker  run),执行了Dockerfile中的ENTRYPOINT命令,去启动了springboot项目

12、访问镜像

  • 我们springboot项目存在一个/hello接口
  • 需确保linux开放了8080端口,否则外部访问不到
  • 我这里使用的是腾讯云云服务器,直接通过  http://ip:8080/hello  访问即可

如下:

访问成功

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB源码-第73期】基于matlab的OFDM-IM索引调制系统不同子载波数目误码率对比,对比OFDM系统。

操作环境: MATLAB 2022a 1、算法描述 OFDM-IM索引调制技术是一种新型的无线通信技术,它将正交频分复用(OFDM)和索引调制(IM)相结合,以提高频谱效率和系统容量。OFDM-IM索引调制技术的基本思想…

Flink SQL自定义标量函数(Scalar Function)

使用场景: 标量函数即 UDF,⽤于进⼀条数据出⼀条数据的场景。 开发流程: 实现 org.apache.flink.table.functions.ScalarFunction 接⼝实现⼀个或者多个⾃定义的 eval 函数,名称必须叫做 eval,eval ⽅法签名必须是 p…

快速入门安装及使用git与svn的区别常用命令

一、导言 1、什么是svn? SVN是Subversion的简称,是一个集中式版本控制系统。与Git不同,SVN没有分布式的特性。在SVN中,项目的代码仓库位于服务器上,团队成员通过向服务器提交和获取代码来实现版本控制。SVN记录了每个…

Hbuilder打包项目为h5

Hbuilder打包项目为h5 manifest.json 配置 修改 web 配置下的 页面标题、路由模式、运行的基础路径 发行 H5 发行 填入网站标题和网站域名 编译 编译完成之后存放在 unpackage/dist/build/h5 目录下

Day26力扣打卡

打卡记录 搜索旋转排序数组&#xff08;二分&#xff09; 链接 class Solution {int findMin(vector<int> &nums) {int left -1, right nums.size() - 1; // 开区间 (-1, n-1)while (left 1 < right) { // 开区间不为空int mid left (right - left) / 2;if…

医学图像 ABIDE 等数据集 .nii.gz Python格式化显示

nii.gz 文件 .nii.gz 文件通常是医学影像数据的一种常见格式&#xff0c;比如神经影像&#xff08;如脑部MRI&#xff09;。这种文件格式通常是经过gzip压缩的NIfTI格式&#xff08;Neuroimaging Informatics Technology Initiative&#xff09;。 要在Python中查看.nii.gz文…

设备零部件更换ar远程指导系统加强培训效果

随着科技的发展&#xff0c;AR技术已经成为了一种广泛应用的新型技术。AR远程指导系统作为AR技术的一种应用&#xff0c;具有非常广泛的应用前景。 一、应用场景 气象监测AR教学软件适用于多个领域&#xff0c;包括气象、环境、地理等。在教学过程中&#xff0c;软件可以帮助学…

黑客(网络安全)技术——高效自学1.0

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0c;但是连方向都没搞清楚就开始学习…

Paimon 与 Spark 的集成(一)

Paimon Apache Paimon (incubating) 是一项流式数据湖存储技术&#xff0c;可以为用户提供高吞吐、低延迟的数据摄入、流式订阅以及实时查询能力。Paimon 采用开放的数据格式和技术理念&#xff0c;可以与 ApacheFlink / Spark / Trino 等诸多业界主流计算引擎进行对接&#xf…

听GPT 讲Rust源代码--library/core/src(2)

题图来自 5 Ways Rust Programming Language Is Used[1] File: rust/library/core/src/iter/adapters/by_ref_sized.rs 在Rust的源代码中&#xff0c;rust/library/core/src/iter/adapters/by_ref_sized.rs 文件实现了 ByRefSized 适配器&#xff0c;该适配器用于创建一个可以以…

在Node.js中,什么是事件发射器(EventEmitter)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

全新Inner-IoU损失函数!!!通过辅助边界框计算IoU有效提升检测效果

摘要 1 简介 2 方法 2.1 边界框回归模式分析 2.2 Inner-IoU 损失 3 实验 3.1 模拟实验 3.2 对比实验 3.2.1 PASCAL VOC上的YOLOv7 3.2.2 YOLOv5 在 AI-TOD 上 4. 参考 摘要 随着检测器的快速发展&#xff0c;边界框回归&#xff08;BBR&#xff09;损失函数不断进…

11月份 四川汽车托运报价已经上线

中国人不骗中国人!! 国庆小长假的高峰期过后 放假综合症的你还没痊愈吧 今天给大家整理了9条最新线路 广州到四川的托运单价便宜到&#x1f4a5; 核算下来不过几毛钱&#x1f4b0; 相比起自驾的漫长和疲惫&#x1f697; 托运不得不说真的很省事 - 赠送保险 很多客户第一次运车 …

多目标优化框架

随着模型越来越复杂&#xff0c;优化目标越来越多&#xff0c;传统算法都慢慢地无法胜任复杂优化任务&#xff0c;更为智能的优化方法也就应运而生了。其中有一类是进化优化算法&#xff0c;这类算法的思想来源是自然界的“优胜劣汰”法则&#xff0c;通过不停地保留好的个体最…

艾默生Emerson EDI需求分析

艾默生Emerson是一家全球领先的工程技术和解决方案提供商。该公司总部位于美国&#xff0c;成立于1890年&#xff0c;经过多年的发展&#xff0c;已经发展成为一个多元化的跨国企业&#xff0c;业务遍及工业、商业和消费者市场。艾默生提供各种产品和服务&#xff0c;包括自动化…

CSS3 过度效果、动画、多列

一、CSS3过度&#xff1a; CSS3过渡是元素从一种样式逐渐改变为另一种的效果。要实现这一点&#xff0c;必须规定两相内容&#xff1a;指定要添加效果的CSS属性&#xff1b;指定效果的持续时间。如果为指定持续时间&#xff0c;transition将没有任何效果。 <style> div…

Python 的 datetime 模块

目录 简介 一、date类 &#xff08;一&#xff09;date 类属性 &#xff08;二&#xff09;date 类方法 &#xff08;三&#xff09;实例属性 &#xff08;四&#xff09;实例的方法 二、time类 &#xff08;一&#xff09;time 类属性 &#xff08;二&#xff09;tim…

python调用chrome实现网页自动操作

一. 内容简介 python调用chrome实现网页自动操作。 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 链接&#xff1a; 三.主要流程 3.1 下载驱动和插件 调用谷歌浏览器&#xff0c;需要下载浏览器驱动&#xff08;https://registry.npmmirror.co…

确定性 vs 非确定性:GPT 时代的新编程范式

分享嘉宾 | 王咏刚 责编 | 梦依丹 出品 | 《新程序员》编辑部 在 ChatGPT 所引爆的新一轮编程革命中&#xff0c;自然语言取代编程语言&#xff0c;在只需编写提示词/拍照就能出程序的时代&#xff0c;未来程序员真的会被简化为提示词的编写员吗&#xff1f;通过提示词操纵 …

jQuery HTML/CSS 参考文档

jQuery HTML/CSS 参考文档 文章目录 应用样式 示例属性方法示例 jQuery HTML/CSS 参考文档 应用样式 addClass( classes ) 方法可用于将定义好的样式表应用于所有匹配的元素上。可以通过空格分隔指定多个类。 示例 以下是一个简单示例&#xff0c;设置了para标签 <p&g…