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