Skip to content

Docker软件安装

Tomcat 🚀

Apache Tomcat 是一个开源的 Java Servlet 容器和 Web 服务器,广泛用于部署和运行 Java Web 应用程序。它轻量级、易于配置,并且完全支持 Java EE 的 Servlet 和 JSP 规范。随着容器化技术的普及,Docker 成为了部署 Tomcat 的首选工具。本文将详细介绍 Tomcat 的核心特性,并手把手教你如何使用 Docker 快速安装和运行 Tomcat。

Tomcat 简介

什么是 Tomcat

Tomcat 是 Apache 软件基金会的一个开源项目,主要用于运行 Java Servlet 和 JavaServer Pages (JSP)。它是一个轻量级的 Web 服务器,适合中小型应用程序的部署。

Tomcat 的核心特性

  • Servlet 容器:支持 Java Servlet 规范,能够处理动态 Web 内容。
  • JSP 支持:支持 JavaServer Pages,允许在 HTML 中嵌入 Java 代码。
  • 轻量级:相比完整的 Java EE 应用服务器(如 JBoss、WebLogic),Tomcat 更加轻量,启动速度快。
  • 易于配置:通过简单的 XML 文件(如 server.xml)即可完成配置。
  • 跨平台:基于 Java 开发,可以在任何支持 Java 的平台上运行。

Tomcat 的应用场景

  • Java Web 应用程序:部署基于 Servlet 和 JSP 的 Web 应用。
  • 微服务架构:作为轻量级的 Web 服务器,支持微服务的部署。
  • 开发和测试环境:快速搭建本地开发和测试环境。

为什么使用 Docker 安装 Tomcat?

  • 简化安装流程:Docker 提供了一键式的 Tomcat 镜像,无需手动下载和配置 Tomcat。
  • 环境隔离:Docker 容器将 Tomcat 及其依赖项与主机环境隔离,避免环境冲突。
  • 快速部署:通过 Docker,可以在几秒钟内启动一个 Tomcat 实例。
  • 版本管理:可以轻松切换不同版本的 Tomcat,而无需卸载和重新安装。
  • 可移植性:Docker 镜像可以在任何支持 Docker 的平台上运行,确保环境一致性。

使用 Docker 安装 Tomcat 的步骤

拉取 Tomcat 镜像

Docker Hub 提供了官方的 Tomcat 镜像。运行以下命令拉取最新版本的 Tomcat 镜像:

shell
docker pull tomcat:latest

如果需要特定版本的 Tomcat,可以指定版本号,例如:

shell
docker pull tomcat:8.0

运行 Tomcat 容器

使用以下命令启动一个 Tomcat 容器:

shell
docker run -d --name my-tomcat -p 8083:8080 tomcat:latest

-d:以守护进程模式运行容器(后台运行)。

--name my-tomcat:为容器指定一个名称(my-tomcat)。

-p 8083:8080:将主机的 8083 端口映射到容器的 8080 端口(Tomcat 默认端口)。

tomcat:latest:使用的镜像名称。

访问 Tomcat

容器启动后,打开浏览器并访问 http://{实际IP地址}:8083,即可看到 Tomcat 的默认欢迎页面。对于高版本访问tomcat会出现404,解决办法:

出现这个问题的原因是在高版本中webapps文件夹下的文件是空的,会有一个webapps.dist的文件夹。所以,只需要将原来的webapps文件夹删除,把wenapps.dist复制成webapps即可。

shell
### 进入容器,注意我之前创建的容器名字就是tomcat,注意替换
docker exec -it my-tomcat bash 
### 进入tomcat目录,有可能进入tomcat后直接就在该目录
cd /usr/local/tomcat/
### 删除webapps
rm -rf webapps
### 将webapps.dist 复制成webapps
cp -r webapps.dist webapps
### 退出
exit

管理 Tomcat 容器

shell
# 查看运行中的容器
docker ps
# 停止容器
docker stop my-tomcat
# 启动已停止的容器
docker start my-tomcat
# 删除容器
docker rm my-tomcat

自定义 Tomcat 配置

挂载本地目录,可以将本地的 webapps 目录挂载到容器中,以便部署自定义的 Web 应用程序:

shell
docker run -d --name my-tomcat -p 8083:8080 -v ${PWD}/docker_volume/tomcat/webapps:/usr/local/tomcat/webapps -v ${PWD}/docker_volume/tomcat/webapps.dist:/usr/local/tomcat/webapps.dist tomcat:latest
# -v ${PWD}/docker_volume/tomcat/webapps:/usr/local/tomcat/webapps:将本地的 webapps 目录挂载到容器的 webapps 目录。
# -v ${PWD}/docker_volume/tomcat/webapps.dist:/usr/local/tomcat/webapps.dist:将本地的 webapps.dist 目录挂载到容器的 webapps.dist 目录

总结

Tomcat 是一个功能强大且易于使用的 Java Web 服务器,而 Docker 则为 Tomcat 的部署和管理提供了极大的便利。通过 Docker,我们可以快速启动 Tomcat 实例,并根据需求灵活配置。无论是开发、测试还是生产环境,Docker 都能帮助我们高效地管理 Tomcat。

RocketMQ 🚀

准备工作

shell
# 防火墙放开端口
# rmqnamesrv
sudo firewall-cmd --zone=public --add-port=9876/tcp --permanent
# rmqbroker
sudo firewall-cmd --zone=public --add-port=10912/tcp --permanent
sudo firewall-cmd --zone=public --add-port=10911/tcp --permanent
sudo firewall-cmd --zone=public --add-port=10909/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8081/tcp --permanent
# rocketmq-dashboard
sudo firewall-cmd --zone=public --add-port=8082/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

# 拉取镜像
docker pull apache/rocketmq:5.3.1
docker pull apacherocketmq/rocketmq-dashboard:latest

# 创建rmqbroker配置配置文件(主要是配置brokerIP1 = 10.0.1.6)
cat > /opt/qinshan/config/rocketmq/conf/broker.conf << EOF
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 10.0.1.6
EOF
cat /opt/qinshan/config/rocketmq/conf/broker.conf

# 批量清理旧容器
docker rm -f rmqnamesrv
docker rm -f rmqbroker
docker rm -f rocketmq-dashboard

启动容器

shell
# 启动 NameServer
# docker rm -f rmqnamesrv
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:5.3.1 sh mqnamesrv
# docker logs -f rmqnamesrv

# 启动 Broker 和 Proxy
# docker rm -f rmqbroker
docker run -d \
--name rmqbroker \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-p 8080:8080 -p 8081:8081 \
-e "NAMESRV_ADDR=10.0.1.6:9876" \
-v /opt/qinshan/config/rocketmq/conf/broker.conf:/home/rocketmq/rocketmq-5.3.1/conf/broker.conf \
apache/rocketmq:5.3.1 sh mqbroker --enable-proxy \
-c /home/rocketmq/rocketmq-5.3.1/conf/broker.conf
# docker exec -it rmqbroker bash -c "tail -n 10 /home/rocketmq/logs/rocketmqlogs/proxy.log"
# docker exec -it rmqbroker bash -c "cat /home/rocketmq/rocketmq-5.3.1/conf/broker.conf"

# 部署rocketmq-dashboard
# docker rm -f rocketmq-dashboard
docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=10.0.1.6:9876" -p 8082:8080 -t apacherocketmq/rocketmq-dashboard:latest