Docker(4)-安装Tomcat

前言

本人文章均引用或者复制:

公众号:

QQ群:806951874

在Docker中安装Tomcat

前言

前言

Tomcat镜像中已经包含jdk环境依赖,所以我们可以不用去启动java容器,直接运行tomcat容器就可以正常访问tomcat服务的,当然,你启动了java容器,也不会有什么影响,因为容器之间是隔离的。

查询Tomcat镜像列表

docker search tomcat

运行结果如下图:

一般情况下,都会选择下载stars数量最多的那个镜像,排在第一位的,一般都是官方提供的镜像。

下载Tomcat镜像

执行命令下载tomcat镜像:

docker pull tomcat

运行Tomcat镜像

docker run -p 8081:8080 tomcat

运行效果如下图:

访问tomcat:

访问地址为:ip:端口号,因为我的服务器地址为192.168.56.128,所以打开浏览器输入:192.168.56.128:8081

效果如下:

运行Tomcat404问题

解决docker启动tomcat容器访问端口显示404的问题,页面显示 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在

如果已经关闭防火墙,还出现404问题,那么就确定是tomcat的webapps文件夹下没有东西

  • 启动Tomcat容器

    docker run -p 8081:8080 tomcat
    
  • 查看已经启动的容器

    docker ps
    
  • 访问部署环境地址

    使用8011端口访问Tomcat失败

    ip:端口号

先查看防火墙状况

  • 先查看防火墙状态

    service firewalld status
    

出现下图所示代码,表示已经关闭防火墙

在这里插入图片描述

防火墙未关闭

如果防火墙没关闭,先关闭防火墙

# 关闭防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service
# 启动docker
systemctl start docker
# 重启docker
systemctl restart docker

防火墙关闭

  • 如果防火墙已经关闭但访问tomcat还是失败,那么使用如下命名进入tomcat的目录

    docker exec -it a5f02a3e6dde(启动的tomcat容器的容器id) /bin/bash
    
  • 查看当前文件夹内的所有文件

    ls
    
  • 进入webapps文件夹下,如果显示total 0,我们就需要把webapps.dist中的内容复制到webapps文件夹下

    cd webapps
    rm -f webapps
    cp -r webapps.dist webapps
    
  • 访问ip:主机端口(8081)

img

后台运行Tomcat

通过上述步骤搭建一个Tomcat,是不是很简单,一个tomcat就这样启动完成了!不得不说docker的强大!

有没有觉得上面的启动方式存在什么问题?如果在命令行界面中按下 Ctrl+C快捷键,会有什么效果?

没错,当前的tomcat容器会停止运行,服务无法访问!

有什么办法可以让tomcat容器一直运行呢?

解决办法其实很简单,答案就再在 docker run 命令里面设置一个 -d 的参数即可,如下:

docker run -d -p 8081:8080 --name tomcat tomcat

看到没有,和上面的启动tomcat的效果不同,控制台并未输出tomcat启动的日志信息,这时候我们打开浏览器,重新访问一下: 192.168.56.128:8081

效果如下:

img

通过上面两次docker run 启动tomcat的效果对比,我想大家也应该看得出区别了。所以,如果想让应用在后台一直运行的话,通过在 docker run 命令中使用“-d”参数来让容器处于后台运行。

查看运行中的Tomcat容器

通过下面命令,来查看当前服务器上运行的docker容器列表:

docker ps

如下图所示:

从图中可以看到tomcat容器的一些信息,在最后一列的“NAMES”显示的tomcat名称是“tomcat9”,这是因为你在docker run的时候,指定了“–name”别名,如果没有,docker会给你自动生成一个别名,一般情况下,我们还是建议使用–name来设置别名以及版本,方便实际使用容易区分。

然后tomcat容器的“PORTS”这一列,可以看到8081 > 8080 的信息,我们知道tomcat是运行在容器里面的,而tomcat默认的端口是8080,也就是说tomcat所在容器的对外端口是8080,我们如果想通过浏览器等访问到tomcat,就需要指定一个宿主机的端口与这个tomcat容器端口进行映射,也就是8081这个宿主机的端口。我们实际在浏览器访问的时候,就是通过8081来访问的,不能使用8080访问。端口号的话你也可以自定义的。

停止Tomcat容器

我们在jdk的文章中已经提及到停止容器的命令。

首先我们还是要查看一下目前正在运行状态的tomcat容器的信息(ID或者别名):

docker ps

如下图:

我们可以看到tomcat容器的ID以及别名的信息,这里我就直接使用ID进行容器的操作了。

通过docker stop实现容器停止关闭

docker stop tomcat9

疑问解答

问题一

问题

之前启动了tomcat容器,最后又把它关闭了,那我如果想再运行这个tomcat服务,怎么办?难道是要重新执行docker run这个命令来运行一个tomcat容器吗?

解答

我们要知道docker run这个命令的作用,其实是运行一个全新的容器。你执行一次docker run命令,就会生成一个新的容器,通过一个图来看一下具体情况:

在Docker中安装Tomcat

从图中可以看到,出现了很多tomcat的容器,而且“STATUS”状态为“Exited”。什么意思呢?因为我在操作的过程中,总共执行了5次docker run命令(这里忽略docker rm删除的容器),启动了5个全新的容器,每个容器之间是隔离的。同时,我又对每个tomcat容器执行了docker stop关闭命令,所以状态都是“Exited”。

所以,你每次启动的容器,docker都会给你保留下来,并不是说你执行了docker stop命令,容器就会被删除掉,答案是不会删除掉,只是标记一下容器的STATUS为Exited状态,处于未运行状态。

所以,如果想重新运行关闭状态下的容器,请使用docker start命令,比如我这里随便启动一个tomcat容器:

docker start 22

这时候通过docker ps查看处于运行状态的容器列表:

在Docker中安装Tomcat

说明tomcat容器已经启动成功了!

我们再通过docker ps -a查看所有的容器列表(包括未运行的容器),主要看一下tomcat容器的数量是否和上面的5个一致,并未重新运行一个全新的容器:

在Docker中安装Tomcat

可以看到,tomcat容器的数量并未发生变化,其中的一个tomcat容器处于运行状态,剩余4个都是Exited停止状态。

问题二

问题

如果上图中代表当前服务器上的容器情况,如果这时候我执行以下命令,你觉得会出现什么问题?

docker run -d -p 8082:8080 --name quirky_mayer tomcat

命令的含义应该都明白吧。启动一个新的tomcat容器,映射的宿主机端口号是8082(因为之前已经启动了一个8081的容器,宿主机的端口号不能冲突),给该tomcat容器起了一个别名“quirky_mayer”,注意观察一下上图的tomcat容器的别名信息哦~

解答

运行结果如下图:在Docker中安装Tomcat

其实错误信息很明显了,就是容器的别名“quirky_mayer”已经存在了,别的tomcat容器的别名也存在一个是“quirky_mayer”的。

这个别名校验是否重复,是针对所有容器而言的,并非是只判断运行状态的容器,那些Exited状态的容器也会进行校验。

因此,我们在使用–name指定别名的时候,不要出现重复。

posted @ 2021-11-23 09:55  will-yang  阅读(120)  评论(0编辑  收藏  举报