共计 2892 个字符,预计需要花费 8 分钟才能阅读完成。
在很多情况下,我们会不满足于官方提供的 Tomcat 镜像。比如官方镜像的时区为 UTC 时间,并不是北京时间;再比如在特定硬件环境下,jdk 的随机数生成器初始化过慢问题。此时,我们就会考虑构建自己的 Tomcat 镜像,满足我们实际应用的需要。
构建自己的 Tomcat 镜像有多种方式,常用的有两种
- 在官方提供的 Tomcat 镜像的基础上进行构建(以官方 Tomcat 镜像为父镜像)。官方的 Tomcat 镜像已经为我们做了很多工作,我们只需要修改部分内容即可。
- 根据 openjdk 镜像,参考官方 Tomcat 镜像的 Dockerfile 文件进行构建。我们可以完全按照自己的需求安装和配置 Tomcat。当然,通过第一种方式也能达到这个目的,这不是本文的重点。
为了更好地演示 Tomcat 镜像的构建步骤,本文将按照第二种方式构建我们自己的 Tomcat。我们构建的依据当然是官方 Tomcat 镜像的 Dockerfile 文件,有想了解该文件的内容朋友,可以移步至我的另一篇博客:官方 Tomcat 镜像 Dockerfile 分析及镜像使用。
我们会对官方的 Dockerfile 进行一定的精简,去掉可有可无的指令,并添加我们自定义的指令。当然这个可有可无只是我个人认为,仅供参考。
改造后的 Dockerfile 文件
FROM openjdk:8-jre
MAINTAINER dfengwei@163.com
ENV JAVA_HOME /docker-java-home
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
ENV TIME_ZONE Asia/Shanghai
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
RUN set -x \
\
# 下载 Tomcat 压缩文件
&& wget -O tomcat.tar.gz 'https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.5.16/bin/apache-tomcat-8.5.16.tar.gz' \
# 解压
&& tar -xvf tomcat.tar.gz --strip-components=1 \
# 删除供 Windows 系统使用的.bat 文件
&& rm bin/*.bat \
# 删除 Tomcat 压缩文件
&& rm tomcat.tar.gz* \
\
# 更改时区
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
\
# 处理 Tomcat 启动慢问题(随机数产生器初始化过慢)
&& sed -i "s#securerandom.source=file:/dev/random#securerandom.source=file:/dev/./urandom#g" $JAVA_HOME/jre/lib/security/java.security
EXPOSE 8080
CMD ["catalina.sh", "run"]
这个 Dockerfile 够精简了吧,里面的指令我加了注释,大家应该都能看懂。和官方的 Dockerfile 相比,虽然看上去是去掉了很多指令,但实际上也是完全够用了的。这里再大致列一下和官方 Dockerfile 的区别:
- 去掉了 Tomcat Native 相关组件。此组件用于支持 Tomcat 的 APR 模式,个人认为一般应用并不需要。
- 去掉了对下载的 Tomcat 做签名验证的相关内容。我们的 Tomcat 下载地址已经是官方地址。
- 增加了对时区的配置。
- 处理了 Tomcat 因随机数产生器初始化过慢而导致启动过慢问题。该问题可能在某些硬件条件下会出现,比如阿里云的 ECS。
注意:在增加指令进行定制化改造的同时,也要适当考虑镜像的通用性。
构建镜像
进入 Dockerfile 所在路径,执行以下命令构造镜像(注意末尾的点不能遗漏):
$ docker build -t dfengwei/tomcat:8.5.15-jre8 .
Docker 的 build 命令这里就不多做解释了,请自行百度或参考官方文档。构建后的镜像存于本机,只能本机使用。
命令中的 -t
参数用于指定该镜像的标签。标签格式一般是是:用户名 / 镜像名称: 镜像版本号
。
如果该镜像只是你本地使用,那么标签你可以随意取;但是如果你要使用 DockerHub 等托管服务托管该镜像,则必须使用托管服务商给你用户名作为标签的 用户名
,并且 镜像名称
和镜像版本号
遵循一定的规则。官方的托管服务是 DockerHub,非官方的有很多,比如阿里云的开发者平台。我将在之后的文章中介绍如何操作。
运行容器
$ docker run -d --name tomcat-test -p 8888:8080 dfengwei/tomcat:8.5.15-jre8
本容器的使用方式其实和官方的 Tomcat 是一样的,只是不支持 Tomcat 的 APR 模式。大家可以参考我之前的一篇博客:官方 Tomcat 镜像 Dockerfile 分析及镜像使用
更多 Tomcat 相关教程见以下内容:
CentOS 6.6 下安装配置 Tomcat 环境 http://www.linuxidc.com/Linux/2015-08/122234.htm
RedHat Linux 5.5 安装 JDK+Tomcat 并部署 Java 项目 http://www.linuxidc.com/Linux/2015-02/113528.htm
Tomcat 权威指南(第二版)(中英高清 PDF 版 + 带书签) http://www.linuxidc.com/Linux/2015-02/113062.htm
Tomcat 安全配置与性能优化 http://www.linuxidc.com/Linux/2015-02/113060.htm
Linux 下使用 Xshell 查看 Tomcat 实时日志中文乱码解决方案 http://www.linuxidc.com/Linux/2015-01/112395.htm
CentOS 64-bit 下安装 JDK 和 Tomcat 并设置 Tomcat 开机启动操作步骤 http://www.linuxidc.com/Linux/2015-01/111485.htm
Ubuntu 16.04 下安装 Tomcat 8.5.9 http://www.linuxidc.com/Linux/2017-06/144809.htm
搭建高性能高可用 Tomcat 服务器详解 http://www.linuxidc.com/Linux/2017-05/143486.htm
Tomcat 中 session 的管理机制 http://www.linuxidc.com/Linux/2016-09/135072.htm
Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-07/145911.htm