docker部署war包、将容器打包成镜像、镜像导出到本地、镜像推送到dockerhub

2023-11-20

前言

最近公司使用帆软(finereport)报表工具制作数据报表,并且需要将制作好的报表打包成war包通过docker部署,并且将部署好的项目制作成docker镜像,发给客户,下面将部署过程中踩的坑总结一下。
想要了解帆软可以点击官方链接查看:帆软报表

一、准备war包(项目)

1.使用终端进入到项目所在的目录
在这里插入图片描述
2.执行以下命令打包项目

jar cvf webroot.war *

生成的war包就在当前目录下
在这里插入图片描述

二、准备tomcat服务器

1.使用docker拉取tomcat镜像(拉取包含jdk的tomcat镜像)
具体下载哪个版本的tomcat,自己可以查询docker仓库

在这里插入图片描述
在这里插入图片描述

docker pull tomcat:8.5.49-jdk8-openjdk

在这里插入图片描述

2.守护式方式创建tomcat容器

docker run -di --name tomcat -p 8080:8080 -v /Users/niulibing/test:/usr/local/tomcat/webapps tomcat:latest

参数说明:
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-i:表示运行容器
–name :为创建的容器命名。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

-v:/Users/niulibing/test:/usr/local/tomcat/webapps 目录挂载。将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。前者为宿主机目录,后者为容器目录。
注意:目录挂载的时候按照自己宿主机的目录进行相应的修改。

3.将打包好的war上传到远程服务器(如何上传文件到服务器可以参考另外一篇博文),将上传的war包拷贝到tomcat容器webapps目录下,由于在构建tomcat容器的时候设置了目录挂载,可以把war包拷贝到宿主机的目录
在这里插入图片描述
下面进入到容器内部,看看war包是否已经放入到tomcat的webapps下面。

登录守护式容器方式

docker exec -it tomcat /bin/bash

参数说明:webroot为创建容器时指定的名称。
登录容器,进入到tomcat的webapps目录下,发现已经发现通过文件拷贝到宿主机已经成功影响到了容器内部,将war包已经拷贝进来了。
在这里插入图片描述

三、浏览器访问部署好的项目

1.浏览器输入项目资源路径访问http://localhost:8080/webroot/decision/v10/deployment/recommendation
在这里插入图片描述
糟了…情况好像不妙,翻车了。别急,看看报错信息。
在这里插入图片描述
通过上面的报错信息,点击help获取帮助,看到了帆软官方给出了错误原因的说明,根本原因就是tools.jar这个文件不匹配造成的。比如说这个项目是在mac系统上开发的,部署是在linux系统上部署。这就会出现容器中的jre中的tools.jar和webroot项目中的tools.jar不匹配的。
2. 解决报错

  • 其实在上图中官方已经给出了解决方案:将容器中jdk下面的tool.jar拷贝到项目(webroot)的WEB_INF/lib下面。覆盖掉项目自身的tool.jar就解决了。
    特别注意:此处有个坑,可能是自己当时没理解,在这说一下。不能拷贝宿主机的jdk下面的tools.jar(因为我使用的宿主机是mac,但是容器内部是linux),记得拷贝的是容器内部的tools.jar
    下面具体来替换tools.jar
    2.1 看看容器(webroot)的启动日志找到jdk所在的目录
docker logs tomcat

在这里插入图片描述
2.2 将容器中tools.jar拷贝替换项目(webroot)的WEB_INF/lib下面的tools.jar

登录进容器

docker exec -it tomcat /bin/bash

拷贝tools.jar

cp /usr/local/openjdk-8/lib/tools.jar /usr/local/tomcat/webapps/webroot/WEB-INF/lib/

3.重启容器后再次访问
在这里插入图片描述
此时已经能够正常访问。

四、将已经运行的项目容器打包为镜像

docker commit -a "lazy" -m "this is report" -p 2af6b74aefec webroot:1.0

参数说明:
-a :提交镜像的作者
-m: 提交镜像的说明文字
2af6b74aefec:容器的ID
webroot:打包的镜像名称
1.0:标签
在这里插入图片描述

五、将镜像导出到本地

docker save -o /Users/niulibing/test/webroot.tar webroot:1.0

在这里插入图片描述

六、将镜像推送到dockerhub仓库

1.先在dockerhub建立仓库
在这里插入图片描述
2.标记镜像:将准备推送的镜像标记成第一步创建的仓库名称,不指定版本的话,默认最新。

docker tag webroot:1.0 libingniu/webroot

在这里插入图片描述
3.开始推送镜像到dockerhub

docker push libingniu/webroot:latest

在这里插入图片描述
推送被拒绝,需要登录一下dockerhub
在这里插入图片描述
推送漫长等待中…
在这里插入图片描述
4.推送完成,登录dockerhub就能看到镜像
上传太慢了,我就把之前上传公共过的图放一张,看看上传成功的情况
在这里插入图片描述
至此,整个部署过程,以及镜像的生成,导出,上传,全部完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker部署war包、将容器打包成镜像、镜像导出到本地、镜像推送到dockerhub 的相关文章

随机推荐

  • ElasticSearch

    ElasticSearch 一 ES介绍 ES是一款基于倒排索引的NoSQL数据库 传统数据库对于模糊查询存在性能瓶颈 而ES更擅长与大数据量的模糊查询 ES在存储数据的时候会先将数据进行分词 将分词的结果作为索引存入数据库中 当进行查询时
  • eclipse和myeclipse下main方法找不到主类的一种情况

    经常碰到java的main函数无法加载的问题 很多人就会以为是eclipse大姨妈了 然后疯狂的clean 疯狂的重启 其实不然 我们找到java build path找到下面的地方 看看路径是否指向编译后的class 需要注意的是 在ma
  • Java服务端限制下载速度

    没有资源取之不尽用之不竭 服务器带宽有限 能限制一点算一点 最近在使用云存储openstack swift做文件存储下载 如题先上限速code private Long writeResponse HttpServletResponse r
  • js制作简易计算器

    实现2个输入框中输入整数后 点击第三个输入框能给出2个整数的加减乘除 提示 获取元素的值设置和获取方法为 例 赋值 document getElementById id value 1 取值 var document getElementB
  • oracle 建表 提示 ora-00955:名称已由现有对象使用.

    问题 oracle 执行 Create table 设备执行库房 设备id number 18 执行库房id number 18 提示 ora 00955 名称已由现有对象使用 但是执行 drop table 设备执行库房 却提示表或视图不
  • java生成随机数组_JAVA生成随机数组10个数字并求和

    JAVA生成随机数组10个数字并求和 本文最终结果大概是这样的 使用java技术随机生成10个数 然后填充一个数组并在消息框中显示数组内容 接着对数组求和输出 将结果显示在消息框中 设计思路 可以先用Math Random 1000生成10
  • hive-05-Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask

    hive命令行里执行了一句话 select from person join zhanghao on person zjhm zhanghao zjhm limit 100 就是两个表做连接查询 数据量大小一个是3千万 一个是3亿 结果报错
  • 【Transformer系列】深入浅出理解Transformer网络模型(综合篇)

    一 参考资料 The Illustrated Transformer 图解Transformer 完整版 Attention Is All You Need The Core Idea of the Transformer transfor
  • 【含源码】两种不同风格的圣诞树代码合集,其中还有可以改名字的圣诞树代码

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 前言 一年一度的圣诞节马上就要到了 看到好多程序员小伙伴已经开始炫耀自己制作的圣诞树了 今天就跟大家分享2种不同风格的圣诞树 附上完整代码 拿来即用可以按照自
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • 肖sir__mysql之单表__004

    mysql之单表 一 建表语句 1 show databases 查看所有的数据库 2 create databaes 数据库名 创建数据库 3 use 数据库名 指定使用数据库 4 show tables 5 创建表 格式 create
  • linux计算字符串个数,Linux 统计某个字符串个数的方法

    在 Linux 系统下 有时候 我们可能要对一个日志文件进行分析 比如 分析日志文件中某个单词或者某个特殊字符串出现了多少次 对于匹配统计 一般用到正则方法 下面总结了几个统计字符串个数的方法 方法一 使用 grep 命令 grep o 字
  • Python自动化测试 软件测试最全教程(附笔记),看完就可就业

    最近看到很多粉丝在后台私信我 叫我做一期Python自动化测试的教程 其实关于这个问题 我也早就在着手准备了 我录制了一整套完整的Python自动化测试的教程 都上传在B站上面 大家有兴趣的可以去看一下 Python自动化测试 手把手教你做
  • springboot不香吗?为什么还要使用springcloud

    1 为什么要使用springcloud 如果我们的服务需要调用另外的一个服务 当然可以通过url 加接口直接调用 但是如果url变动后 我们也要跟着修改 还有可能服务宕机我们也不知道 而且现在只有一个url不具备高可用性 就算有多个url
  • Hudi Log 文件格式与读写流程

    Hudi Log 文件格式与读写流程 背景 对 Hudi 有一定了解的读者应该知道 Hudi 有 COW 和 MOR 两种表类型 其中的 MOR 表会通过日志文件记录文件 写入一个 MOR 表后产生的文件可以观察到 一个 MOR 表数据存储
  • 【LeetCode与《代码随想录》】字符串篇:做题笔记与总结-JavaScript版

    文章目录 代码随想录 主要题目 344 反转字符串 541 反转字符串 II 剑指 Offer 05 替换空格 151 反转字符串中的单词 剑指 Offer 58 II 左旋转字符串 28 找出字符串中第一个匹配项的下标 KMP 还没写 4
  • 我最喜欢的10个顶级数据科学资源,kaggle、TDS、arXiv......

    当我声明数据科学正在成为最受欢迎的工作领域之一时 我想你不会与我争辩 特别是考虑到 哈佛商业评论 将 数据科学家 评为21世纪最性感的工作 在这个领域 我们已经走过了很长的路 从数据科学和机器学习等术语还不为人所知 到一切都聚集在统计学的保
  • systemd[1]: Failed to load SELinux policy. freezing.

    今天早上发现centos7无法启动了 界面提示systemd 1 Failed to load SELinux policy freezing 查到一篇资料说是selinux设置出问题了 他将 etc selinux config文件中的s
  • MATLAB进行模式识别的实验

    一 实验一习题 我猜测是根据最大似然估计法先求出那两个参数的值 然后代入 得到的是只关于x的函数 然后把文本里的1000个数据导入 画图 首先 我先把txt的数据读取到矩阵里面 方便后续处理 用到的函数 1 这里有一个比较详细的fopen的
  • docker部署war包、将容器打包成镜像、镜像导出到本地、镜像推送到dockerhub

    前言 最近公司使用帆软 finereport 报表工具制作数据报表 并且需要将制作好的报表打包成war包通过docker部署 并且将部署好的项目制作成docker镜像 发给客户 下面将部署过程中踩的坑总结一下 想要了解帆软可以点击官方链接查