工具-让工具替你干活docker

Apache Tomcat遇上docker--猫与鲸鱼的故事

2019-01-12  本文已影响0人  robot_test_boy

Apache Tomcat简称tomcat,tomcat是由Apache软件基金会开发的开源的web服务器和servlet引擎(又叫servlet容器)。前者为纯Java代码运行的HTTP Web服务器;后者管理和运行servlet,而servlet是运行在 Web 服务器上的作为HTTP客户端请求和HTTP服务器上数据库或应用程序之间的中间层。

最近容器火的不得了,尤其是docker。本文分享的内容就和docker有关,准备环境参见docker实践篇之hello world。下面步入正题:介绍以docker方式部署tomcat容器实现web服务器,包括3个场景:1)快速上手部署一个服务器;2)部署多个服务器;3)控制web服务器返回的内容。

当tomcat遇上docker

快速上手部署一个Tomcat服务器

熟悉一个新的事务tomcat,先立个小目标:快速上手搭建一个服务器。为何要快速上手呢?往往学一个新技术是个漫长的过程,投入很多却迟迟没有回报。为了鼓励自我,学新事物要快,抓住兴趣正浓的机会,让自己看到回报。陌生的东西如何才能快速上手呢?那就是站在巨人的肩膀上,找到官网上对tomcat的说明,按照推荐的方式先部署起来,然后再慢慢研究。

Docker官网针对Tomcat的How to use this image章节开始,首先指定端口启动容器(本地无镜像则下载从网上下载),最后web访问tomcat服务器。

第1步切换root用户执行启动容器命令 :docker run -it --rm -p 8888:8080 tomcat:8.0

启动tomcat容器

容器启动时间长短取决于从网上下载镜像的网络速度,下载完成后启动在几分钟内。

tomcat启动过程

第2步web访问tomcat服务器,在浏览器中输入http://192.168.127.131:8888/。其中192.168.127.131为容器启动所在宿主机的网卡ip。

web访问tomcat服务器

看到回报没有,是不是很神奇,几分钟就部署好一个tomcat服务器,体现了容器的集装箱隔离和轻量化的优势,减少tomcat的依赖和不必要的麻烦。

快速上手部署完后,我们结合docker run部署命令总结下。如果在商用场景下,部署命令尚需改进。先看下启动容器的命令docker run [OPTIONS] IMAGE [COMMAND] [ARG...],其中options中参数 -i:以交互模式运行容器;-t:为容器重新分配一个伪输入终端,通常-t与 -i 一起使用;-p host_port:container_port 映射宿主机的指定端口到容器的指定端口或-p IP:host_port:container_port 映射宿主机指定地址的指定端口到容器的指定端口或 -p IP::port映射宿主机指定ip的任意端口到容器的指定端口。--rm即容器退出状态后自动删除容器。

通过以上介绍可知docker run -it --rm -p 8888:8080 tomcat:8.0,使用容器镜像tomcat:8.0,以交互方式一旦ctrl+c结束docker执行命令则tomcat服务器无法访问,网络上映射宿主机端口8888到容器的8080端口,启动一个容器但退出状态时自动删除容器。命令稍作修改见部署tomcat多容器场景,指定容器名称并以后台方式启动容器,docker run --name tomcat -d -p 8888:8080 tomcat:8.0。

部署多个Tomcat服务器

部署多个服务器主要是为将来测试负载均衡使用。

启动tomcat008容器:docker run --name tomcat008 -d -p 8888:8080 tomcat:8.0,

启动tomcat007容器:docker run --name tomcat007 -d -p 8887:8080 tomcat:8.0,

启动tomcat009容器:docker run --name tomcat009 -d -p 8889:8080 tomcat:8.0

按照以上启动顺序,依次检查是否可以访问http://192.168.127.131:8888/,http://192.168.127.131:8887/,http://192.168.127.131:8889/访问的界面都是一样的,三个tomcat服务器以不同的端口提供相同的服务。

还有一个问题:当容器的宿主机重启或关机开机后容器是不会自己启动的,还要一个个手工启动,麻烦且健壮性差,那怎么做到容器自动启动呢?在容器创建时添加 restart参数即可:docker run --name tomcat --restart=always  -d -p 8889:8080 tomcat:8.0

测试下:关机前有restart 参数且运行的容器,开机后容器自动启动了。

控制web服务器返回的内容

tomcat的代码目录结构

  |---bin:存放启动和关闭tomcat脚本

  |---conf:存放不同的配置文件(server.xml和web.xml);

  |---doc:存放Tomcat文档;

  |---lib/japser/common:存放Tomcat运行需要的库文件(JARS);

  |---logs:存放Tomcat执行时的LOG文件;

  |---src:存放Tomcat的源代码;

  |---webapps:Tomcat的主要Web发布目录(包括应用程序示例);

  |---work:存放jsp编译后产生的class文件。

tomcat访问的服务器也就是webapps下ROOT目录下的文件可以直接调用。

在浏览器中输入http://192.168.127.131:8888/,默认返回的内容是什么?

返回的是/usr/local/tomcat/webapps/ROOT目录里下index.jsp。只要在ROOT目录下创建index.html,文件中写"hello world,2019!"

那么当你调用http://192.168.127.131:8888/index.html,界面上返回的是"hello world,2019!"

能处理返回内容,控制多个主机的返回内容,也就可以分别出来调用是哪个主机。那么由什么来决定返回内容?下次再去了解下。

上一篇下一篇

猜你喜欢

热点阅读