Docker实战:Tomcat容器从部署到自定义网页的完整操作

Docker实战:Tomcat容器从部署到自定义网页的完整操作

继Nginx容器部署后,我们再来实操Tomcat容器的使用——从拉取镜像、启动容器,到端口映射、网页挂载,全程通过实际命令演示,带你掌握Tomcat在Docker中的核心用法。

一、拉取Tomcat镜像:容器的“基础模板”

和所有Docker应用一样,使用Tomcat需先获取对应镜像。通过docker pull命令从官方仓库拉取最新版Tomcat:

[root@localhost opt]# docker pull tomcat 
Using default tag: latest  # 默认拉取latest标签(最新版)
latest: Pulling from library/tomcat  # 从官方库拉取
# 省略拉取过程(显示各层镜像下载进度)
Digest: sha256:52a7c268ce41e6717ca94a57f1afdf355e769d7b0a5424a0e1315a  # 镜像校验值
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest  # 拉取成功,镜像路径确认

拉取完成后,用docker images查看本地镜像,确认Tomcat已存在:

[root@localhost opt]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED  
nginx        latest    22bd15417453   8 days ago
tomcat       latest    9ca267cc83c7   2 weeks ago  # 已成功拉取Tomcat镜像
centos       7         eeb6ee3f44bd   3 years ago

二、启动基础Tomcat容器:验证镜像可用性

拉取镜像后,先启动一个基础容器,验证Tomcat能否正常运行:

# 启动Tomcat容器(-d后台运行,--rm容器停止后自动删除,用于临时测试)
[root@localhost opt]# docker run -d --rm tomcat
05615791b7f44d3ec6d9fd19bf912591ead196193dee6eb41fb274  # 返回容器ID,创建成功# 查看容器状态(确认是否运行)
[root@localhost opt]# docker ps -a 
CONTAINER ID   IMAGE           COMMAND         CREATED         STATUS         PORTS      NAMES
05615791b7f4   tomcat:latest   "catalina.sh run"   5 seconds ago   Up 4 seconds   8080/tcp   dazzling_blackburn
  • 关键信息:Tomcat默认在容器内8080端口运行(PORTS列显示8080/tcp),启动命令为catalina.sh run(Tomcat官方启动脚本)。

三、访问Tomcat服务:从容器IP到端口映射

1. 通过容器IP访问(仅限主机内部)

Tomcat启动后,先通过容器内部IP测试服务是否可用:

# 查看容器IP(通过inspect过滤IPAddress)
[root@localhost opt]# docker inspect 056 | grep IPAddress"IPAddress": "172.17.0.2",  # 容器IP为172.17.0.2# 访问容器内Tomcat(需指定8080端口)
[root@localhost ~]# curl http://172.17.0.2:8080
# 输出结果:返回Tomcat的404页面(正常,默认无首页文件)
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title>...
  • 说明:返回404是因为Tomcat默认webapps/ROOT目录下无index.html,但能收到响应,说明服务已正常运行。

2. 通过端口映射实现外部访问(核心)

容器IP仅主机内部可见,若需通过浏览器等外部工具访问,需配置端口映射(将主机端口与容器8080端口绑定):

# 创建带端口映射的Tomcat容器(主机8080→容器8080)
[root@localhost ~]# docker run -d -p 8080:8080 tomcat:latest
b4fff5badcc9f55e66ed4f2d61b14c907f52da173a554a378cc78b  # 容器创建成功# 查看端口映射状态
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND         PORTS                             NAMES
b4fff5badcc9   tomcat:latest   "catalina.sh run"   0.0.0.0:8080->8080/tcp   mystifying_gauss
  • 作用:外部访问主机IP:8080时,请求会自动转发到容器内的Tomcat服务(无需记住容器IP)。

四、自定义Tomcat首页:通过目录挂载同步网页

和Nginx一样,Tomcat的网页内容也可通过“目录挂载”在主机上管理,无需进入容器。

1. 创建挂载目录并编写首页文件

# 创建主机存放Tomcat网页的目录
[root@localhost ~]# mkdir -p /opt/tomcat_web# 进入目录,创建首页文件index.html
[root@localhost ~]# cd /opt/tomcat_web/
[root@localhost tomcat_web]# vim index.html # 写入简单内容
[root@localhost tomcat_web]# cat  index.html 
<h1>This is Tomcat</h1>

2. 创建带目录挂载的Tomcat容器

将主机/opt/tomcat_web/目录挂载到Tomcat默认网页目录(/usr/local/tomcat/webapps/ROOT),并映射到主机8081端口(避免与之前的8080端口冲突):

[root@localhost ~]# docker run -d -p 8081:8080  -v /opt/tomcat_web/:/usr/local/tomcat/webapps/ROOT tomcat:latest 
87384d6a89d1d4752597e30e4672b0d71089206a08c40d256cf9cfe229420cac  # 容器创建成功
  • 挂载逻辑
    主机/opt/tomcat_web/ → 容器/usr/local/tomcat/webapps/ROOT(Tomcat默认读取ROOT目录下的index.html作为首页)。

3. 验证自定义首页效果

通过主机8081端口访问,此时Tomcat会显示我们在主机编写的index.html

# 本地curl测试
[root@localhost tomcat_web]# curl http://localhost:8081
<h1>This is Tomcat</h1>  # 成功返回自定义内容
  • 优势:后续修改/opt/tomcat_web/index.html(比如添加段落),无需重启容器,刷新页面即可看到最新内容(挂载目录实时同步)。

五、总结:Tomcat容器部署核心知识点

  1. 镜像与容器docker pull tomcat获取镜像,docker run基于镜像创建容器(一个镜像可创建多个容器);
  2. 端口映射-p 主机端口:8080是外部访问的关键(Tomcat默认端口8080);
  3. 目录挂载-v 主机目录:/usr/local/tomcat/webapps/ROOT实现网页自定义,主机修改实时生效;
  4. 默认路径:Tomcat的默认首页目录是/usr/local/tomcat/webapps/ROOT,需挂载到此路径才能覆盖默认页面。

通过以上步骤,我们从“基础运行”到“自定义访问”,完整掌握了Tomcat在Docker中的部署逻辑,这与实际生产中“容器化部署Web应用”的流程完全一致。

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

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

相关文章

使用cherry studio离线搭建私人知识库流程记录

本篇文章记录近期尝试在个人笔记本上、全离线状态下搭建知识库的流程。用到的工具包括&#xff1a;Cherry Studio、ollama。主要过程是&#xff1a;首先下载ollama用于管理大模型&#xff1b;然后&#xff0c;从魔塔社区下载需要的deepseek、千问大模型和bge-m3嵌入模型&#x…

【工具类】Linux 环境利用 uv 安装多版本 python

文章目录前置工作环境说明如果kali无法访问网络pypi 换源安装 uvuv 写入环境变量临时写入永久写入无法打开 github 解决方案&#xff08;注意此方法可能也会失效&#xff09;安装多版本 python查看已安装的pythonuv python install到 uv 的 github 主页&#xff0c;找安装文件下…

求职招聘小程序源码招聘小程序开发定制

身份&#xff1a;求职者、企业求职者&#xff1a;完善简历&#xff0c;简历投递企业&#xff1a;企业入驻&#xff0c;查看简历企业会员&#xff1a;半年 、年度 权益&#xff1a;每日发布条数、刷新条数&#xff0c;简历下载数量聊天&#xff1a;求职者可以和企业聊天招聘会…

Git 使用全指南:从配置到免密登录

Git 使用全指南&#xff1a;从配置到免密登录一、Git 基础配置二、Git 代码提交流程2.1 克隆远程仓库2.2 创建并切换分支2.3 暂存文件2.4 提交到本地仓库2.5 拉取远程最新代码2.6 推送本地分支到远程三、VSCode 服务器免密登录配置3.1 生成 Windows SSH 密钥3.2 复制公钥到服务…

组合期权:领式策略

文章目录0.简介1.多头领式策略&#xff08;Long Collar&#xff09;​1.1 策略构成1.2 适用场景​1.3 损益分析1.4 案例示范2.空头领式策略&#xff08;Short Collar&#xff09;​2.1 策略构成2.2 适用场景2.3 损益分析2.4 案例示范参考文献0.简介 领式策略&#xff08;Colla…

ECSPI控制器

目录 SPI协议简介 极性与相位 SPI框图 单字节收发 发送数据流程 接收数据流程 ECSPI控制器 关键特性 时钟源 主机模式 等待状态 片选控制 单突发传输 多突发传输 相位控制 ECSPI Memory Map ECSPI寄存器 ECSPIx_RXDATA ECSPIx_TXDATA ​编辑 ECSPIx_CONREG …

HTTP 与 SpringBoot 参数提交与接收协议方式

HTTP 协议支持多种参数提交方式&#xff0c;主要取决于请求方法(Method)和内容类型(Content-Type)。以下是主要的参数提交协议&#xff1a;1. URL 查询参数 (Query Parameters)请求方法: GET (也可用于其他方法)格式: ?key1value1&key2value2示例: GET /users?id123&…

Lua(数组)

Lua 数组基础概念Lua 中的数组实际上是用整数索引的 table&#xff0c;是一种特殊形式的表。数组索引通常从 1 开始&#xff08;Lua 惯例&#xff09;&#xff0c;但也可以从其他值开始。创建数组通过表构造器初始化数组&#xff1a;-- 索引从 1 开始的数组 local arr {10, …

【Docker项目实战】在Docker环境下部署go-file文件分享工具

【Docker项目实战】在Docker环境下部署go-file文件分享工具一、go-file介绍1.1 go-file简介1.2 go-file特点1.3 go-file使用场景二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下…

C++基础学习——文件操作详解

一、文件流类概述 C 标准库提供了三个主要的文件流类&#xff1a; ifstream (输入文件流)&#xff1a;用于从文件读取数据ofstream (输出文件流)&#xff1a;用于向文件写入数据fstream (文件流)&#xff1a;既可读又可写 这些类都继承自 iostream 类&#xff0c;因此可以使用 …

Android补全计划 DrawerLayout使用

DrawerLayout其实用了很久了&#xff0c;甚至封装了一些代码方便不同项目使用&#xff0c;但重构代码的时候突然意识到这块内容很不成体系&#xff0c;因此又参考了些文档&#xff0c;组建了自己的一个文档。 toolbardrawerlayout能写的效果很多&#xff0c;在此我也只是截取了…

人工智能之数学基础:概率论之韦恩图的应用

韦恩图的应用由于事件的计算有时候太过于抽象了&#xff0c;此时我们可以使用韦恩图的方式来进行验证&#xff0c;我们下面来举一个例子&#xff0c;A∪B&#xff09;-CA∪(B-C)是否成立&#xff1f;我们可以通过韦恩图来完成这个任务&#xff1a;我们通过这种方式来一点一点的…

小白成长之路-部署Zabbix7(二)

文章目录一、zabbix-自动发现二、自动注册三、zabbix-网易云邮箱-发送消息二、zabbix-钉钉告警总结一、zabbix-自动发现 1.在准备两台虚拟机&#xff0c;我的是192.168.144.12,192.168.144.13 server换成zabbix服务器的ip地址 vim /etc/zabbix/zabbix_agentd.conf 2.创建自动…

CMU15445-2024fall-project4踩坑经历

project4目录Task1Task2ReconstructSeqScanTask3InsertCommitTxnMgrDbgGenerateNewUndoLog And GenerateUpdateUndoLogUpdate And Delete垃圾回收Task4Index Insert并发控制Index ScanDelete、Update并发控制主键更新Bonus 1Bonus 2处理写倾斜感谢CMU的教授们给我们分享了如此精…

C++20 协程

摘要&#xff1a;C20 引入的协程机制为异步编程提供了轻量级解决方案&#xff0c;其核心优势在于通过用户态调度实现高效的上下文切换&#xff0c;适用于 I/O 密集型任务、生成器模式等场景。本文系统阐述 C20 协程的底层原理与实践要点&#xff0c;首先解析协程的基本结构&…

《计算机组成原理与汇编语言程序设计》实验报告二 基本数字逻辑及汉字显示

目 录 一、实验学时 二、实验目的 三、实验要求 四、实验内容 五、实验步骤 1、打开Logisim软件&#xff0c;列出并行四位二进制全加器逻辑电路真值表&#xff0c;并使用与、或、非、异或等基本原件实现并行四位二进制全加器逻辑电路&#xff0c;铺设完成后进行测试进而…

问卷调查小程序的设计与实现

问卷调查小程序的设计与实现&#xff1a;技术与功能全解析在数字化时代&#xff0c;问卷调查成为数据收集的重要工具。一款高效、易用的问卷调查小程序能够显著提升用户体验和数据质量。本文将深入探讨基于现代技术栈的问卷调查小程序的设计与实现&#xff0c;涵盖核心功能、技…

STM32项目实战:正弦波

波形发生器对我的钱包不怎么友好&#xff0c;手里面有stm32f103c8t6&#xff0c;于是就想,放在哪儿吃灰也是吃灰&#xff0c;不如做个正弦波发生器。方案 dac没怎么用过&#xff0c;所以打算使用输出模拟正弦波。我们决定采用以下方案&#xff1a;1.使用TIM2_CH3&#xff08;PA…

Unity 时间抗锯齿(Temporal Antialiasing, TAA)技术解析

时间抗锯齿&#xff08;Temporal Antialiasing, TAA&#xff09;技术解析 一、什么是时间抗锯齿&#xff08;TAA&#xff09;&#xff1f; 时间抗锯齿&#xff08;TAA&#xff09;是一种先进的实时抗锯齿技术&#xff0c;通过在时间维度上积累多帧渲染数据&#xff0c;实现比传…

uniapp打开导航软件并定位到目标位置的实现

/*** 打开导航* param location 经纬度(例如&#xff1a;"117.214713,39.116884")* param address 地址*/ export function mapNavigation(location, address) {const locationArr location.split(,)const longitude locationArr[0]const latitude locationArr[1]…