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 镜像名称:版本号,如果这个镜像本地有就直接访问,如果没有自动从远程仓库下载
ADDADD jdk-7u51-linux-x64.tar.gz /usr/local/src
Docker会把jdk.tar包上传到docker镜像中到centos,进入/usr/local/src下,复制tar包到这个目录下,自动解压
ENVENV 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命令只能一个,只能运行一次