docker(12):alpinelinux安裝tomcat

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

1,tomcat

使用alpine環境自己打包安裝一個tomcat環境。
使用的是openjdk的jre,目標就是系統盡量的小。
依賴的東西盡量的少。構建tomcat最少需要一個jre。
使用的openjdk8的jre,才106mb。已經非常的小了。
http://blog.csdn.net/freewebsys/article/details/53744348
下載tomcat:
http://tomcat.apache.org/download-80.cgi
tomcat最新的版本是8.5.9 ,tomcat9 還在測試中,生產環境使用tomcat8就行了,效能足夠了。

2,整理下tomcat

tar -zxvf apache-tomcat-8.5.9.tar.gz mv apache-tomcat-8.5.9 tomcatcd tomcatrm -rf LICENSE NOTICE RELEASE-NOTES RUNNING.txt webapps/* bin/* conf/tomcat-users*

首先解壓縮,然後把tomcat裡面的亂七八糟的東西刪除下。
什麼ROOT,Manager,user啥的,防止別人獲得系統管理權限。
然後修改下service.xml,設定ROOT是 / 訪問。

<?xml version="1.0" encoding="UTF-8"?><Server port="8005" shutdown="SHUTDOWN">    <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>    <GlobalNamingResources/>    <Service name="Catalina">        <Connector port="8080" protocol="HTTP/1.1"                   connectionTimeout="20000" redirectPort="8443"/>        <Engine name="Catalina" defaultHost="localhost">            <Host name="localhost" appBase="webapps"                  unpackWARs="true" autoDeploy="true">                <Context docBase="ROOT" path="/"/>                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                       prefix="access_log" suffix=".txt"                       pattern="%h %l %T %t %r %s %b %{Referer}i %{User-Agent}i"/>            </Host>        </Engine>    </Service></Server>

其中刪除了JreMemoryLeakPreventionListener,關閉了tomcat的一個小時一次的full gc操作。
正常系統上線,記憶體一般都設定的很大不用擔心這個。
http://gao-xianglong.iteye.com/blog/2171441

3,打包tomcat

vi Dockerfile

# AlpineLinux open jre 8 & tomcatFROM demo/openjre8-base:1.0# add tomcatRUN mkdir -p /optCOPY tomcat /opt/tomcat# Set environmentENV TOMCAT_HOME /opt/tomcatENV PATH ${PATH}:${TOMCAT_HOME}/binENTRYPOINT ["/opt/tomcat/bin/catalina.sh", "run"]

注意這裡依賴openjre8 的鏡像,要提前打好。
構建:

docker build -t demo/tomcat-base:1.0 .

這樣打包的tomcat 只有 114.8 MB 。非常的小呢。

4,測試啟動

建立檔案夾:

mkdir -p /data/tomcat/ROOT/WEB-INFecho "ok" > /data/tomcat/ROOT/indexvi /data/tomcat/ROOT/WEB-INF/web.xml

寫一個web.xml 配置

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1"         metadata-complete="true"></web-app>

建立臨時檔案夾,log檔案夾,temp檔案夾,並設定許可權。
在做tomcat基礎包的時候,把ROOT檔案夾空出來,以後的應用要使用的時候再加上。

mkdir -p /data/tomcat/logsmkdir -p /data/tomcat/tempchcon -Rt svirt_sandbox_file_t /data/tomcat/logschcon -Rt svirt_sandbox_file_t /data/tomcat/temp

啟動tomcat:

docker run -d -p 8080:8080 -v /data/tomcat/ROOT:/opt/tomcat/webapps/ROOT \ -v /data/tomcat/logs:/opt/tomcat/logs -v /data/tomcat/temp:/opt/tomcat/temp \  --name tomcat-test demo/tomcat-base:1.0

啟動tomcat並綁定連接埠8080,映射目錄/data/tomcat/ROOT 作為主目錄,同時映射logs和temp檔案夾。
這樣直接可以看tomcat的日誌了。

#curl localhost:8080/indexok

測試下能訪問成功。
進入docker容器查看:
docker exec -it tomcat-test bash
bash-4.3# df

4,總結

本文的原文串連是: http://blog.csdn.net/freewebsys/article/details/53761840 未經博主允許不得轉載。
博主地址是:http://blog.csdn.net/freewebsys
特別注意一點。有的是docker啟動的時候並沒有帶動tomcat啟動,而是直接退出了。
這個並不是docker的問題。是因為使用的命令不對。要使用 catalina.sh run 這個參數,這個命令一直執行。
如果使用startup.sh的時候就上後台了。docker以為有問題了。shell執行完了,就直接退出了。然後就不能-d執行了。
也就是說,使用entrypoint 和cmd 命令必須是一個死迴圈一直執行的命令。
entrypoin和cmd的區別就是cmd可以被替換。
要是使用 docker run -it demo/tomcat-base bash這個命令執行兩個不同包。
entrypoint的包tomcat會啟動,而cmd打的包,tomcat被shell替換了。不啟動。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.