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

如下:

访问成功

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

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

相关文章

利用MSF设置代理

1、介绍: 通过MSF拿到一个机器的权限后,通过MSF搭建socks代理,然后通内网。 拿到目标权限,有很多方法,比如:①ms17-010 ②补丁漏洞 ③MSF生成后门 在此直接使用MSF生成后门 MSF中有三个代理模块&#x…

基于springboot+vue的校园闲置物品交易系统

运行环境 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven 项目介绍 本文从管…

[架构之路-246]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:获取、分析、定义、验证

目录 前言: 架构师为什么需要了解需求分析 一、需求工程概述 1.1 概述 1.2 需求工程的两大部分 (1)需求开发:系统工程师的职责、目标系统开发角度 (2)需求管理:项目管理者的职责、项目管…

物业管理服务预约小程序的效果如何

物业所涵盖的场景比较多,如小区住宅、办公楼、医院、度假区等,而所涵盖的业务也非常广,而在实际管理中,无论对外还是对内也存在一定难题: 1、品牌展示难、内部管理难 物业需求度比较广,设置跨区域也可以&…

技术分享 | Spring Boot 异常处理

Java 异常类 首先让我们简单了解或重新学习下 Java 的异常机制。 Java 内部的异常类 Throwable 包括了 Exception 和 Error 两大类,所有的异常类都是 Object 对象。 Error 是不可捕捉的异常,通俗的说就是由于 Java 内部 JVM 引起的不可预见的异常&#…

Linux中的粘滞位

目录 粘滞位1、作用2、为什么添加粘滞位3、演示粘滞位的使用方法和效果 粘滞位 1、作用 为了多人协作写进行文件创作时,other用户没有办法将文件删除,只有超级管理员、该目录的所有者、该文件的所有者他们可以删除。 2、为什么添加粘滞位 你想在进行…

基于安卓android微信小程序的四六级助手系统

项目介绍 随着我国教育需求不断增加,高校教育资源有限,教育经费相对不足的情况下,利用现代信息技术发展高等教育,不仅充分利用了优秀的教育资源,而且为更多的人提供接受高等教育的机会,同时这也是极大促进…

为什么要学习去使用云服务器,外网 IP能干什么,MAC使用Termius连接阿里云服务器。保姆级教学

目录 引言 可能有人想问为什么要学习云服务器? (获取Linux环境,获得外网IP) 二、安装教程 引言 可能有人想问为什么要学习云服务器? (获取Linux环境,获得外网IP) 1.虚拟机(下策) …

【教3妹学编程-算法题】765. 情侣牵手

3妹:2哥2哥,你看到新闻了吗?襄阳健桥医院院长 公然“贩卖出生证明”, 真是太胆大包天了吧。 2哥 : 我也看到新闻了,7人被采取刑事强制措施。 就应该好好查查他们, 一查到底! 3妹:真的…

Java使用FTP连接到NAS读取文件信息,并将文件信息变成单向树形结构设置到对象中

检测NAS是否启用的FTP连接模式 如果这里不启用会出现下面错误提示&#xff1a; MalformedServerReplyException: Could not parse response code. Server Reply: SSH-2.0-OpenS 使用依赖 <dependency><groupId>commons-net</groupId><artifactId>comm…

Python零基础小白常遇到的问题总结

文章目录 一、注意你的Python版本1.print()函数2.raw_input()与input()3.比较符号&#xff0c;使用!替换<>4.repr函数5.exec()函数 二、新手常遇到的问题1、如何写多行程序&#xff1f;2、如何执行.py文件&#xff1f;3、and&#xff0c;or&#xff0c;not4、True和False…

overflow: auto滚动条跳到指定位置

点击对应模块跳转页面&#xff0c;滚动到对应模块&#xff0c;露出到可视范围 代码&#xff1a; scrollToCurrentCard() {// treeWrapper是包裹多个el-tree组件的父级元素&#xff0c;也是设置overflow:auto的元素let treeWrapper document.getElementsByClassName(treeWrapp…

[Machine Learning] 多任务学习

文章目录 基于参数的MTL模型 (Parameter-based MTL Models)基于特征的MTL模型 (Feature-based MTL Models)基于特征的MTL模型 I&#xff1a;基于特征的MTL模型 II&#xff1a; 基于特征和参数的MTL模型 (Feature- and Parameter-based MTL Models) 多任务学习 (Multi-task Lear…

基于ubuntu22.04手动安装openstack——2023.2版本(最新版)的问题汇总

前言&#xff1a;基本上按照openstack官方网站动手可以搭建成功&#xff08;如有需要私信发部署文档&#xff09;。 但是任然有些小问题&#xff0c;所以汇总如下。 第一个问题 问题&#xff1a; ubuntu搭建2023.2版本neutorn报错&#xff0c;ERROR neutron.plugins.ml2.driv…

MATLAB仿真通信系统的眼图

eyediagram eyediagram(complex(used_i,used_q),1100)

与创新者同行,Apache Doris in 2023

在刚刚过去的 Doris Summit Asia 2023 峰会上&#xff0c;Apache Doris PMC 成员、飞轮科技技术副总裁衣国垒带来了“与创新者同行”的主题演讲&#xff0c;回顾了 Apache Doris 在过去一年所取得的技术突破与社区发展&#xff0c;重新思考了在面对海量数据实时分析上的挑战与机…

数据挖掘:分类,聚类,关联关系,回归

数据挖掘&#xff1a; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其sql要学&…

用于图像处理的高斯滤波器 (LoG) 拉普拉斯

一、说明 欢迎来到拉普拉斯和高斯滤波器的拉普拉斯的故事。LoG是先进行高斯处理&#xff0c;继而进行拉普拉斯算子的图像处理算法。用拉普拉斯具有过零功能&#xff0c;实现边缘岭脊提取。 二、LoG算法简述 在这篇博客中&#xff0c;让我们看看拉普拉斯滤波器和高斯滤波器的拉普…

某XX自考小程序的AES加密分析

前言 主要是报了自考在这个小程序上面做题&#xff0c;就研究了一下这个接口本文仅供学习交流使用&#xff0c;请勿随意传播。如有侵犯你的权益及时联系我删除。 一、抓包分析打开小程序&#xff0c;打开devtools 工具&#xff0c;这里就不啰嗦&#xff0c;直接上过程。 点击…

深入浅出理解ResNet网络模型+PyTorch实现

温故而知新&#xff0c;可以为师矣&#xff01; 一、参考资料 论文&#xff1a;Identity Mappings in Deep Residual Networks 论文&#xff1a;Deep Residual Learning for Image Recognition ResNet详解PyTorch实现 PyTorch官方实现ResNet 【pytorch】ResNet18、ResNet20、…