## 官方Tomcat镜像 地址: 镜像的Full Description中,我们可以得到许多信息,这里简单介绍几个: 1. Supported tags and respective Dockerfile links 支持的标签,以及对应的Dockerfile链接。一个Dockerfile可以对应多个标签,我们将以8.5.16-jre8版本的Dockerfile进行分析。 2. How to use this image 如何使用本镜像,包括了以不同方式运行容器的命令,以及一些主要环境变量。这里讲的不够详细,我们会详细讲解。 ## 准备知识:APR、Tomcat Native、Tomcat的APR模式 APR是Apache Portable Runtime的简写,其实就是一组用C语言编写的动态链接库,提供统一的API接口,用于访问操作系统底层。详见:。 Tomcat Native的主要作用是为tomcat提供访问本地资源的功能。即利用APR库,访问网络、生成随机数等。Tomcat Native依赖于APR、OpenSSL、JDK。详见:。 在配置好Tomcat Native后,可以在tomcat配置文件中开启APR模式。开启之后,Tomcat就会直接调用APR库访问网络,不用再通过jvm中转。 因为APR和Tomcat Native是和具体的操作系统紧密关联的,并不像java应用那样编译好后就可以跨平台使用。所以tomcat默认不安装这些功能,而是根据需要,以及具体操作系统,手工编译源码安装。从一些资料上来看,开启tomcat的APR模式后,对tomcat的性能并不一定会有很大的提升(在某些情况下甚至可能下降)。是否开启APR模式要看具体的情况。个人认为,一般情况下,真到了要挖掘Tomcat性能的时候,使用tomcat集群将会是一种更好的解决方案,这对系统的性能、稳定性、可靠性都有提升。 ## 分析Dockerfile(tomcat:8.5.16-jre8) 地址: 注意,这里以master分支的Dockerfile链接为例,和DockerHub上的Dockerfile链接可能会不一致,不过不影响我们接下来的分析。以下就是这个Dockerfile的内容,我加了注释加以说明: ``` #本镜像的基础镜像。有兴趣的话,可以自行在DockerHub上搜索openjdk,分析官方的openjdk镜像的Dockerfile文件。这里为什么不用oracle提供的jdk(jre)?简单地讲,版权问题。 FROM openjdk:8-jre #声明CATALINA_HOME环境变量,这个变量大家都了解。 ENV CATALINA_HOME /usr/local/tomcat #将Tomcat下的bin路径加入到PATH环境变量中。 ENV PATH $CATALINA_HOME/bin:$PATH #创建tomcat路径。 RUN mkdir -p "$CATALINA_HOME" #指定RUN、CMD、ENTRYPOINT命令的当前工作路径。 WORKDIR $CATALINA_HOME #Tomcat Native路径配置。 ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib #将TOMCAT_NATIVE_LIBDIR加入到LD_LIBRARY_PATH环境变量中,这样Tomcat在查找Tomcat Native相关的动态链接库时,会去查找TOMCAT_NATIVE_LIBDIR环境变量指定的路径。 ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR #检查、更新OpenSSL,这块的细节我没深究。 ENV OPENSSL_VERSION 1.1.0f-3 RUN { \ echo 'deb http://deb.debian.org/debian stretch main'; \ } > /etc/apt/sources.list.d/stretch.list \ && { \ echo 'Package: *'; \ echo 'Pin: release n=stretch'; \ echo 'Pin-Priority: -10'; \ echo; \ echo 'Package: openssl libssl*'; \ echo "Pin: version $OPENSSL_VERSION"; \ echo 'Pin-Priority: 990'; \ } > /etc/apt/preferences.d/stretch-openssl RUN apt-get update && apt-get install -y --no-install-recommends \ libapr1 \ openssl="$OPENSSL_VERSION" \ && rm -rf /var/lib/apt/lists/* #从key服务器导入key,用于验证tomcat压缩文件的签名,这块也没深究。 ENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C3703