低调人的gravatar头像
低调人 2019-11-06 14:27:20
在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指定别名的时候,不要出现重复。

 

个人博客

https://www.cicoding.cn/

申请假如我的群聊: 

点击链接加入群聊【Java/Python架构师①群】:https://jq.qq.com/?_wv=1027&k=y2jkgX0q

qq群号码 : 415777345

 

QQ扫码添加群: 

在Docker中安装Tomcat

 


打赏

已有2人打赏

已注销用户的gravatar头像 人间蒸发的gravatar头像
最近浏览
gyf0982034  LV2 2021年11月8日
13871042286  LV5 2021年5月19日
ljs4416  LV1 2021年3月12日
java小书童  LV18 2021年1月6日
liuxinying2002 2020年11月18日
暂无贡献等级
fanliansuo  LV25 2020年10月10日
sdtzwss  LV12 2020年9月25日
海盗来了  LV20 2020年6月30日
浅汐zzzz  LV1 2020年6月22日
maomao852  LV12 2020年5月28日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友