在很多情况下,我们会不满足于官方提供的Tomcat镜像。比如官方镜像的时区为UTC时间,并不是北京时间;再比如在特定硬件环境下,jdk的随机数生成器初始化过慢问题。此时,我们就会考虑构建自己的Tomcat镜像,满足我们实际应用的需要。

构建自己的Tomcat镜像有多种方式,常用的有两种

  1. 在官方提供的Tomcat镜像的基础上进行构建(以官方Tomcat镜像为父镜像)。官方的Tomcat镜像已经为我们做了很多工作,我们只需要修改部分内容即可。

  2. 根据openjdk镜像,参考官方Tomcat镜像的Dockerfile文件进行构建。我们可以完全按照自己的需求安装和配置Tomcat。当然,通过第一种方式也能达到这个目的,这不是本文的重点。

为了更好地演示Tocmat镜像的构建步骤,本文将按照第二种方式构建我们自己的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#securerand