Dockerfile 命令简记

Dockerfile指令

  • CMD :容器被启动的时候所要执行的命令 ,和docker run效果差不多
docker run -it dcc/static_web /bin/true 

CMD ["/bin/true"]           //等价于上面的

CMD ["/bin/bash","-l"]      //添加命令参数

如果docker run 和CMD同时存在,则run命令会覆盖CMD命令

并且CMD只能执行一次,即使指定多个,也只会执行最后一个

  • ENTRYPOINT : 指定命令
docker run -it dcc/static_web /usr/sbin/nginx -g "daemon off"

ENTRYPOINT ["/usr/sbin/nginx"] 
docker run -it dcc/static_web -g "daemon off"

可以看见指定ENTRYPOINT后,docker run 后面的参数都会添加到ENTRYPOINT后面去

可以通过ENTRYPOINT 和 CMD 命令结合起来,添加默认选项

ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-h"]

当用户指定了选项时,CMD会被覆盖,当用户不指定选项,则默认使用CMD命令

  • WORKDIR: 指定工作目录
WORKDIR /opt/webapp/db       //ENTRYPOINT和/或CMD指定的程序都将会在这个目下执行
  • ENV:设置容器的环境变量
ENV RVM_PATH /home/rvm/     //设置RVM_PATH为/home/rvm/
ENV RVM_PATH=/home/rvm RVM_ARCHFLAGS="-arch i386"  //同时设置多个环境变量
WORKDIR $RVM_PATH           //使用所设置的环境变量
  • USER:设置镜像用户
USER  user                  //设置用户为user  默认为root
  • VOLUME:设置添加卷
VOLUME ["/opt/project"]     //为所有容器都创建一个/opt/project文件夹
VOLUME["/opt/project","/data"] //创建多个文件夹
  • ADD:文件复制
ADD software.lic /opt/project/software.lic   //将当前目录下的software.lic复制到/opt/project/software.lic中
                                             //源目录可以是一个URL
ADD software/   /opt/software/               //将software文件夹复制到/opt/文件夹下
ADD latest.tar.gz  /var/www/wordpress/       //将latest.tar.gz自动解压并放在指定目录下

ADD指令会使Dockerfile后面的命令在build中的缓存无效

  • COPY:复制
COPY conf.d/  /etc/apache2/    将指定目录下的文件复制到指定目录下

ADD和COPY功能比较像,但是COPY只关心在构建上下文中复制本地文件,而不会去做文件提取和解压的工作,也就是COPY不能指定URL,也不能指定构建上下文之外的路径

  • LABEL:元数据
LABEL version="1.0"
LABEL location="New York" type="Data Center" role="Web Server" //指定键值对

用于添加描述信息,方便使用docker inspect查看

  • ARG:构建时变量传递
ARG build
ARG webapp_user=user                   //设置默认值
docker build --build-arg build=1234    //指定build为1234
  • ONBUILD:镜像添加触发器
ONBUILD ADD . /app/src           //当此镜像被其他镜像作为基础镜像时触发
ONBUILD RUN cd /app/src && make