Apache Tomcat:
一款开源、免费的轻量级 Java Web 应用服务器,主要运行 Servlet、JSP 程序,常用于部署 Java 网站和接口服务。简单来说,别人 Java 写好打包的程序,放到 Tomcat 里就能在服务器上启动。

安装
Docker Compose
services:
tomcat:
image: tomcat:9.0
container_name: tomcat
volumes:
- ./webapps:/usr/local/tomcat/webapps
ports:
- 8080:8080
restart: unless-stopped
参数说明(更多参数建议去看文档)
:::9.0(标签版本):适配 Java8,一般企业和旧项目常用
/usr/local/tomcat/webapps(路径):默认的应用部署目录
:::
使用
浏览器中输入 http://NAS的IP:8080 就能看到界面

TIP:打开显示 404 是正常现象,因为目前 webapps 路径下不存在 ROOT 目录时,Tomcat 没有默认页面可展示,所以返回 404。

演示 Demo
其实正常来说,Tomcat 会有一个官方演示 Demo(有人可能会纠结,这里说一下解决方法)

打开 Tomcat 容器的终端

TIP:默认工作目录就是 /usr/local/tomcat,如果不是的话就找到这个路径
cd /usr/local/tomcat

查看当前路径下有什么文件(webapps 映射到外部持久化的,webapps.dist 则是原本自带的欢迎页面和示例程序)
ls

将 webapps.dist 路径下的文件,移动到 webapps 路径
mv webapps.dist/* webapps

来到 webapps 文件夹下,可以看到文件

刷新一下浏览器,就能看到熟悉的示例画面

HTML 项目部署
清空 webapps 下的所有文件,新建一个 ROOT 文件夹

将 HTML 文件放到 ROOT 目录下就行

用 AI 简单写了一个 Hello World 页面

WAR 包部署
部署非常方便,先清空 webapps 目录的文件

TIP:用到的演示文件
https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war
先将 WAR 包重命名为 ROOT(因为之后会自动解压后的文件夹,如果不是 ROOT 名称,里面文件就不会识别运行)

将使用 WAR 包放到 webapps 路径即可,就会自动解压数据包的

能看到已经正常运行了

JAR 包部署
JAR 包其实在 Java 环境直接运行会更加方便,但是 Tomcat 上就有点麻烦不建议

TIP:用到的演示文件
//Spring Boot 项目,有 /hi 接口https://github.com/findyou230/hello-java-jar//只有信息打印,没有网页显示https://github.com/jarirajari/helloworld
将 JAR 包放到 webapps 路径下(不会自动解压的)

打开终端,来到 webapps 路径查看文件列表
cd /usr/local/tomcat/webappsls

运行 JAR 包(大概率会看见 8080 端口已经被占用,因为 Tomcat 本身就已经占用 8080,而启动的项目也是 8080 端口)
java -jar hello-0.0.1-SNAPSHOT.jar

解决方法:
- • 改打包前 JAR 项目的端口(如果你是开发者)
- • 修改 tomcat 镜像的内部端口
下面演示修改 tomcat 镜像的内部端口,打开终端

拷贝 server.xml 配置文件,复制到 webapps 目录
cp /usr/local/tomcat/conf/server.xml /usr/local/tomcat/webapps

打开编辑 server.xml 文件

找到这一行,把 port="8080" 改成 port="8090"

修改 Docker Compose 模板,重新部署(也可以将 server.xml 不放在 webapps 目录内,另外单独映射)
services: tomcat: image: tomcat:9.0 container_name: tomcat volumes: - ./webapps:/usr/local/tomcat/webapps - ./webapps/server.xml:/usr/local/tomcat/conf/server.xml ports: - 8080:8080 - 8090:8090 restart: unless-stopped
访问 8090 就能看到界面了

重复上面步骤,重新运行 JAR 包,没有报错了

访问 8080 就能看到有显示,说明已经正常运行了(后期不需要次次手动运行,加上启动命令 command 字段让 JAR 包随容器自动启动)

扩展
下面内容有可能有些地方说得不一定对,仅供参考

WAR 和 JAR 区别
打包成 WAR 包:
需要依赖外部的 Web 服务器(如 Tomcat)才能运行。这种方式下,需要先启动服务器,再部署并启动应用,因此对服务器的资源(如端口号、内存等)占用相对较多。但好处是能够充分利用独立服务器的性能与成熟能力,应用与服务器相互独立,便于利用服务器本身处理复杂的请求转发和集群配置。
打包成 JAR 包:
更加轻量级,不依赖外部服务器。因为 JAR 包内嵌了 Tomcat(或其他 Servlet 容器),所以可以直接通过 java -jar 命令运行,配置简单、上手方便。虽然内嵌的容器在某些高级定制化或运维管理功能上,可能不如独立部署的外部服务器那样强大和灵活,但其便捷性非常适合现代微服务架构的快速交付。
项目打包
现在的 Spring Boot 项目绝大多数都推荐使用 JAR 包的形式进行打包和部署,因为它完美契合了“约定大于配置”和微服务的理念,运维起来也更加省心。
SpringBoot 项目 JAR 打包
https://blog.csdn.net/m0_67392126/article/details/126115957
SpringBoot 项目 WAR 打包
https://www.jb51.net/article/202524.htm
总结
Tomcat 是一款轻量级 Java Web 应用服务器,用于部署 Java 项目。对于普通用户来说日常确实用不上,但有些游戏服务端、开源项目可以部署在 Tomcat 运行。三种部署方式里,WAR 包和 HTML 项目最省心,JAR 包建议直接用 Java 环境跑更方便。
综合推荐:⭐⭐⭐(一般用户用不上)
使用体验:⭐⭐⭐(常规开发工具,WAR/HTML 部署简单)
部署难易:⭐⭐(简单)︎
