我的第一个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之前,确认一下工作目录下的文件,如图

我的第一个docker镜像-tomcat8-gmt8

其中test.sh是后面用于测试的脚本,也可以没有。

    

    运行以下命令开始编译镜像:

        docker build -t tomcat8-gmt8:8.5.31 .

    注意命令最后有一个点(.),表示工作目录,编译过程日志如下:

我的第一个docker镜像-tomcat8-gmt8

编译成功,我们通过docker images命令,可以看到tomcat8-gmt8:8.5.31镜像了

我的第一个docker镜像-tomcat8-gmt8

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的主要内容,如果未能解决你的问题,请参考以下文章

Docker 镜像加速器

docker入门——镜像简介

如何查看dockerhub的所有镜像

Docker 镜像加速器

Docker 基础镜像

怎么在服务器上制作docker镜像