1. 程式人生 > >用Dockerfile構建java web環境(2)

用Dockerfile構建java web環境(2)

Dockerfile有兩種寫法:

(1)

FROM ubuntu:14.04
MAINTAINER *** "***@******.com"
RUN apt-get update
ADD jdk-8u77-linux-x64.tar.gz /usr/local/java
RUN cp /etc/profile /etc/profile.bak
ENV JAVA_HOME /usr/local/java/jdk1.8.0_77
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH .:$JAVA_HOME/lib
ADD apache-tomcat-7.0.75.tar.gz /usr/local/tomcat
COPY xxx.war /usr/local/tomcat/apache-tomcat-7.0.75/webapps/
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
RUN dpkg-reconfigure -f noninteractive tzdata
ENV LANG C.UTF-8
EXPOSE 8080
ENTRYPOINT /usr/local/tomcat/apache-tomcat-7.0.75/bin/startup.sh && /bin/bash

這個dockerfile先是把jdk拷貝進映象,然後配置jdk的環境變數

然後把tomcat拷貝進去。由於這兩個都是gz包,所以拷進去的時候就直接解壓了。

然後把war包拷貝到tomcat的webapp目錄下。

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
RUN dpkg-reconfigure -f noninteractive tzdata
ENV LANG C.UTF-8
這個4行是設定時區,另一篇文章裡有寫。

最後是暴露80埠。

執行這個映象的命令是:

docker run -d -t -i -p 8082:8080 -v /var/log/redstarofsleep/xxx:/usr/local/tomcat/apache-tomcat-7.0.75/logs redstarofsleep/xxx

執行這個映象首先是埠對映,根據實際伺服器的情況對映埠。目錄對映將tomcat的日誌全部映射出來了。
第二種方式,這種方式的dockerfile比上面的簡單
FROM ubuntu:14.04
MAINTAINER *** "***@******.com"
RUN apt-get update
ADD jdk-8u77-linux-x64.tar.gz /usr/local/java
RUN cp /etc/profile /etc/profile.bak
ENV JAVA_HOME /usr/local/java/jdk1.8.0_77
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH .:$JAVA_HOME/lib
ADD apache-tomcat-8.5.11.tar.gz /usr/local/tomcat
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
RUN dpkg-reconfigure -f noninteractive tzdata
ENV LANG C.UTF-8
EXPOSE 8080
ENTRYPOINT /usr/local/tomcat/apache-tomcat-8.5.11/bin/startup.sh && /bin/bash

這個dockerfile比上一個少了將war包拷入tomcat的步驟。
一個地方少了,必定有一個地方多,執行的時候就稍微複雜一些。
docker run -d -t -i -p 8081:8080 -v /usr/local/xxx/webapps:/usr/local/tomcat/apache-tomcat-8.5.11/webapps/ -v /usr/local/xxx/logs:/usr/local/tomcat/apache-tomcat-8.5.11/logs/ -v /usr/local/xxx/work:/usr/local/tomcat/apache-tomcat-8.5.11/work redstarofsleep/xxx

這裡多了幾個目錄對映,除了logs之外,還把webapps和work目錄也映射出來了,war包只要放在映射出來的webapps目錄下即可。

這兩種方式各有優劣,第一種方式每次重新發布war包都要重新編譯docker映象,因為war是打包在映象裡的。優勢是每次的映象都會是一個相對乾淨的環境,除了日誌之外都是新的,且第一次做會比較簡單一點,以後每次都是相同的操作。但是由於每次都重新打映象,會遺留下很多老的沒用的映象和容器,需要人工清理。第二種方式相對第一種方式來說,首次操作會複雜一些,因為docker的檔案對映是將宿主機的目錄對映到容器內,所以第一次如果宿主機的目錄下是空的,對映進去會把容器內tomcat下的webapps目錄下的檔案全部刪除,想要保留需要先拷貝出來放到宿主機響應的目錄下。但是這種方式基本是一勞永逸的。以後就只要停止容器,拷入war包,重啟容器就可以了。

轉載請註明出處:http://blog.csdn.net/redstarofsleep