介绍
本文会讲述:
- 扩展Tomcat的官方Dockerfile
- 构建新的镜像
- 从修改过的新镜像启动容器
- 在容器里部署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/tomcat 0 [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 installation 0 [OK]
官方网站描述了所支持的标签:

我正在用的是版本7,所以选择了tomcat:7。
我是使用Docker的新手(在写这边文章的时候),因此不想称此文是“最佳实践”。本文所写的是我认为好用的实践,如果有不同意见也请告诉我。对于每一个想要启动的Docker容器,我都创建了自己的Dockerfile并且扩展了镜像。当然也完全可以不扩展镜像,而直接使用它。不过基于目标镜像构建我们自己的镜像应该是能稳定扩展别人工作成果的更合适的方式。
本文示例中,创建了一个简单的Dockerfile,如下:
FROM tomcat:7-jre7
MAINTAINER "Craig Trim <craigtrim@gmail.com>"
用如下命令构建镜像:
$ 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
|