在docker中用Tomcat运行web项目

栏目: Java · 发布时间: 6年前

内容简介:本文旨在用最通俗的语言讲述最枯燥的基本知识上一篇文章《为什么要用docker》已经讲述了什么是docker以及我们要用docker的原因,并且讲解了如何安装docker。这时候很多读者磨拳擦脚跃跃欲试但却发现安装好docker之后就无从下手了,那么,接下来,小编会从以下方面讲述docker的一些基础知识,当然,理论都是生硬的,所以小编选取了javaweb项目中最常用的一个软件--tomcat的安装和使用来引导学习一些docker相关的知识,借此让读者能够从实战的角度去理解docker为什么会有这些基础知识以

本文旨在用最通俗的语言讲述最枯燥的基本知识

上一篇文章《为什么要用docker》已经讲述了什么是 docker 以及我们要用docker的原因,并且讲解了如何安装docker。这时候很多读者磨拳擦脚跃跃欲试但却发现安装好docker之后就无从下手了,那么,接下来,小编会从以下方面讲述docker的一些基础知识,当然,理论都是生硬的,所以小编选取了javaweb项目中最常用的一个软件--tomcat的安装和使用来引导学习一些docker相关的知识,借此让读者能够从实战的角度去理解docker为什么会有这些基础知识以及如何使用这些基础知识。

我们知道,web开发和部署离不开tomcat,而在目前的实际情况是:

一个项目中,每个开发者本机电脑都有自己的tomcat或者用idea的内置tomcat,当我们开发完成提交测试时,测试服务器上也有一个tomcat;当项目上线时,线上服务器也有一个tomcat,因此就很容易出现一些奇奇怪怪的问题,比如在同事A电脑上能正常运行的,到同事B电脑上就出问题的;或者是在测试环境里一切正常,到了线上bug一堆。这时候docker就有了用武之地,项目负责人把docker的tomcat镜像做好了之后上传到镜像仓库,项目成员的电脑环境、测试环境、线上环境均拉取这个tomcat使用,就能保持在所有的环境下tomcat的版本、设置都是一致的,避免了一些非技术的问题。

那么,现在我们就用docker来做一个tomcat的环境。

  1. 镜像的查找和拉取

首先,我们需要去镜像仓库找到我们要的镜像,查找镜像的语法是

docker search 镜像名称:镜像TAG

因此,查找Tomcat镜像:

docker search tomcat

有读者会疑问:什么是镜像TAG?

镜像的TAG值就是镜像的版本,就比如Tomcat有7.0、8.5、9.0等我们常用的版本,那么相应的这些软件被做成docker镜像之后,官方也会根据软件本身的版本对应出docker镜像的版本。

下图为查找结果:

在docker中用Tomcat运行web项目

可以看到,有很多的Tomcat镜像,那么我们应该怎么选用这些镜像呢?通常情况下,我们都知道官方的东西基本上代表安全无公害,因为可以看到右边有official标识为OK的就是官方的镜像,因此我们拉取第一个Tomcat就可以。

拉取镜像的语法是:

docker pull 镜像NAME:镜像TAG

因为我们要拉取Tomcat时,就可以这样写:

docker pull tomcat

有人说你怎么没加上镜像TAG

在拉取镜像时,如果加上镜像TAG,就会去查找是否有相应版本的镜像,如果有则拉取,如果没有则不拉去。而没有加TAG时,就默认代表拉取的是该镜像的最新版本。

假如需要拉取固定版本如拉取Tomcat8.5:

docker pull tomcat:8.5

就会相应的拉取了该版本的Tomcat镜像。

拉取成功之后,我们要查看我们拉取的版本,可以用命名:

docker images

可以看到,镜像列表里已经有了我们要拉取的Tomcat镜像

在docker中用Tomcat运行web项目

  1. 镜像的使用

镜像拉取下来之后,就如我们把从网上把下载到了本地电脑,但是没有任何生命的迹象,只有把它安装运行起来,才是一个活的容器,相应地,docker镜像只有在run起来的时候,才是一个有生命的容器。

创建和运行一个Tomcat容器只需要一行命令:

docker run  --name my_tomcat tomcat:8.5

其中 --name是指给容器起的名字,后面的tomcat是指下载的惊喜的NAME。8.5是镜像TAG。

到这里,一个tomcat服务就安装并且启动好了,因为默认的Tomcat端口都是8080,因此通常情况下此时我们用ip:8080就应该可以访问到Tomcat的标志性主页了。

但是!!!

事实并不是如此

因为我们是在docker下运行的容器,你们的脑海中可否还有docker的logo图?

大海就相当于我们的服务器(宿主机),而在海中游走的鲸鱼就是docker服务,而鲸鱼上的每一个集装箱都是一个容器,也就是说:

容器之间是互相隔离的,容器和宿主服务器也是互相隔离的。

因此我们在docker中运行了一个Tomcat的服务器,虽然端口是8080,

但是~

那是容器中的8080端口,因此我们通过ip:8080访问到的其实只是宿主机上的8080端口,并不是容器中的端口。

此时我们只需要把容器中的端口映射到宿主机上相应的端口即可。

端口映射只需要在运行时加入指令 -p 映射的宿主机端口:容器运行端口

如下,把容器运行的8080端口映射到宿主机的8099端口:

名称设置为my_tomcat_1

docker run -p 8099:8080  --name my_tomcat_1 tomcat:8.5

此时,你会发现,控制台打出了Tomcat启动的日志,启动完成后,我们在浏览器上用ip:8099访问,就会发现,Tomcat主页就显示了,说明Tomcat已经正确地运行起来了。

而用命令也可以查看容器是否起来,我们用docker ps 能查出本docker中运行的多有容器:

docker ps

在Tomcat运行的情况下,当你用ctrl+c回到命令行输入docker ps时,发现并没有找到my_tomcat_1这个Tomcat容器,而你重新用ip:8099发现Tomcat也不见了

噢 no!

什么原因?

这是因为: Linux 下用指令的方式运行程序,如果没有加后台执行的指令,那么在切回到命令时,程序就被杀死了。

因此,此时是因为我们运行Tomcat容器时,没有设置在后台运行,因此,需要在运行时,加上后台运行的指令,在docker中设置后台运行只需要在run命名中加入-d即可。

因此我们重新运行Tomcat,名称设置为my_tomcat_2:

docker run -d -p 8099:8080  --name my_tomcat_2 tomcat:8.5

运行完成后,此时我们放心大胆的回到命名行。重新执行docker ps

看控制台的输出:

在docker中用Tomcat运行web项目

可以看到:my_tomcat_2已经在运行,IMAGE代表所用镜像以及镜像版本,PORTS显示的是0.0.0.0:8099->8080/tcp 。代表的是把本机的8080端口映射到宿主机上的8099端口中。

但是,有读者又有疑问了:

”Tomcat是运行了,那我怎么把我的项目丢进去docker的Tomcat中呢?我用FTP工具链接到服务器上也找不到Tomcat在哪里,怎么办?”

上面提到,docker中容器和宿主机是互相隔离的,因此容器是不会在宿主机中有明确的文件夹路径,所以找不到才是对的。

但是既然端口都能映射,为啥文件夹不能映射呢?

在docker中,可以用 -v 指令指定把容器中的某个文件夹挂载到宿主机中

它的语法为:

-v 宿主机目录:容器目录

所以我们可以在创建运行一个容器时,同时可以把指定的文件夹挂载到宿主机中

通常情况下,Tomcat运行程序的文件是在webapps下的,那么可以在运行时把这个文件夹挂载到宿主机某个路径上(如:/data目录中),

名称设置为my_tomcat_3,端口设置为8098,要把容器中的webapps文件夹挂载到宿主机中/data/my_tomcat_3/webapps文件夹:

docker run -d -p 8098:8080 -v /data/my_tomcat_3/webapps:/usr/local/tomcat/webapps  --name my_tomcat_3  tomcat:8.5

此时我们再用FTP工具链接到宿主机服务器上,进入data文件夹,就会发现:my_tomcat_3/webapps文件夹已经躺在里边了,可见已经挂载成功。

在docker中用Tomcat运行web项目

把文件夹挂载成功之后,此时我们把web项目丢到宿主机中的webapps下,重启Tomcat容器后,再用ip:8099访问,就会展示我们的web项目的内容了。

到这里,docker中用Tomcat运行web项目的工作已经完成。

但是,回过头来想想,留下很多问题:

  1. docker run是创建并且运行容器,那我怎么控制容器的状态呢?比如启动和停止
  1. 为什么我在docker run时一直在重命名Tomcat的名字my_tomcat_1、my_tomcat_2、my_tomcat_3..
  2. 拉取和运行了那么多镜像,占据很多磁盘空间,怎么处理?
  3. 运行后的Tomcat,怎么查看日志?
  4. 我想要修改一下Tomcat中的server.xml的设置,但是宿主机中有没有这个文件,难道我要挂载出来吗?

看完此文之后,你有什么问题吗?欢迎读者把问题后台留言给小编或者加小编的微信,下一篇文章,小编会针对上面的问题以及读者提出的问题,做一个完整的解答以及把如何做好的Tomcat上传到镜像仓库做一个演示,所以:

关!注!我!

下期小编甚至会把常用的一些docker命名整理出来,方便大家集中记忆和使用!

觉得本文对你有帮助?请分享给更多人

关注「编程无界」,提升装逼技能

在docker中用Tomcat运行web项目


以上所述就是小编给大家介绍的《在docker中用Tomcat运行web项目》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Powerful

Powerful

Patty McCord / Missionday / 2018-1-25

Named by The Washington Post as one of the 11 Leadership Books to Read in 2018 When it comes to recruiting, motivating, and creating great teams, Patty McCord says most companies have it all wrong. Mc......一起来看看 《Powerful》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具