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

網(wǎng)友評(píng)論