Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器。
当配置正确时,Apache 为 HTML 页面服务, Tomcat 实际上运行 JSP 页面和 Servlet 。另外,Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的功能(但处理静态 HTML 的能力不如 Apache), 另外它还是一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。
设计 Tomcat 的 Dockerfile
在 Dockerfile 上搜索 Tomcat 相关镜像的个数:
# sudo docker search tomcat | wc -l
下面以 sun_jdk 1.6 、 Tomcat 7.0 、ubuntu 14.04 为环境介绍如何定制自己的 tomcat 镜像。
准备工作
创建 tomcat7.0_jdk1.6 文件夹,从 www.oracle.com 上下载 sun_jdk 1.6 压缩包,解压为 jdk 目录。
创建 Dockerfile 和 run.sh 文件:
mkdir tomcat7.0_jdk1.6
cd tomcat7.0_jdk1.6/
touch Dockerfile run.sh jdk
下载 Tomcat, 可以到官网下载最亲折版本,也可以直接使用下面链接中给出的版本:
# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.82/bin/apache-tomcat-7.0.82.zip
解压后,tomcat7.0_jdk1.6 目录底下应如下所示
# ls
Dockerfile run.sh apache-tomcat-7.0.82
Dockerfile 文件和其他脚本文件
Dockerfile 文件内容如下:
# 继承 我们创建的sshd 的镜像
FROM sshd:dockerfile
# 作者信息
MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com)
# 设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive
RUN echo "Asia/Shanghai" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata
# 安装跟 tomcat 用户认证相关的软件
RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 设置 tomcat 的环境变量
ENV CATALINA_HOME /tomcat
ENV JAVA_HOME /jdk
# 复制 tomcat 和 jdk 文件到镜像中
ADD apache-tomcat-7.0.82 /tomcat
ADD jdk /jdk
ADD create_tomcat_admin_user.sh /create_tomcat_admin_user.sh
ADD run.sh /run.sh
RUN chmod +x /*.sh
RUN chmod +x /tomcat/bin/*.sh
EXPOSE 8080
CMD ["/run.sh"]
创建 tomcat 用户和密码脚本文件 create_tomcat_admin_user.sh 文件,内容为:
#!/bin/bash
if [ -f /.tomcat_admin_created ] ; then
echo "Tomat 'admin' user already created"
exit 0
fi
# generate password
PASS=${TOMCAT_PASS:-$(pwgen -s 12 1)}
_word=$( [ ${TOMCAT_PASS} ] && echo "preset" || echo "random" )
echo "=> Creating and admin user with a ${_word} password in Tomcat"
sed -i -r 's/<\/tomcat-users>//' ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="manager-gui"/>' >> ${CATALINA_HMOE}/conf/tomcat-users.xml
echo '<role rolename="manager-script"/>' >> ${CATALINA_HMOE}/conf/tomcat-users.xml
echo '<role rolename="manager-jmx"/>' >> ${CATALINA_HMOE}/conf/tomcat-users.xml
echo '<role rolename="admin-gui"/>' >> ${CATALINA_HMOE}/conf/tomcat-users.xml
echo '<role rolename="admin-script"/>' >> ${CATALINA_HMOE}/conf/tomcat-users.xml
echo "<user username=\"admin\" password=\"${PASS}\" roles=\"manager-gui,manager-script, manager-jmx, admin-gui, admin-script\"/>" >> ${CATALINA_HOME} /conf/tomcat-users.xml
echo '</tomcat-users>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo "=> Done!"
touch /.tomcat_admin_created
echo "================================================"
echo "You can now configure to this Tomcat server using:"
echo ""
echo " admin:${PASS}"
echo ""
echo "================================================"
编写 run.sh 脚本文件,内容为:
#!/bin/bash
if [ ! -f /.tomcat_admin_created ]; then
/creaate_tomcat_adin_user.sh
fi
/usr/sbin/sshd -D &
exec ${CATALINA_HOME}/bin/catalina.sh run
创建和测试镜像
通过下面的命令创建镜像 tomcat7.0:jdk1.6:
# sudo docker build -t tomcat7.0:jdk1.6 .
查看下目前本地的镜像:
# sudo docker images
启动一个 tomcat 容器进行测试
# sudo docker run -d -P tomcat7.0:jdk1.6
通过 docker logs 得到 tomcat 的密码
# sudo docker logs 3cd
(3cd 是镜像的名称)
查看映射的端口信息:
# sudo docker ps
在本地使用浏览器登录 Tomcat 管理界面,访问http://127.0.0.1:49158
49158 端口在 sudo docker ps 查看
注意 :
在实际环境中,可以通过使用 -V 参数来挂载 Tomcat 的日志文件、程序所在目录、以及与 Tomcat 相关的配置。