Fork me on GitHub

在Docker中安装Tomcat

目录

Docker 中国官方镜像加速 http://www.docker-cn.com/registry-mirror

前言

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

查询Tomcat镜像列表

1
docker search tomcat

运行结果如下图:

在Docker中安装Tomcat

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

下载Tomcat镜像

执行命令下载tomcat镜像:

1
docker pull tomcat

运行Tomcat镜像

1
docker run -p 8081:8080 tomcat

运行效果如下图:

在Docker中安装Tomcat

访问tomcat:

当前docker服务运行在我的阿里云服务器上的,公网IP是39.106.18.21,所以打开浏览器输入:39.106.18.21:8081

效果如下:

在Docker中安装Tomcat

是不是很简单,一个tomcat就这样启动完成了!不得不说docker的强大!

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

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

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

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

在Docker中安装Tomcat

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

效果如下:

在Docker中安装Tomcat

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

查看运行中的Tomcat容器

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

1
docker ps

如下图所示:

在Docker中安装Tomcat

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

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

停止Tomcat容器

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

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

1
docker ps

如下图:

在Docker中安装Tomcat

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

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

1
docker stop 22

运行结果如图:

在Docker中安装Tomcat

回车之后,控制台输出“22”,表示已经成功停止了容器ID以“22”开头的tomcat容器。

这时候在去查看一下当前处于运行状态的容器列表:

在Docker中安装Tomcat

可以看到,tomcat容器已经被关闭了。

或许你会有疑问

  • 问题】:

之前启动了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容器:

1
2
> docker start 22
>

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

在Docker中安装Tomcat

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

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

在Docker中安装Tomcat

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

  • 【问题】:

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

1
2
> 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指定别名的时候,不要出现重复。

相关文章

微信打赏

赞赏是不耍流氓的鼓励