1、保留字
FROM 基础镜像 #以基础镜像作为模板
RUN shell格式或exec格式的命令(yum install net-tool) #在构建build时会执行
EXPOSE #暴露端口映射
WORKDIR #指定登录终端的落脚点
ENV #设置环境变量
VOLUME #容器卷
ADD #将宿主机的文件拷贝到镜像并解压
COPY #将宿主机的文件拷贝到镜像
CMD #指定容器启动后要干的事,只能最后一个CMD生效,
#CMD会被docker run后面的参数替换(例如执行tomcat使用-it加bash等于CMD["bash","run"])就把CMD["catalina.sh","run"]替代了
#CMD是在docker run的时候执行
ENTRYPOINT # 类似于CMD指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序
#当指定了ENTRYPOINT,CMD不再作为命令执行,而是作为ENTRYPOINT的传递参数.
ENTRYPOINT["nginx","-c"]#定参
CMD["/etc/nginx/nginx.conf"]#传参
#如果没有传参则按照dockerfile执行
#docker命令 docker run nginx:test - 传参 docker run nginx:test -c /etc/nginx/newconf.conf
#实际命令 nginx -c /etc/nginx/nginx.conf - 传参 nginx -c /etc/nginx/newconf.conf
2、案例
centos镜像具备jdk8和vim以及ifconfig
1、在根目录新建一个myfile,放入jdk-8u333-linux-i586.tar.gz
2、编写makefile
FROM centos:7
MAINTAINER test<test@123.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim #安装vim
RUN yum -y install net-tools #安装ifconfig
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
ADD jdk-8u333-linux-i586.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_333
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt. jar: $JAVA_HOME/lib/tools. jar: $JRE_HOME/lib: $CLASSPATHENV
ENV PATH $JAVA_HOME/bin: $PATH
CMD echo $MYPATH
CMD echo "success..ok"
CMD /bin/bash
3、构建
docker build -t 新镜像的名字:tag Dockerfile路径