1. 程式人生 > >構建Tomcat映象

構建Tomcat映象

在很多情況下,我們會不滿足於官方提供的Tomcat映象。比如官方映象的時區為UTC時間,並不是北京時間;再比如在特定硬體環境下,jdk的隨機數生成器初始化過慢問題。此時,我們就會考慮構建自己的Tomcat映象,滿足我們實際應用的需要。

構建自己的Tomcat映象有多種方式,常用的有兩種

  1. 在官方提供的Tomcat映象的基礎上進行構建(以官方Tomcat映象為父映象)。官方的Tomcat映象已經為我們做了很多工作,我們只需要修改部分內容即可。
  2. 根據openjdk映象,參考官方Tomcat映象的Dockerfile檔案進行構建。我們可以完全按照自己的需求安裝和配置Tomcat。當然,通過第一種方式也能達到這個目的,這不是本文的重點。

為了更好地演示Tocmat映象的構建步驟,本文將按照第二種方式構建我們自己的Tomcat。我們構建的依據當然是官方Tomcat映象的Dockerfile檔案,有想了解該檔案的內容朋友,可以移步至我的另一篇部落格:官方Tomcat映象Dockerfile分析及映象使用

我們會對官方的Dockerfile進行一定的精簡,去掉可有可無的指令,並新增我們自定義的指令。當然這個可有可無只是我個人認為,僅供參考。

改造後的Dockerfile檔案

FROM openjdk:8-jre

MAINTAINER [email protected]

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模式。