## 官方Tomcat鏡像 地址: 鏡像的Full Description中,我們可以得到許多信息,這里簡單介紹幾個: 1. Supported tags and respective Dockerfile links 支持的標簽,以及對應(yīng)的Dockerfile鏈接。一個Dockerfile可以對應(yīng)多個標簽,我們將以8.5.16-jre8版本的Dockerfile進行分析。 2. How to use this image 如何使用本鏡像,包括了以不同方式運行容器的命令,以及一些主要環(huán)境變量。這里講的不夠詳細,我們會詳細講解。 ## 準備知識:APR、Tomcat Native、Tomcat的APR模式 APR是Apache Portable Runtime的簡寫,其實就是一組用C語言編寫的動態(tài)鏈接庫,提供統(tǒng)一的API接口,用于訪問操作系統(tǒng)底層。詳見:。 Tomcat Native的主要作用是為tomcat提供訪問本地資源的功能。即利用APR庫,訪問網(wǎng)絡(luò)、生成隨機數(shù)等。Tomcat Native依賴于APR、OpenSSL、JDK。詳見:。 在配置好Tomcat Native后,可以在tomcat配置文件中開啟APR模式。開啟之后,Tomcat就會直接調(diào)用APR庫訪問網(wǎng)絡(luò),不用再通過jvm中轉(zhuǎn)。 因為APR和Tomcat Native是和具體的操作系統(tǒng)緊密關(guān)聯(lián)的,并不像java應(yīng)用那樣編譯好后就可以跨平臺使用。所以tomcat默認不安裝這些功能,而是根據(jù)需要,以及具體操作系統(tǒng),手工編譯源碼安裝。從一些資料上來看,開啟tomcat的APR模式后,對tomcat的性能并不一定會有很大的提升(在某些情況下甚至可能下降)。是否開啟APR模式要看具體的情況。個人認為,一般情況下,真到了要挖掘Tomcat性能的時候,使用tomcat集群將會是一種更好的解決方案,這對系統(tǒng)的性能、穩(wěn)定性、可靠性都有提升。 ## 分析Dockerfile(tomcat:8.5.16-jre8) 地址: 注意,這里以master分支的Dockerfile鏈接為例,和DockerHub上的Dockerfile鏈接可能會不一致,不過不影響我們接下來的分析。以下就是這個Dockerfile的內(nèi)容,我加了注釋加以說明: ``` #本鏡像的基礎(chǔ)鏡像。有興趣的話,可以自行在DockerHub上搜索openjdk,分析官方的openjdk鏡像的Dockerfile文件。這里為什么不用oracle提供的jdk(jre)?簡單地講,版權(quán)問題。 FROM openjdk:8-jre #聲明CATALINA_HOME環(huán)境變量,這個變量大家都了解。 ENV CATALINA_HOME /usr/local/tomcat #將Tomcat下的bin路徑加入到PATH環(huán)境變量中。 ENV PATH $CATALINA_HOME/bin:$PATH #創(chuàng)建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環(huán)境變量中,這樣Tomcat在查找Tomcat Native相關(guān)的動態(tài)鏈接庫時,會去查找TOMCAT_NATIVE_LIBDIR環(huán)境變量指定的路徑。 ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR #檢查、更新OpenSSL,這塊的細節(jié)我沒深究。 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服務(wù)器導(dǎo)入key,用于驗證tomcat壓縮文件的簽名,這塊也沒深究。 ENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C3703