Docker构建Springboot项目,并发布测试

把SpringBoot项目打包成Docker镜像有两种方案:

全自动化:先打好docker镜像仓库,然后在项目的maven配置中配置好仓库的地址,在项目里配置好Dockerfile文件,这样可以直接在idea中打包好后自动上传到镜像仓库,然后去服务器上启动这个镜像就行了。

半自动化:半自动化又有两种方案,一种是Dockerfile文件放在项目里面,一种是放在项目外面。

放在项目里面:springboot pom.xml中配置maven插件支持,打包时会使用项目里面的dockerfile,如果没配置插件支持会报错找不到dockerfile文件
放在项目外面:springboot还是打包成普通的jar,然后把这个jar上传到服务器,同时在服务器创建一个Dockerfile文件,执行docker build命令,把这个jar构建成一个docker镜像,然后通过镜像执行。

一般来说用半自动化比全自动化用的多,本文用的算是半自动化方式的第二种,总体来说有一下几个步骤:

创建docoerfile:

(1)在项目里新建一个名为Dockerfile的文件

编写Dockerfile:

#基础镜像
FROM openjdk:8-jre

#发布到网上时只会把jar包和Dockerfile发布上去
# 把当前目录下的jar包拷贝进docker镜像里
COPY *.jar /ftdocker.jar

#CMD命令用于指定这个容器启动的时候要运行的命令(CMD一行只执行一个命令,可以写多个CMD)
#地址映射
CMD ["--server.port=8088"]

#对外暴露端口
EXPOSE 8088

# ENTRYPOINT命令用于指定这个容器启动的时候要运行的命令(可以追加命令)
#执行命令
ENTRYPOINT ["java", "-Xmx512m", "-jar", "/ftdocker.jar"]

在服务器里的你想存放项目的位置新建文件夹,用于存放Java项目

把打包好的jar包和Dockerfile文件上传到服务器里

使用Dockerfile打包出一个docker镜像

  1. #选项及解释

  2. -t的t是tag,表示生成的镜像的名称和版本号

  3. .表示当前构建时上下文的路径为当前目录

  4. docker build -t todocker:0.1 .

效果图:

如果指定(FROM java:8),Jenkins构建服务,Dockerfile报错:manifest for java:8-jre not found: manifest unknown: manifest unknown

1、问题描述
Jenkins构建服务,控制台报错:

manifest for java:8-jre not found: manifest unknown: manifest unknown

1、截图:


2、解决问题
这是由于Docker官方已经弃用java8镜像,想使用jdk1.8的话,可以使用openjdk。
解决办法是,将Dockerfile改为 FROM openjdk:8-jre

FROM openjdk:8-jre

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

ARG JAR_FILE
COPY ${JAR_FILE} /app.jar

ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-Ddruid.mysql.usePingMethod=false", "-jar", "/app.jar"]
CMD ["--spring.profiles.active=prod"]

使用以下命令查看镜像是否构建成功

docker images

效果图: 

使用以下命令利用我们新建的docker镜像来启动docker容器

#选项及解释
-d表示容器在后台运行
-P表示随机指定端口或者-p指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
 
docker run -d -p 8012:8012 --name 容器名称 镜像名称:版本

效果图:

访问docker容器内的项目

(1)因为用-P参数随机指定了docker的端口来映射docker容器内的SpringBoot项目的8080端口,导致不知道docker随机指定的是哪个端口,所以使用以下命令查看随机指定的docker端口是什么(如果在启动docker容器时指定了端口可以不用进行这一步操作)

docker ps
效果图: 

(2)使用curl命令来访问docker容器内的SpringBoot项目,出现404的字眼,证明SpringBoot项目启动成功

curl localhost:docker随机指定的端口
效果图 

(3)使用curl命令调用SpringBoot项目的接口,发现能调用成功

curl localhost:docker随机指定的端口/接口路径
效果图: 

其他问题:

这个错是某个容器已经存在了 可以用下面命令进行停止 并删除 最后启动

docker stop name/image_id
docker rm name/image_id

通过标签删除镜像

通过如下两个都可以删除镜像:

docker rmi [image]

或者:

docker image rm [image]

强制删除:

docker rmi -f image_id

参考链接:链接1,链接2

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

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

相关文章

VUE环境下 CSS3+JS 实现发牌 翻牌

创建牌容器&#xff08;关键点&#xff1a;overflow&#xff1a;hidden&#xff09;&#xff1a; <div class"popup-box"></div> .popup-box {position: absolute;width: 100vw;height: 100vh;top: 0px;left: 0;overflow: hidden; } 创建每一张牌《固…

透过源码理解Flutter InheritedWidget

InheritedWidget的核心是保存值和保存使用这个值的widget&#xff0c;通过对比值的变化&#xff0c;来决定是否要通知那些使用了这个值的widget更新自身。 1 updateShouldNotify和notifyClients InheritedWidget通过updateShouldNotify函数控制依赖其的子组件是否在Inherited…

4.22 TCP 四次挥手,可以变成三次吗?

目录 为什么 TCP 挥手需要四次呢&#xff1f; 粗暴关闭 vs 优雅关闭 close函数 shotdown函数 什么情况会出现三次挥手&#xff1f; 什么是 TCP 延迟确认机制&#xff1f; TCP 序列号和确认号是如何变化的&#xff1f; 在一些情况下&#xff0c; TCP 四次挥手是可以变成 T…

FFmpeg支持多线程编码并保存mp4文件示例

之前介绍的示例&#xff1a; (1).https://blog.csdn.net/fengbingchun/article/details/132129988 中对编码后数据保存成mp4 (2).https://blog.csdn.net/fengbingchun/article/details/132128885 中通过AVIOContext实现从内存读取数据 (3).https://blog.csdn.net/fengbingchun/…

一百六十八、Kettle——用海豚调度器定时调度从Kafka到HDFS的任务脚本(持续更新追踪、持续完善)

一、目的 在实际项目中&#xff0c;从Kafka到HDFS的数据是每天自动生成一个文件&#xff0c;按日期区分。而且Kafka在不断生产数据&#xff0c;因此看看kettle是不是需要时刻运行&#xff1f;能不能按照每日自动生成数据文件&#xff1f; 为了测试实际项目中的海豚定时调度从…

Java设计模式:四、行为型模式-09:模板模式

文章目录 一、定义&#xff1a;模板模式二、模拟场景&#xff1a;模板模式三、改善代码&#xff1a;模板模式3.0 引入依赖3.1 工程结构3.2 模板模式结构图3.3 爬取商品生成海报实现3.3.1 HTTP获取连接类3.3.2 定义执行顺序的抽象类3.3.3 当当爬取抽象实现类3.3.4 京东爬取抽象实…

切换Java版本

Mac安装不同Java版本 在Sentinel限流框架的使用中&#xff0c;Java版的Sentinel提供一个可以起Dashboard的jar包。访问项目接口&#xff0c;按预期应该在Dashboard里有数据。发现多次请求后还是空白。 仔细看Dashboard的日志&#xff0c;疑似是Java版本的问题&#xff0c;搜了下…

无涯教程-机器学习 - 箱形图函数

Box和Whisker图(也简称为boxplots)是另一种有用的技术&#xff0c;可用于检查每个属性的分布情况。以下是此技术的特点- 它本质上是单变量的&#xff0c;总结了每个属性的分布。它为中间值(即中位数)画一条线。它将在25&#xff05;和75&#xff05;周围绘制一个框。它还会绘制…

SAP PP之定义活动/作业类型(Activity Type)

文章目录 前言 一、作业是什么 二、使用步骤 1.单独创建 2.创建组 注意点 前言 创建活动类型具有以下先决条件&#xff1a; 控制范围已创建并分配给公司代码。已创建成本要素类别为43的次要成本要素。 一、作业是什么 SAP活动类型是在成本范围的成本中心中产生的活动的分类。…

css强制显示一行

要强制将文本内容显示在一行中&#xff0c;可以使用CSS的white-space属性和overflow属性来实现。 首先&#xff0c;将white-space属性设置为nowrap&#xff0c;这样文本内容就不会换行。然后&#xff0c;将overflow属性设置为hidden&#xff0c;这样超出一行的内容就会被隐藏起…

BDCC - 闲聊数据仓库的架构

文章目录 典型数据仓库架构图数据仓库ETL vs ELTETLELT区别联系 数据仓库分层&#xff08;1&#xff09;数据仓库ODS层&#xff08;2&#xff09;数据仓库CDM层DWD数据明细层DWS数据汇总层 &#xff08;3&#xff09;数据仓库ADS层 典型数据仓库架构图 按自下而上的顺序&#x…

《Python趣味工具》——其他常见的RPG游戏梳理:

Hello&#xff0c;各位朋友们大家好&#xff01;昨天我们一起制作了自己的第一个RPG游戏——《人生选择模拟器》&#xff0c;是不是还意犹未尽呢&#xff1f;哈哈&#xff0c;今天我们再来尝试做几款比较轻量级的小游戏吧&#xff01; 文章目录 1. 猜单词游戏:2. 姻缘测试:3. …

通过这 5 项 ChatGPT 创新增强您的见解

为什么绝大多数的人还不会使用chatGPT来提高工作效能&#xff1f;根本原因就在还不会循序渐进的发问与chatGPT互动。本文总结了5个独特的chatGPT提示&#xff0c;可以帮助您更好地与Chat GPT进行交流&#xff0c;以获得更清晰的信息、额外的信息和见解。 澄清假设和限制 用5种提…

Vue前端的一些表格组件的思考

当我们需要在前端中展示一些表格内容时&#xff0c;我们往往使用Vue的table来实现 1. 原生态实现 <template><div><table class"no-gap-table"><thead><tr><th class"styled-header" colspan"4">Column1&…

Linux 操作系统实战视频课 - GPIO 基础介绍

文章目录 一、GPIO 概念说明二、视频讲解沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解 GPIO 。 一、GPIO 概念说明 ARM 平台中的 GPIO(通用输入/输出)是用于与外部设备进行数字输入和输出通信的重要硬件接口。ARM 平台的 GPIO 特性可以根据具体的芯…

六、高并发内存池--Central Cache

六、高并发内存池–Central Cache 6.1 Central Cache的工作原理 central cache也是一个哈希桶结构&#xff0c;他的哈希桶的映射关系跟thread cache是一样的。不同的是他的每个哈希桶位置挂是SpanList链表结构&#xff0c;不过每个映射桶下面的span中的大内存块被按映射关系切…

IPV4地址说明

设想一个场景&#xff1a; 你有两台电脑A和B&#xff0c;需要把A的数据传输到B&#xff0c;怎么办&#xff1f; 1 我们可以用U盘进行拷贝&#xff0c;就是把A的数据拷贝到B 2 我们可以用一根网线把AB连接起来 显然&#xff0c;两台电脑用一根网线。那要是n台电脑呢&#xff1f;…

进程管理死死的学

进程管理 文件属性 chattr【扩展】 chattr chattr i 文件名 # 添加权限 a 可追加&#xff0c;不可修改 i 只可查看 A 不修改访问时间 charrt -i 文件名 # 取消权限 -R 递归处理&#xff0c;将指令目录下的所有文件及子目录一并处理&#xff1b;lsattr 查看文件属性 lsattr …

事务的总结

数据库事务 数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行&#xff0c;要么完全不执行。事务管理是一个重要组成部分&#xff0c;RDBMS 面向企业应用程序&#xff0c;以确保数据完整性和一致性。事务的概念可以描述为具有以下四个关键属性描述…

js对中文进行base64编码和解码操作,解决中文乱码问题

我使用github api的接口获取文件内容&#xff0c;然后使用atob进行解码&#xff0c;但是发现&#xff1a;乱码.......糟心啊 所以就有了我封装的方法&#xff1a; export const encode64 (str) > {// 首先&#xff0c;我们使用 encodeURIComponent 来获得百分比编码的UTF…