首页服务器Web服务器 Dockerfile制作官方Tomcat镜像及镜像使用详解

Dockerfile制作官方Tomcat镜像及镜像使用详解

这两天学习了Dockerfile感觉这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。 官方Tomcat镜像 地址:https://hub.docker.com/_/tomcat/ 镜像的Full Description中,我…

这两天学习了Dockerfile感觉这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。

官方Tomcat镜像

地址:https://hub.docker.com/_/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接口,用于访问操作系统底层。详见:http://apr.apache.org/。

Tomcat Native的主要作用是为tomcat提供访问本地资源的功能。即利用APR库,访问网络、生成随机数等。Tomcat Native依赖于APR、OpenSSL、JDK。详见:http://tomcat.apache.org/native-doc/。

在配置好Tomcat Native后,可以在tomcat配置文件中开启APR模式。开启之后,Tomcat就会直接调用APR库访问网络,不用再通过jvm中转。

因为APR和Tomcat Native是和具体的操作系统紧密关联的,并不像java应用那样编译好后就可以跨平台使用。所以tomcat默认不安装这些功能,而是根据需要,以及具体操作系统,手工编译源码安装。从一些资料上来看,开启tomcat的APR模式后,对tomcat的性能并不一定会有很大的提升(在某些情况下甚至可能下降)。是否开启APR模式要看具体的情况。个人认为,一般情况下,真到了要挖掘Tomcat性能的时候,使用tomcat集群将会是一种更好的解决方案,这对系统的性能、稳定性、可靠性都有提升。

分析Dockerfile(tomcat:8.5.16-jre8)

地址:https://github.com/docker-library/tomcat/blob/master/8.5/jre8/Dockerfile

注意,这里以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-3RUN { /  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-opensslRUN 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 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23RUN set -ex; / for key in $GPG_KEYS; do /  gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; / done#Tomcat相关文件的版本。ENV TOMCAT_MAJOR 8ENV TOMCAT_VERSION 8.5.16#Tomcat相关文件下载地址。ENV TOMCAT_TGZ_URL https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gzENV TOMCAT_ASC_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc#执行命令RUN set -x / / #下载Tomcat压缩文件 && wget -O tomcat.tar.gz "$TOMCAT_TGZ_URL" / && wget -O tomcat.tar.gz.asc "$TOMCAT_ASC_URL" / #进行签名验证 && gpg --batch --verify tomcat.tar.gz.asc tomcat.tar.gz / #解压Tomcat && tar -xvf tomcat.tar.gz --strip-components=1 / # 删除供Windows系统使用的.bat文件 && rm bin/*.bat / # 删除压缩文件 && rm tomcat.tar.gz* / / #安装Tomcat Native && nativeBuildDir="$(mktemp -d)" / && tar -xvf bin/tomcat-native.tar.gz -C "$nativeBuildDir" --strip-components=1 / && nativeBuildDeps=" /  dpkg-dev /  gcc /  libapr1-dev /  libssl-dev /  make /  openjdk-${JAVA_VERSION%%[-~bu]*}-jdk=$JAVA_DEBIAN_VERSION / " / && apt-get update && apt-get install -y --no-install-recommends $nativeBuildDeps && rm -rf /var/lib/apt/lists/* / && ( /  export CATALINA_HOME="$PWD" /  && cd "$nativeBuildDir/native" /  && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" /  && ./configure /   --build="$gnuArch" /   --libdir="$TOMCAT_NATIVE_LIBDIR" /   --prefix="$CATALINA_HOME" /   --with-apr="$(which apr-1-config)" /   --with-java-home="$(docker-java-home)" /   --with-ssl=yes /  && make -j "$(nproc)" /  && make install / ) / && apt-get purge -y --auto-remove $nativeBuildDeps / && rm -rf "$nativeBuildDir" / && rm bin/tomcat-native.tar.gz#验证Tomcat Native是否安装成功RUN set -e / && nativeLines="$(catalina.sh configtest 2>&1)" / && nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')" / && nativeLines="$(echo "$nativeLines" | sort -u)" / && if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then /  echo >&2 "$nativeLines"; /  exit 1; / fi#暴露8080端口EXPOSE 8080#容器启动时执行的命令。CMD ["catalina.sh", "run"]
本文来自网络,不代表1号站长-站长学院|资讯交流平台立场。转载请注明出处: https://www.1cn.cc/fwq/web/6316.html
上一篇Docker镜像构建的两种方法解析
下一篇 详解ubuntu14.04如何设置静态IP的方法
admin

作者: admin

这里可以再内容模板定义一些文字和说明,也可以调用对应作者的简介!或者做一些网站的描述之类的文字或者HTML!

为您推荐

评论列表()

    联系我们

    联系我们

    0898-88888888

    在线咨询: QQ交谈

    邮箱: email@wangzhan.com

    工作时间:周一至周五,9:00-17:30,节假日休息

    关注微信
    微信扫一扫关注我们

    微信扫一扫关注我们

    关注微博
    返回顶部