阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

构建自己的Tomcat镜像

141次阅读
没有评论

共计 2892 个字符,预计需要花费 8 分钟才能阅读完成。

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

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

  1. 在官方提供的 Tomcat 镜像的基础上进行构建(以官方 Tomcat 镜像为父镜像)。官方的 Tomcat 镜像已经为我们做了很多工作,我们只需要修改部分内容即可。
  2. 根据 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 的区别:

  1. 去掉了 Tomcat Native 相关组件。此组件用于支持 Tomcat 的 APR 模式,个人认为一般应用并不需要。
  2. 去掉了对下载的 Tomcat 做签名验证的相关内容。我们的 Tomcat 下载地址已经是官方地址。
  3. 增加了对时区的配置。
  4. 处理了 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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2892字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中