1. 程式人生 > >使用Linux alpine和Oracle JRE6構建tomcat6鏡像及應用容器化

使用Linux alpine和Oracle JRE6構建tomcat6鏡像及應用容器化

目錄 fff font rep linu png javafx eba jre

使用Linux alpine和Oracle JRE6構建tomcat6鏡像及應用容器化

Dockerhub上的Tomcat最小版本是7.x,公司的老應用必須使用Tomcat6.x,另外因Oracle JDK版權問題。在Dockerhub上的JDK鏡像都是使用Open JDK。公司要求使用Oracle JDK。
SO,找不到合適的,得自己動手構建一個。要求是:鏡像體積不要太大,使用Linux alpine,Oracle JDK6,Tomcat6。


一、構建jre6-alpine鏡像
1.步驟說明:

* mkdir /home/zxl_work/dockerfile/jdk6 && cd /home/zxl_work/dockerfile/jdk6 
* 上傳jdk壓縮包jre-6u35-linux-x64.bin
* touche Dockerfile,並將下面的內容拷貝進Dockerfile
* chmod +x jre-6u35-linux-x64.bin
* docker build -t zxl/jre6-alpine:v1.0 .

2.Dockerfile如下:

FROM crownpeak/alpine-glibc:2.23-r3

LABEL maintainer="zxl <[email protected]>"     provider="xxx Technologies, Ltd."

COPY jre-6u35-linux-x64.bin /usr/local/jre1.6.0_35.bin

ENV JAVA_VERSION="1.6.0_35"     JAVA_HOME="/usr/local/jre1.6.0_35"     JRE_HOME="/usr/local/jre1.6.0_35"     PATH="${PATH}:/usr/local/jre1.6.0_35/bin"     LANG=zh_CN.UTF-8

RUN cd /usr/local/ &&     yes | ./jre1.6.0_35.bin &&     rm -rf /usr/local/jre1.6.0_35.bin     /usr/local/jre1.6.0_35/plugin     /usr/local/jre1.6.0_35/bin/javaws     /usr/local/jre1.6.0_35/bin/keytool     /usr/local/jre1.6.0_35/bin/orbd     /usr/local/jre1.6.0_35/bin/pack200     /usr/local/jre1.6.0_35/bin/policytool     /usr/local/jre1.6.0_35/bin/rmid     /usr/local/jre1.6.0_35/bin/rmiregistry     /usr/local/jre1.6.0_35/bin/servertool     /usr/local/jre1.6.0_35/bin/tnameserv     /usr/local/jre1.6.0_35/bin/unpack200     /usr/local/jre1.6.0_35/lib/javaws.jar     /usr/local/jre1.6.0_35/lib/deploy*     /usr/local/jre1.6.0_35/lib/desktop     /usr/local/jre1.6.0_35/lib/*javafx*     /usr/local/jre1.6.0_35/lib/*jfx*     /usr/local/jre1.6.0_35/lib/amd64/libdecora_sse.so     /usr/local/jre1.6.0_35/lib/amd64/libprism_*.so     /usr/local/jre1.6.0_35/lib/amd64/libfxplugins.so     /usr/local/jre1.6.0_35/lib/amd64/libglass.so     /usr/local/jre1.6.0_35/lib/amd64/libgstreamer-lite.so     /usr/local/jre1.6.0_35/lib/amd64/libjavafx*.so     /usr/local/jre1.6.0_35/lib/amd64/libjfx*.so     /usr/local/jre1.6.0_35/lib/ext/jfxrt.jar     /usr/local/jre1.6.0_35/lib/ext/nashorn.jar     /usr/local/jre1.6.0_35/lib/oblique-fonts     /usr/local/jre1.6.0_35/lib/plugin.jar

二、構建tomcat6鏡像
1.構建tomcat6-alpine步驟:

* mkdir /home/zxl_work/dockerfile/tomcat6 && cd /home/zxl_work/dockerfile/tomcat6
* 上傳apache-tomcat-6.0.26.tar.gz
* touche Dockerfile,並將下面的內容拷貝進Dockerfile
* docker build -t zxl/tomcat6-alpine:v1.0 .

2.Dockerfile如下:

FROM zxl/jre6-alpine:v1.0

LABEL maintainer="zxl <[email protected]>"     provider="xxx Technologies, Ltd."

ENV CATALINA_HOME="/usr/local/tomcat"     PATH="${PATH}:/usr/local/tomcat/bin" 

WORKDIR $CATALINA_HOME

ADD apache-tomcat-6.0.26.tar.gz /tmp/apache-tomcat-6.0.26

RUN  mv /tmp/apache-tomcat-6.0.26/apache-tomcat-6.0.26/* /usr/local/tomcat &&     rm /usr/local/tomcat/bin/*.bat 

VOLUME ["/usr/local/tomcat/logs"]

EXPOSE 8080

CMD ["catalina.sh", "run"]

三、備註:
1.構建出來的Tomcat6的鏡像大小為135MB,跟官方的alpine大一點。
技術分享圖片

2.附應用的Dockfile

FROM zxl/tomcat6-alpine:1.0

LABEL maintainer="zxl <[email protected]>"     provider="xxx Technologies, Ltd."

COPY target/web.war /usr/local/tomcat/webapps

3.一些說明

3.1 tomcat容器啟動命令說明

--後臺運行tomcat容器
docker run -d  --name tomcat zxl/tomcat6-alpine:v1.0

--將主機的8088端口與tomcat容器端口進行映射
docker run -p 8088:8080 --name tomcat zxl/tomcat6-alpine:v1.0

--掛載日誌目錄到/data/docker/tomcat/logs
docker run  -v /data/docker/tomcat/logs:/usr/local/tomcat/logs  --name tomcat zxl/tomcat6-alpine:v1.0

--將主機的系統時間掛載到tomcat容器
docker run -v /etc/localtime:/etc/localtime:ro  --name tomcat zxl/tomcat6-alpine:v1.0

--設置tomcat容器默認時區為上海時區
docker run -v /etc/localtime:/etc/localtime:ro -e TZ="Asia/Shanghai" --name tomcat zxl/tomcat6-alpine:v1.0

--查看所有tomcat容器命令:
docker ps -a | grep tomcat

--刪除所有tomcat容器命令
docker rm -f `docker ps -a | grep tomcat | awk ‘{print $1}‘`

--進入tomcat容器
docker exec -it tomcat容器ID sh

--完整的tomcat啟動命令如下:暴露8088端口;掛載日誌目錄;與主機時間同步;設置上海時區;
docker run -d -p 8088:8080 --name tomcat   -v /data/docker/tomcat/logs1:/usr/local/tomcat/logs   -v /etc/localtime:/etc/localtime:ro   -e TZ="Asia/Shanghai"   zxl/tomcat6-alpine:v1.0 

3.2 日誌掛載目錄說明:

即使不使用-v 指定掛載tomcat的logs目錄。tomcat的logs目錄也會掛載在類似這樣的目錄:
/home/imagestorage/volumes/7198cfc8d509e18f2ca83ef57c2908dfb23b9e75f96cad1ccb2da4b7cf0074e3/_data
因為在tomcat的Dockerfile用了VOLUME為容器設置了一個掛載點。但註意的是不同的docker版本,可能目錄不同。

如果使用了-v指定掛載tomcat的logs目錄,則日誌文件會掛載在-v指定的主機目錄,不會再掛在類似以下目錄。
/home/imagestorage/volumes/7198cfc8d509e18f2ca83ef57c2908dfb23b9e75f96cad1ccb2da4b7cf0074e3/_data

使用Linux alpine和Oracle JRE6構建tomcat6鏡像及應用容器化