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

news2024/12/25 15:59:26

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  访问即可

如下:

访问成功

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始搭建React+TypeScript+webpack开发环境-基于lerna的webpack项目工程化改造

项目背景 在实际项目中,我们的前端项目往往是一个大型的Webpack项目,结构较为复杂。项目根目录下包含了各种配置文件、源代码、以及静态资源,整体布局相对扁平。Webpack的配置文件分散在不同的部分,包括入口文件、输出目录、加载…

【JMeter】组件之 Listener监听器选择

JMeter中监听器的作用就是收集、显示JMeter取样器的结果,并以树形、图表、表格的形式显示出来。还可以将监听结果保存成文件。 View Results Tree-->察看结果树 Summary Report-->汇总报告 为测试中的每个不同命名的请求创建一行。这与聚合报告类似&#xff…

【扩散模型】实战:创建一个类别条件扩散模型

创建一个类别条件扩散模型 1. 配置和数据准备2. 创建一个以类别为条件的UNet模型3. 训练和采样 本文介绍一种给扩散模型添加额外条件信息的方法。具体地,将在MNIST数据集上训练一个以类别为条件的扩散模型。并且可以在推理阶段指定想要生成的是哪个数字。 1. 配置和…

Conda executable is not found 三种问题解决

如果在PyCharm中配置Python解释器时显示“conda executable is not found”错误消息,这意味着PyCharm无法找到您的Conda可执行文件。您可以按照以下步骤解决此问题: 1.方法一 确认Conda已正确安装。请确保您已经正确安装了Anaconda或Miniconda&#xff…

数字化工厂管理系统的三个关键技术是什么

随着科技的飞速发展,数字化工厂管理系统已经成为了现代制造业的重要发展方向。数字化工厂管理系统通过充分运用建模技术、仿真技术和单一数据源技术,实现了产品设计和生产的虚拟化,为制造业带来了前所未有的效率和创新能力。本文将深入探讨这…

Matlab的多项式留数与极点的计算

Matlab的多项式留数与极点的计算 以下面的多项式为例: 运算代码: clc clear closesyms p % 定义多项式 Zp(5*p^571*p^370*p)/(2*p^635*p^4117*p^236); % 提取分子与分母 [I,D]numden(Zp); Idouble(coeffs(I,p,"All"));%分子 Ddouble(coeffs…

轻量日志管理方案-[EFK]

使用FileBeat进行日志文件的数据收集,并发送到ES进行存储,最后Kibana进行查看展示; 这个应该是最简单,轻量的日志收集方案了。 最总方案为:FileBeatESKibana ; 【Kibana过于强大,感觉可以无限扩展】 文章目…

css:文本对齐属性vertical-align实现化学元素上标下标的显示

文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/vertical-align 语法 vertical-align: <value>;可选值&#xff1a; sub&#xff1a;使元素的基线与父元素的下标基线对齐。 super&#xff1a;使元素的基线与父元素的上标基线对齐。 text-top&#xff1a;使…

24张宇八套卷数一复盘(六)

张八&#xff08;六&#xff09;11/10107选择45填空20高数大题22线代大题12概率大题8 前言 临近考试冲刺阶段&#xff0c;感觉做过的卷子很难再提起精神去复盘&#xff0c;于是在这里进行一下复盘。 主要是对于整体试卷结构的把握&#xff0c;以及考试状态的复盘。 简单的卷子把…

说说React render方法的原理?在什么时候会被触发?

一、原理 首先&#xff0c;render函数在react中有两种形式&#xff1a; 在类组件中&#xff0c;指的是render方法&#xff1a; class Foo extends React.Component { render() { return <h1> Foo </h1>; } } 在函数组件中&#xff0c;指的是函…

虹科分享 | 2023温控生物技术和医药物流前景展望专题报告

2023温控生物技术和医药物流前景展望专题报告 全球供应链正在发生根本性的变化&#xff0c;而制药业对供应链的使用也在不断发展。突破性疗法和个性化药品有望带来崭新的未来&#xff0c;这也改变了我们如今的行医方式。然而&#xff0c;在监管和基础设施方面还面临着许多挑战…

常见排序算法之插入排序类

插入排序&#xff0c;是一种简单直观的排序算法&#xff0c;工作原理是将一个记录插入到已经排好序的有序表中&#xff0c;从而形成一个新的、记录数增1的有序表。在实现过程中&#xff0c;它使用双层循环&#xff0c;外层循环对除了第一个元素之外的所有元素&#xff0c;内层循…

【canvas】在Vue3+ts中实现 canva内的矩形拖动操作。

前言 canvas内的显示内容如何拖动&#xff1f; 这里提供一个 canvas内矩形移动的解决思路。 描述 如何选中canvas里的某部分矩形内容&#xff0c;然后进行拖动&#xff1f; 我的解决思路&#xff1a; **画布搭建。**用一个div将canvas元素包裹&#xff0c;设置宽高&#xf…

漏洞扫描-nuclei-poc编写

0x00 nuclei Nuclei是一款基于YAML语法模板的开发的定制化快速漏洞扫描器。它使用Go语言开发&#xff0c;具有很强的可配置性、可扩展性和易用性。 提供TCP、DNS、HTTP、FILE 等各类协议的扫描&#xff0c;通过强大且灵活的模板&#xff0c;可以使用Nuclei模拟各种安全检查。 …

vue+iView实现下载zip文件导出多个excel表格

1&#xff0c;需求&#xff1a;在vue项目中&#xff0c;实现分月份导出多个Excel表格。 点击导出&#xff0c;下载zip文件&#xff0c;解压出多张表数据。 2&#xff0c;关键代码&#xff1a; <Button class"export button-style button-space" click"ex…

MPC-模型预测控制笔记

线性mpc 凸优化 二次优化问题 1&#xff1a;建立预测模型 2&#xff1a;问题模型 3&#xff1a;求解优化问题 4&#xff1a;得到的优化控制驱动系统 上述方法与qp解一样 硬约束 硬约束 四组约束条件 二次规划求解 matlab代码&#xff1a; 软约束 可以用指数函数 加入…

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install requests pip install beautifulsoup4然后&#xff0c;我们需要导入 requests 和 BeautifulSoup 库&#xff1a; import requests from bs4 import BeautifulSou…

csv文件导入mysql指定表中

csv文件导入mysql指定表中 mysql数据库准备指定表 准备导入的csv数据如下&#xff1a; sepaLengthsepalWidthpetalLengthpetalWidthlabel5.13.51.40.204.931.40.204.73.21.30.20…………… 准备导入的数据为151行5列的数据&#xff0c;其中第一行为标题行。 因此&#xff0…

什么是Node.js的调试器(debugger)工具?

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

演示文稿制作软件 Deckset mac中文版介绍

Deckset mac是一款Mac上的演示文稿制作软件&#xff0c;它可以让你使用Markdown语言快速地创建演示文稿。与传统的演示文稿制作软件相比&#xff0c;Deckset采用了全新的设计理念&#xff0c;旨在让用户更加专注于内容的创作&#xff0c;而不是花费过多的时间在排版和设计上。 …