一个Dockerfile的范例说明

mac2023-01-23  21

 

Dockerfile:

FROM index.alauda.cn/tutum/centos:6.5 #install jdk1.7 ADD jdk-7u51-linux-x64.tar.gz /usr/local/src ENV JAVA_HOME=/usr/local/src/jdk1.7.0_51 ENV PATH=$JAVA_HOME/bin:$PATH ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # install tomcat7 ADD apache-tomcat-7.0.55.tar.gz /usr/local/src ENV CATALINA_HOME /usr/local/src/apache-tomcat-7.0.55 ENV PATH=$PATH:$CATALINA_HOME/bin RUN rm -rf $CATALINA_HOME/webapps/* #deploy the war COPY EasyMall.war $CATALINA_HOME/webapps/ROOT/ROOT.war WORKDIR $CATALINA_HOME/webapps/ROOT RUN jar xvf ROOT.war RUN rm -rf ROOT.war EXPOSE 8080 CMD ["/usr/local/src/apache-tomcat-7.0.55/bin/catalina.sh","run"]

 

FROM

FROM 镜像名称:版本号,如果这个镜像本地有就直接访问,如果没有自动从远程仓库下载

ADD

ADD jdk-7u51-linux-x64.tar.gz /usr/local/src

Docker会把jdk.tar包上传到docker镜像中到centos,进入/usr/local/src下,复制tar包到这个目录下,自动解压

ENV

ENV JAVA_HOME=/usr/local/src/jdk1.7.0_51

在/etc/profile文件中设置JAVA_HOME环境变量,指向到路径jdk解压后到目录,和上面ADD命令到路径要完全一致(约定)

 

ENV PATH=$JAVA_HOME/bin:$PATH

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 

ENV的命令会自动加入到/etc/profile文件中,

自动执行,保证配置文件更新source /etc/profile

 

RUN

RUN rm -rf $CATALINA_HOME/webapps/*

运行命令 调用linux提供的基础操作的命令,rm删除tomcat默认提供控制台等帮助的页面等内容,清除环境

5)COPY

COPY EasyMall.war $CATALINA_HOME/webapps/ROOT/ROOT.war

坑,COPY命令只复制内容EasyMall.war,指定路径下,解压war包,不是利用tomcat自动解压war的特点而是docker自己解压。

 

ADD和COPY差异,ADD上传会自动解压,解压时包括tar的文件名的目录。COPY不会

 

6)WORKDIR

WORKDIR $CATALINA_HOME/webapps/ROOT(类似配置JAVA_HOME)

设定当前工作路径

 

路径概念

cd /usr/local/src 不管当前路径在哪里,直接到一个指定位置

cd src 当前路径下到src

运行tomcat,catalina.sh

 

RUN jar xvf ROOT.war

利用安装jdk中自带到Jar命令,手工到解压ROOT.war。注意:没有利用tomcat自动到解压

RUN rm -rf ROOT.war 多了一个ROOT.war,利用rm删除这个文件-rf强制删除

 

7)EXPOSE

EXPOSE 8080

设置TOMCAT到端口为8080,docker把这个宿主机上到端口加入到iptables中,可以外网访问

 

8)CMD

CMD ["/usr/local/src/apache-tomcat-7.0.55/bin/catalina.sh","run"]

 

RUN和CMD差异

RUN执行到是系统到命令,CMD执行x.sh Shell脚本

RUN命令一个Dockerfile中可以出现多次

CMD命令只能一个,只能运行一次

最新回复(0)