文章目录

前言

之前有个需求,一个tomcat里面放置了多个项目,但是每次部署都得重启一个tomcat,导致多个项目都得重启。

怎么解决呢:

​思路​​​: 配置多个tomcat,每个tomcat里面放置一个项目就不会相互干扰了。
具体​​​做法1​​​: Linux上安装多个tomcat,但是这样得总修改tomat的配置文件,烦。
​​​做法2(推荐)​​: 基于docker,docker部署多个tomcat映射不同的端口就好了,不用每次都修改配置文件,然后tomcat向外映射logs,和webapps目录就可以了。

为啥使用nginx的80端口转发这几个tomcat呢?

因为做的微信项目,我的域名映射的是80的端口,必须使用80访问各个tomcat的项目,所以就有这个需求。

1.linux安装docker

2.docker安装nginx和映射外部文件

3.docker 安装2个tomcat

  • 拉取一个tomcat镜像:
    ​​​docker pull tomcat​
  • nginx80端口转发到多个tomcat_docker


  • 安装2个tomcat容器 : tomcat8081和tomat8082
  • 安装tomat8081容器,配置外部目录
  • nginx80端口转发到多个tomcat_tomcat_02

使用临时tomcat容器把初始日志和webapps,conf文件放入外部目录tomcat8081和tomcat8082下

建个临时的tomcat容器

​docker run -d --name tmp-tomcat tomcat​

nginx80端口转发到多个tomcat_html_03


现在将这临时容器的logs和webapps的文件拷贝到tomcat8081和tomcat8082目录下.

首先查看,容器中的logs和webapps的位置:

​docker exec -it tmp-tomcat bash​

nginx80端口转发到多个tomcat_nginx_04


拷贝到外部目录tomcat8081下:

​docker cp tmp-tomcat:/usr/local/tomcat/logs /docker/tomcat8081/​

nginx80端口转发到多个tomcat_tomcat_05


​docker cp tmp-tomcat:/usr/local/tomcat/webapps /docker/tomcat8081/​

nginx80端口转发到多个tomcat_nginx_06

看下外部目录tomcat8081是否有文件了:

nginx80端口转发到多个tomcat_nginx_07


nginx80端口转发到多个tomcat_nginx_08


删除临时容器.

nginx80端口转发到多个tomcat_html_09

建立tomcat8081和tomcat8082 两个容器

​docker run -d -p 8081:8080 --name tomcat8081 -v /docker/tomcat8081/logs:/usr/local/tomcat/logs -v /docker/tomcat8081/webapps:/usr/local/tomcat/webapps -e TZ="Asia/Shanghai" --privileged=true tomcat​

​docker run -d -p 8082:8080 --name tomcat8082 -v /docker/tomcat8082/logs:/usr/local/tomcat/logs -v /docker/tomcat8082/webapps:/usr/local/tomcat/webapps -e TZ="Asia/Shanghai" --privileged=true tomcat​

nginx80端口转发到多个tomcat_html_10


nginx80端口转发到多个tomcat_docker_11

测试:

tomcat8081访问没问题:

nginx80端口转发到多个tomcat_html_12


tomcat8082访问没问题:

nginx80端口转发到多个tomcat_tomcat_13

分别在tomcat8081和tomcat8082容器上建一个项目.

tomat8081上建立一个demo1的项目。里面只有一个index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat8081</title>
</head>
<body>
这是tomcat8081页面
</body>
</html>

tomat8081上建立一个demo2的项目。里面只有一个index.html

nginx80端口转发到多个tomcat_nginx_14

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat8082</title>
</head>
<body>
这是tomcat8082页面
</body>
</html>

测试

重启项目,看下是否可以访问demo1和demo2项目;

nginx80端口转发到多个tomcat_nginx_15


在tomcat8081容器部署的demo1项目访问没问题:

nginx80端口转发到多个tomcat_nginx_16


在tomcat8082容器部署的demo2项目访问没问题:

nginx80端口转发到多个tomcat_nginx_17

4.nginx80端口转发

最关键的一步来了。

配置nginx.conf文件

nginx80端口转发到多个tomcat_tomcat_18


访问80端下的demo1的url就转发到​​http://本地ip:8081/demo1​​,也就是tomcat8081下的demo1项目;

访问80端下的demo2的url就转发到​​http://本地ip:8082/demo2​​,也就是tomcat8082下的demo2项目;

从而实现了对外只暴露80端口,不暴露tomcat的真实端口。

测试80端口转发

nginx80端口转发到多个tomcat_docker_19


tomcat8081的8081端口的demo1项目访问到了,成功。

nginx80端口转发到多个tomcat_nginx_20


tomcat8082的8082端口的demo2项目访问到了,成功。


至此,大功告成!!