我的第一个docker镜像-tomcat8-gmt8
Posted java编程之旅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的第一个docker镜像-tomcat8-gmt8相关的知识,希望对你有一定的参考价值。
最近在使用docker部署公司的小项目,在使用官方tomcat镜像过程中,发现tomcat中的时间与中国时间相差8小时,导致时间不一致的问题,即使容器时间与主机时间进行了同步,依然如此,最好的办法是自己build一个定制的tomcat。
新建一个目录,我这里路径是/data/docker/images/tomcat8-gmt8/,为本次编译tomcat镜像的工作目录,下面简称工作目录。
1、准备一:下载tomcat压缩版本
从tomcat官网下载你需要的tomcat版本,我这里选择的是tomcat8:8.5.31版本
解压apache-tomcat-8.5.31.tar.gz后/data/docker/images/tomcat8-gmt8/tomcat/,如图所示:
2、准备二:编写Dockerfile
在工作目录下新建文件Dockerfile:
vi Dockerfile
为方便,直接使用openjdk:8-jre镜像作为基础镜像,文件内容如下
FROM openjdk:8-jre
MAINTAINER kstrive
ENV JAVA_HOME /docker-java-home
ENV CATALINA_HOME /usr/local/tomcat
ADD tomcat $CATALINA_HOME
ENV PATH $CATALINA_HOME/bin:$PATH
ENV TIME_ZONE Asia/Shanghai
WORKDIR $CATALINA_HOME
RUN set -x \
\
&& rm bin/*.bat \
&& chmod +x bin/*.sh \
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
&& 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"]
注意:
chmod +x bin/*.sh语句,如果不添加运行可能会报以下错误:"catalina.sh": executable file not found in $PATH
时区问题,是通过以下两个语句修改tomcat使用的时区:
echo "${TIME_ZONE}" > /etc/timezone
ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime
3、编译镜像build
在build之前,确认一下工作目录下的文件,如图
其中test.sh是后面用于测试的脚本,也可以没有。
运行以下命令开始编译镜像:
docker build -t tomcat8-gmt8:8.5.31 .
注意命令最后有一个点(.),表示工作目录,编译过程日志如下:
编译成功,我们通过docker images命令,可以看到tomcat8-gmt8:8.5.31镜像了
4、测试
我们直接运行该镜像,并查看打印日志的时间是否与当前时间一致:
我们使用一个测试脚本test.sh保存运行容器命令,方便多次运行与调试,vi test.sh,文件内容为:
instName=tomcat-test
docker stop $instName
docker rm $instName
docker run -it \
--name=$instName \
-v /etc/localtime:/etc/localtime:ro \
-v $PWD/webapps:/usr/local/tomcat/webapps \
-v $PWD/logs:/usr/local/tomcat/logs \
-v $PWD/applogs:/usr/local/logs \
-p 8080:8080 \
--restart=always \
tomcat8-gmt8:8.5.31
一般情况下,使用tomcat镜像都需要通过-v参数挂载主机目录到容器的目录,以方便部署,如,本例中,将工作目录下的webapps挂载到容器tomcat的webapps目录,我们只要将war文件放在主机的工作目录下的webapps下即可。
修改文件运行权限chmod +x test.sh
运行./test.sh
可以看到,镜像已经成功运行,打印日志时间与当前时间一致。
以上是关于我的第一个docker镜像-tomcat8-gmt8的主要内容,如果未能解决你的问题,请参考以下文章