Docker - Docker部署war包

news2025/7/13 21:42:55

使用Docker部署war项目,必须要用容器,我们就用tomcact容器,其实都是将war包丢到tomcat的webapps目录下,tomcat启动的情况下会自动解压war包

部署war包有两种方式

1、在Docker中安装tomcat容器的镜像,然后把war包丢到tomcat镜像下webapps中

注:如果tomcat关闭了,其webapps下的包就会消失

2、利用挂载,还是安装tomcat容器的镜像,但是不把war包丢到tomcat下的webapps中,直接创建一个外部文件夹,将这个外部文件夹跟wabapps关联,这样把war丢到新建的文件夹中,tomcat的webapps也能读取到这个war包,这就是挂载

1、修改springboot配置

(1)打包war包,修改pom.xml文件

<modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>docker-project-web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

(2)移除内置web模块自带的tomcat

<!-- 设置Tomcat打包的时候不打包下面配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>

(3)添加servlet依赖,不然打包报错

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>

(4)项目加别名,在build标签下增加finalName,就是项目名,如果不加,项目名就是你的artifactId-version,生成的war包名称也是artifactId-version.war,浏览器访问的时候项目名字太长

<build>
        <finalName>dockerProect</finalName>
</build>

2、搜索Tomcat镜像

Docker官网 https://www.docker.com/

Docker镜像仓库 https://registry.hub.docker.com/

(1)直接取docker镜像仓库搜索

 (2)打开宿主机centos7以上系统

docker search tomcat

3、下载Tomcat镜像

 默认跟了  :latest  下载最新版;如全写  docker pull tomcat:latest

// 默认跟了  :latest  下载最新版;如全写  docker pull tomcat:latest
docker pull tomcat

可以查看容器

docker images

4、启动容器

注:这里需要做端口映射

从客户机上访问容器,需要有端口映射;docker容器默认此阿勇桥接模式与宿主机通信,需要将宿主机的IP端口映射到容器的IP端口上  使用 -p 参数

//映射8080 也可以,博主使用的 9090
docker run -d -p 9090:8080 tomcat:9.0


docker run -d -p 9090:8080 tomcat:9.0 --restart=always --privileged=true

1、--restart=always:当 Docker 重启时,容器能自动启动

docker run --restart具体参数值详细信息

no -  容器退出时,不重启容器;

on-failure - 只有在非0状态退出时才从新启动容器;

        –restart=on-failure:10 : 表示最多重启10次

always - 无论退出状态是如何,都重启容器;
 

2、--privileged=true:挂载宿主机目录,不会报权限问题

如果docker run 的时候没有加 --restart=always ,然后已经运行的docker容器,执行下面命令

# demo : 你的容器名称
docker update –-restart=always demo

查看容器状态 

docker ps

CONTAINER ID:每个容器的唯一标识符号,自动生成。类似于数据库中的主键

IMAGE :创建容器使用的镜像名称

COMMAND:运行容器时的命令

CREATED:容器创建的时间

STATUS:容器的运行状态,Up 8 months 指容器已运行8个月
        -created(已创建)
        -restarting(重启中)
        -running(运行中)
        -removing(迁移中)
        -paused(暂停)
        -exited(停止)
        -dead(死亡)
PORTS:容器开放的端口信息。
NAME:容器的别名,在运行容器执行docker run 时可使用 --name进行指定

5、访问 9090端口,如果发现网页无法访问,报错404

错误原因

Tomcat文件夹下的 webapps 文件夹是空的

tomcat 默认的欢迎页面实际上放在的路径应该是 webapps/ROOT/index.jsp 或者 index.html

解决办法

1、使用如下命令,查看容器ID

docker ps

2、进入容器

docker exec -it 容器ID /bin/bash

3、输入 ls 命令查看Tomcat目录下的文件及文件夹 

 4、 删除 webapps 目录,并且将 webapps.dist 目录重名为 webapps

mv webapps webapps2
mv webapps.dist/ webapps

或者 拷贝 webapps.dist 目录下的内容到 webapps 目录下

一、war包拷贝到Tomcat容器webapps文件夹下

1、可切换到根目录下,创建一个文件夹

mkdir varPackage

2、将本地的war包上传到 centos系统下的varPackage文件下(使用的SecureFX工具)

3、查看Tomcat容器安装路径,可以使用如下命令查看

docker exec -it Tomcat容器id /bin/bash

这是可以查看到Tomcat的路径 

退出容器:exit

4、拷贝varPackage文件下的war包拷贝到Tomcat容器下的webapps文件夹下

docker cp /warPackage/dockerProject.war Tomcat容器ID:/usr/local/tomcat/webapps

5、重启容器

docker restart +容器ID

二、挂载

1、可切换到根目录下,创建一个文件夹

mkdir varPackage

 2、将本地的war包上传到 centos系统下的varPackage文件下(使用的SecureFX工具)

 3、挂载

// -v(挂载) 虚拟机目录 容器目录
docker run -d -p 8088:8080 -v /root/warPackage/:/usr/local/tomcat/webapps /bin/bash

宿主机查看:

cd /root/warPackage
ls

容器内查看:

docker exec -it 容器ID /bin/bash
cd webapps
ls

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

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

相关文章

【无人机】模拟一群配备向下摄像头的移动空中代理覆盖平面区域(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

极速Go语言入门(超全超详细)-基础篇2

文章目录函数进阶结构体接口继承type值类型与引用类型值传递、引用传递打包、引用包工具类打包文件代码引用包代码方法异常捕捉处理字符串常用函数日期常用函数管道(channel)书接上篇&#xff1a;极速Go语言入门(超全超详细)-基础篇 整个基础篇合计32000字左右,如有遗漏可以私…

RDD—Transformation算子

Spark核心编程&#xff08;Spark Core&#xff09; 文章目录Spark核心编程&#xff08;Spark Core&#xff09;1. 了解RDD1.2 RDD五大特性1.3 WordCount案例分析2 RDD编程入门2.1 RDD的创建2.2 RDD算子2.3 常用Transformation 算子小案例&#xff08;客户端&#xff0c;集群&am…

Flutter高仿微信-第45篇-群聊-文本

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; 详情请参考Flutter高仿微信-第44篇-群聊&#xff0c; 这里…

Win10更新后卡在输入密码的界面

注意&#xff1a; 系统没问题时候建议创建还原点&#xff0c;以防万一&#xff1a; 创建还原点方法&#xff1a; 设置-系统-关于-系统保护-创建还原点。 下面介绍Win10更新后卡在输入密码的界面解决方法。 此时进不去系统&#xff0c;想进行还原点还原。 首先需要进入疑难解答…

安全分析能力的核心能力

核心能力 为了加快安全分析能力更全面、更深入的自动化 &#xff0c;SecXOps 的目标在于创建一个集成的用于 Security 的 XOps 实践&#xff0c;提升安全分析的场景覆盖率和运营效率。SecXOps 技术并不 015 SecXOps 技术体系 是 Ops 技术在安全领域的简单加和&#xff0c;SecXO…

第二章:线程基础知识复习

为什么要学好多线程如此重要? 硬件方面 摩尔定律 它是由英特尔创始人之一-Gordon Moore(戈登●摩尔)提出来的。其内容为: . 当价格不变时&#xff0c;集成电路上可容纳的元器件的数目约每隔18-24个月便会增加一倍&#xff0c;性能也将提升一倍。换言之&#xff0c;每一美元所…

力扣 36. 有效的数独 C语言实现

题目描述&#xff1a; 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参…

嵌入式驱动初级-阻塞与非阻塞

文章目录前言一、五种IO模型二、阻塞与非阻塞三、多路复用四、信号驱动前言 记录嵌入式驱动学习笔记 一、五种IO模型 当应用程序对设备驱动进行操作的时候&#xff0c;如果不能获取到设备资源&#xff0c;那么阻塞式 IO 就会将应用程 序对应的线程挂起&#xff0c;直到设备资源…

LeetCode刷题复盘笔记—一文搞懂纯0-1背包问题(动态规划系列第六篇)

今日主要总结一下动态规划背包问题的基础——纯0-1背包问题 在Leetcode题库中主要都是01背包和完全背包的应用问题&#xff0c;所以主要掌握这两个背包问题 题目&#xff1a;纯0-1背包问题 题目描述&#xff1a; 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是wei…

推特自动发帖,全天占据核心流量

利用热门趋势和Hashtags标签 Twitter有一个热门趋势&#xff0c;跟微博热搜是差不多的&#xff0c;卖家可以多关注一下热门趋势&#xff0c;看看有没有和产品相关的内容。在帖子中加入趋势性和热门的标签&#xff0c;是一种非常好的营销方式。 这一方面能够增加推文的热度&am…

【Linux】(五)GateWay远程开发方式-实验室服务器使用GateWay远程开发

Jetbrains GateWay 方式系列文章一、服务器情况简介1.1服务器及用户1.2 cuda1.3 conda环境二、Jetbrains GateWay方式连接2.1 下载2.2 配置2.3 连接管理及附加说明2.3.1 关闭或退出2.3.2 重连附录公共数据集系列文章 &#xff08;一&#xff09;服务器初次配置及安装vncserver…

基于MxNet实现目标检测-YoloV4【附部分源码及模型】

文章目录前言目标检测发展史及意义一、数据集的准备1.标注工具的安装2.数据集的准备3.标注数据4.解释xml文件的内容二、网络结构的介绍三、代码实现0.工程目录结构如下1.导入库2.配置GPU/CPU环境3.数据加载器4.模型构建5.模型训练1.学习率设置2.优化器设置3.损失设置4.循环训练…

Hive基本使用

Hive系列第三章 第三章 基本使用 1、 创建库&#xff1a;create database mydb; 2、 查看库&#xff1a;show databases; 3、 切换数据库&#xff1a;use mydb; 3.1 访问Hive的方式 3.1.1 直接可以在客户端Hive进入 见2.5.8 启动hive客户端 3.1.2 使用JDBC方式 先知道&am…

汽车零部件加工行业工业互联网智能工厂解决方案

汽车零部件分类 汽车零部件是汽车工业发展的基础。按功能分类如下&#xff1a; 零部件分类 主要产品 发动系统 发动机总成、滤清器、气缸及部件、油箱、曲轴、凸轮轴、气门及部件、皮带、增压器、化油器、燃油喷射装置、其他发动系统 传动系统 离合器、减速器总成、变速器…

【C++ STL】-- 二叉搜索树

目录 二叉搜索树概念 二叉搜索树的应用 二叉搜索树的实现&#xff08;K模型&#xff09; 构造函数 默认拷贝构造函数 赋值运算符重载函数 普通写法&#xff1a; 进阶写法&#xff1a; 析构函数 插入函数&#xff08;Insert&#xff09;的实现 常规实现&#xff1a; …

解决Windows环境下的docker中修改了mysql的配置文件之后启动不了的问题

** 前情简介&#xff1a; ** 由于在docker中安装的mysql5.7中区分表的大小写&#xff0c;进入到mysql的命令行模式之后就修改配置文件&#xff0c;主要修改 lower_case_table_names1修改之后就启动再也启动不起来了&#xff0c;说我配置文件改错了 2022-11-25 14:47:5400:0…

ThingsBoard源码解析-消息队列

概述 消息队列是thingsboard支持集群的基础&#xff0c;比如使用Kafka可实现消息在整个服务集群中共同处理&#xff0c;提高性能。如果是内存队列&#xff0c;则无法再服务实例间共享消息。 定义 在module【common/cluster-api】的org.thingsboard.server.queue包定义了消息…

排名预测系统

排名预测系统 题目链接 题目背景&#xff1a; 本题大模拟来自真实的需求&#xff0c;即&#xff1a;综合三场网络赛的名次&#xff0c;来预计一个正式队伍在所有正式参赛队伍中的名次以此来估计自己能不能拿牌。本来只有一道题&#xff0c;即为你们看到的T5&#xff0c;经过…

【Linux kernel/cpufreq】framework ----big Little driver

Linux kernel支持ARM bigLttile框架的解决方案 一般ARM SOC包含能效和性能两个cluster&#xff0c;共8个 core&#xff0c;可以把这8个core统统开放给kernel&#xff0c;让kernel的调度器&#xff08;scheduler&#xff09;根据系统的实际情况&#xff0c;决定哪些任务应该在哪…