栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > 服务器

Docker自动部署Apache Tomcat的方法

服务器 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

介绍

本文会讲述:

  1. 扩展Tomcat的官方Dockerfile
  2. 构建新的镜像
  3. 从修改过的新镜像启动容器
  4. 在容器里部署RESTful的Web服务并测试

Apache Tomcat

使用docker search可以查到最流行的(和官方的)Docker Tomcat容器:

$ sudo docker search tomcat
[sudo] password for craig: 
NAME   DEscriptION     STARS   OFFICIAL  AUTOMATED
tomcat  Apache Tomcat is an open source implementa...  103    [OK]    
tutum/tomcat      Tomcat image - listens in port 8080. For t...  38   [OK]
consol/tomcat-7.0    Tomcat 7.0.57, 8080, "admin/admin"12   [OK]
consol/tomcat-8.0    Tomcat 8.0.15, 8080, "admin/admin"9   [OK]
consol/tomcat-6.0    Tomcat 6.0.43, 8080, "admin/admin"6   [OK]
consol/tomcat-4.1    Tomcat 4.1.40, 8080, "admin/admin"4   [OK]
consol/tomcat-5.0    Tomcat 5.0.30, 8080, "admin/admin"4   [OK]
consol/tomcat-5.5    Tomcat 5.5.36, 8080, "admin/admin"4   [OK]
consol/tomcat-3.3    Tomcat 3.3.2, 8080, "admin/admin" 4   [OK]
readytalk/tomcat-native Debian backed Tomcat + Tomcat Native Library  3   [OK]
malderhout/tomcat    Tomcat7 with OpenJDK7 on CentOS7 3   [OK]
dordoka/tomcat     Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba...  3   [OK]
meirwa/spring-boot-tomcat-mysql-app  a sample spring-boot app using tomcat and ...  2   [OK]
h2000/docker-tomcat-youtrack     Dockerfile for youtrack to run under tomcat.  1   [OK]
nicescale/tomcat    Tomcat service for NiceScale. http://nices...  1   [OK]
dmean/liferay-tomcat  Debian + Liferay CE Tomcat    1   [OK]
atomi/tomcat  0   [OK]
mminke/apache-tomcat  A Docker image which contains the Apache T...  0   [OK]
ericogr/tomcat     Tomcat 8.0.21, 8080, "docker/docker"      0   [OK]
holmes/tomcat  0   [OK]
paulkling/tomcat0   [OK]
dynamind/tomcat 0   [OK]
fabric8/tomcat-8.0   runs Apache Tomcat 8.0 with jolokia enable...  0   [OK]
learninglayers/tomcat     0   [OK]
dmglab/tomcat      CentOS 7 based tomcat installation0   [OK]

官方网站描述了所支持的标签:

我正在用的是版本7,所以选择了tomcat:7。

我是使用Docker的新手(在写这边文章的时候),因此不想称此文是“最佳实践”。本文所写的是我认为好用的实践,如果有不同意见也请告诉我。对于每一个想要启动的Docker容器,我都创建了自己的Dockerfile并且扩展了镜像。当然也完全可以不扩展镜像,而直接使用它。不过基于目标镜像构建我们自己的镜像应该是能稳定扩展别人工作成果的更合适的方式。

本文示例中,创建了一个简单的Dockerfile,如下:

FROM tomcat:7-jre7
MAINTAINER "Craig Trim "

用如下命令构建镜像:

$ sudo docker build -t craig/tomcat .

这样扩展的一个好处是简化了环境。最终,我要为Eclipse、MySQL和其它应用使用容器。我会给每个应用一个简化的命名空间和镜像名称。做项目的时候,我推荐使用项目的代码名称作为容器的命名空间。我也简化了标签名称。这些都是很小的注意事项,不过又很重要。在大型项目中,有很多开发人员参与,这样的方式就会很有帮助。通用的命名空间,简化的镜像名称和标签,会帮助项目成员更方便得使用官方项目镜像。

我的示例如下:

tomcat:7-jre7  ns/tomcat
mysql:5.6.23  ns/mysql
fgrehm/eclipse:v4.4.1  ns/eclipse

ns代表命名空间,每个项目成员都能理解。启动容器只需要记住项目代码名(命名空间)和应用名称即可。

运行Tomcat

如下命令会运行Tomcat,并将容器的8080端口暴露到宿主机器的8080端口:

$ sudo docker run -p 8080:8080 craig/tomcat

如果还需要从这个镜像启动容器,只需要:

$ sudo docker run -p 8081:8080 craig/tomcat

测试tomcat已经启动:

扩展Dockerfile

我需要扩展Dockerfile,来实现Maven的自动部署。需要添加settings.xml,更新tomcat-user.xml文件。如下所示:

tomcat-users.xml:








settings.xml:



 

TomcatServer
craig
password
 

这些文件和Dockerfile放在同一个目录下。

Dockerfile更新为:

FROM tomcat:7-jre7

MAINTAINER "Craig Trim "

ADD settings.xml /usr/local/tomcat/conf/
ADD tomcat-users.xml /usr/local/tomcat/conf/

当镜像构建时,配置文件会被放置到正确目录下。从这个镜像启动的任意容器都会包含这些文件。

重构镜像

用之前的方法重新构建镜像:

$ sudo docker build -t craig/tomcat .
Sending build context to Docker daemon 5.632 kB
Sending build context to Docker daemon 
Step 0 : FROM tomcat:7-jre7
---> 77eb038c09d1
Step 1 : MAINTAINER "Craig Trim "
---> Using cache
---> cadc51a3054c
Step 2 : ADD settings.xml /usr/local/tomcat/conf/
---> Using cache
---> 5009ba884f1f
Step 3 : ADD tomcat-users.xml /usr/local/tomcat/conf/
---> Using cache
---> 33917c541bb5
Successfully built 33917c541bb5

可以查看镜像历史:

$ sudo docker history craig/tomcat
IMAGE CREATEDCREATED BY     SIZE
33917c541bb5    4 hours ago     /bin/sh -c #(nop) ADD file:c1d08c42d5808537b4  1.761 kB
5009ba884f1f    4 hours ago     /bin/sh -c #(nop) ADD file:5dd8f0f6d0cd64de3c  212 B
cadc51a3054c    4 hours ago     /bin/sh -c #(nop) MAINTAINER "Craig Trim 

所做的变动是四小时之前发生的。现在可以从修改过的镜像启动容器,来测试自动化部署。

部署到Tomcat

这可能应该是另外一篇教程的主题,不过检验Tomcat安装是否成功的最佳方式就是部署一个WAR文件。我用Maven创建了一个简单的JavaEE项目,结构如下:

$ tree
.
+-- pom.xml
+-- src
¦  +-- main
¦  ¦  +-- java
¦  ¦    +-- com
¦  ¦      +-- trimc
¦  ¦ +-- blogger

如下插件(在pom.xml文件里)指定了部署信息,包括暴露的端口和用户名密码:


org.apache.tomcat.maven
tomcat7-maven-plugin
2.2

http://localhost:8080/manager/text
TomcatServer
/sample
craig
password


使用Maven将其部署到Tomcat:

$ mvn tomcat7:deploy
[INFO] Scanning for projects...
[INFO]  
[INFO] ------------------------------------------------------------------------
[INFO] Building Test Runtime 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO] 

*** SNIP ***

[INFO] --- tomcat7-maven-plugin:2.2:deploy (default-cli) @ sandbox-web2 ---
[INFO] Deploying war to http://localhost:8080/test 
Uploading: http://localhost:8080/manager/text/deploy?path=%2Ftest
Uploaded: http://localhost:8080/manager/text/deploy?path=%2Ftest (1352 KB at 18512.6 KB/sec)

[INFO] tomcatManager status code:200, ReasonPhrase:OK
[INFO] OK - Deployed application at context path /test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.495 s
[INFO] Finished at: 2015-03-31T19:08:12-07:00
[INFO] Final Memory: 15M/506M
[INFO] ------------------------------------------------------------------------

Tomcat日志显示如下:

Apr 01, 2015 2:08:12 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.9 09/02/2011 11:17 AM' 
Apr 01, 2015 2:08:12 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive /usr/local/tomcat/webapps/test.war has finished in 826 ms

输出如下图:

结论

什么是至关重要的?

我们不需要安装Tomcat,而是需要在Dockerfile定义,然后从镜像里启动容器。似乎看起来比下载Tomcat,解压,运行启动脚本要复杂一些。

这样做带来的好处包括:

  1. 不是所有应用都像Tomcat一样易于安装。
  2. 几乎所有应用在安装后都需要额外的配置。

Docker的作用有点类似Vagrant/Puppet/Chef/Ansible等。需要写一个脚本定义环境,之后build工具就可以自动搭建出环境。在这里Docker的优势显而易见,那就是比虚拟机更为轻量。大多数情况下,就为了使用Tomcat而占用整个虚拟机会造成资源的浪费。而且很多程序员是在笔记本上工作,也很难同时启动多个虚拟机。

这也就是Docker的第三个好处:可以从同一个镜像启动多个容器。启动多个容器所占用的资源比启动多个虚拟机要少得多,启动时间也非常快。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/179941.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号