原文日期:2017-06-25
在构建Docker基础镜像过程中,我将Docker基础镜像分为三层,从下到上分为操作系统层、Jdk层、Jdk-tomcat层。实际上也可以简化为两层,即将Jdk层和Jdk-tomcat层合并为一个,即Jdk-tomcat层。如果想更加简化的话也可以使用一层,或者连基础镜像层也不需要,直接构建应用层。但是出于考虑统一所有应用层的基础系统和软件信息一致,并且简化应用层镜像构建的脚本,所以构建基础镜像层。如下是三层基础镜像的构建过程。
1. 构建Centos基础镜像
构建Centos基础系统镜像,并往镜像中安装基本的软件。如下是Dockerfile-centos-base脚本信息。
#
# version 0.1
FROM 192.163.10.11:5000/centos
MAINTAINER liliangang "liliangang@ctosb.com"
RUN yum install -y \
curl \
openssh-server \
unzip \
wget
CMD /usr/sbin/sshd -D
如上命令主要是在centos镜像中安装curl、openssh-server、unzip、wget软件,使得所有基于该镜像的容器都默认包含这些基本软件。
执行以下build构建命令,开始构建centos基础镜像。
$ docker build -t 192.163.10.11:5000/centos-base -f Dockerfile-ctosb-base .
最后将构建的centos镜像推送到注册中心去,执行如下命令。
$ docker build 192.163.10.11:5000/centos-base
2. 构建Jdk层
之后再构建Jdk8镜像,如下是Dockerfile-jdk8脚本信息。
#
# version 0.1
FROM 192.163.10.11:5000/centos-base
MAINTAINER liliangang "liliangang@ctosb.com"
WORKDIR /app/java
COPY jdk-8u101-linux-x64.tar.gz .
RUN tar -zxf jdk-8u101-linux-x64.tar.gz && rm -f jdk-8u101-linux-x64.tar.gz
ENV JAVA_HOME /app/java/jdk1.8.0_101
ENV CLASSPATH $CLASSPATH:$JAVA_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
CMD /usr/sbin/sshd -D
如上命令主要是将jdk压缩包解压到镜像目录中个,并将jdk目录加入linux环境变量中。
执行以下build构建命令,开始构建jdk8镜像。
$ docker build -t 192.163.10.11:5000/jdk8 -f Dockerfile-jdk8 .
最后将构建的centos镜像推送到注册中心去,执行如下命令。
$ docker build 192.163.10.11:5000/jdk8
3. 构建Jdk-tomcat层
最后构建Jdk8-tomcat8镜像,如下是Dockerfile-jdk8-tomcat8脚本文件信息。
#
# version 0.1
FROM 192.163.10.11:5000/jdk8
MAINTAINER liliangang "liliangang@ctosb.com"
WORKDIR /app/tomcat
COPY apache-tomcat-8.5.5.tar.gz .
RUN tar -zxf apache-tomcat-8.5.5.tar.gz && rm -f apache-tomcat-8.5.5.tar.gz
CMD sh /app/tomcat/apache-tomcat-8.5.5/bin/startup.sh && /usr/sbin/sshd -D
如上命令主要是将tomcat压缩包解压到指定的镜像工作目录下。
执行以下build构建脚本,这样就完成jdk8-tomcat8镜像构建,后续发布应用可以直接使用该镜像去构建发布应用。
$ docker build -t 192.163.10.11:5000/jdk8-tomcat8 -f Dockerfile-jdk8-tomcat8 .
最后将构建的centos镜像推送到注册中心去,执行如下命令。
$ docker build 192.163.10.11:5000/jdk8-tomcat8