FROM
指定基础镜像,也就是作为父镜像,FROM <镜像名:tag>
,如FROM nginx
MAINTAINER
说明镜像维护者的信息,MAINTAINER <作者> <邮箱>
RUN
镜像构建中执行的命令(docker build),RUN <command>
,如RUN sudo apt-get update && sudo apt-get install -y nginx
CMD
和RUN命令用法一致,RUN是在镜像构建中执行命令,CMD是在容器运行时执行命令(docker run),如果在docker run时指定了需要执行的命令,则会覆盖CMD
ENTRYPOINT
ENTRYPOINT和CMD非常相似,都是在容器运行时执行命令,但是在docker run时指定了需要执行的命令,不会覆盖CMD,除非指定了--entrypoint参数,每个 Dockerfile 中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效
EXPOSE
指定需要映射的端口,EXPOSE <port> [<port> ...]
,如EXPOSE 80 443
ADD
复制文件到docker容器中,ADD <src> <dest>
,src可以是URL,如果src是tar压缩包会自动进行解压缩
COPY
COPY和ADD相似,COPY只能复制文件和文件夹
VOLUME
可以将本地文件夹挂载到container中,如VOLUME /data
,VOLUME /data
与docker run -v /data
是等价的,需要说明的是使用-v参数的时候可以指定宿主机挂载到容器中目录位置(即-v /data:/data
),而使用VOLUME是无法做到的。关于对VOLUME的深入理解可以参考这篇博文 深入理解 Docker Volume
WORKDIR
设置工作目录,RUN,CMD和ENTERPOINT在该工作目录下执行,可以将WORKDIR理解为cd命令,如WORKDIR ~/website
ENV
指定环境变量,如ENV DB_HOST 127.0.0.1
USER
指定用户,USER <用户名或用户ID>:<组名或组ID>,
如USER helbing
,USER mysql:db
,如果不指定USER则默认使用root用户
ONBUILD
ONBUILD指定的命令在构建镜像时并不执行,而是在它的子镜像构建时执行,如ONBUILD RUN sudo apt-get update && sudo apt-get install -y nginx