1.FROM
格式为FROM image或FROM image:tag,而且Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中建立多个镜像时,可使用多个FROM指令。python
2.MAINTAINER
格式为MAINTAINER user_name user_email,指定维护者信息docker
3.RUN
格式为RUN command或 RUN ["EXECUTABLE","PARAM1","PARAM2".....],前者在shell终端中运行命令,/bin/sh -c command,例如:/bin/sh -c "echo hello";后者使用exec执行,指定其余运行终端使用RUN["/bin/bash","-c","echo hello"]shell
每条RUN指令将当前的镜像基础上执行指令,并提交为新的镜像,命令较长的时候可使用\来换行。centos
能够用run指令安装相关软件 达到自定义配置mycentos的目的bash
4.CMD
支持三种格式:
CMD ["executable","param1","param2"],使用exec执行,这是推荐的方式。
CMD command param1 param2 在/bin/sh中执行。
CMD ["param1","param2"] 提供给ENTERYPOINT的默认参数。
CMD用于指定容器启动时执行的命令,每一个Dockerfile只能有一个CMD命令,多个CMD命令只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉CMD中指定的命令。服务器
5.EXPOSE
格式为 EXPOSE port [port2,port3,...],例如EXPOSE 80这条指令告诉Docker服务器暴露80端口,供容器外部链接使用。
在启动容器的使用使用-P,Docker会自动分配一个端口和转发指定的端口,使用-p能够具体指定使用哪一个本地的端口来映射对外开放的端口。app
6.ENV
格式为:EVN key value 。用于指定环境变量,这些环境变量,后续能够被RUN指令使用,容器运行起来以后,也能够在容器中获取这些环境变量。
例如
ENV word hello
RUN echo $wordpost
7.ADD
格式:ADD src dest
该命令将复制指定本地目录中的文件到容器中的dest中,src能够是是一个绝对路径,也能够是一个URL或一个tar文件,tar文件会自动解压为目录。ui
8.COPY
格式为:COPY src desc
复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动建立。spa
9.ENTRYPOINT
格式有两种:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1,param2 会在shell中执行。
用于配置容器启动后执行的命令,这些命令不能被docker run提供的参数覆盖。和CMD同样,每一个Dockerfile中只能有一个ENTRYPOINT,当有多个时最后一个生效。
10.VOLUME
格式为 VOLUME ["/data"]
做用是建立在本地主机或其余容器能够挂载的数据卷,用来存放数据。
11.USER
格式为:USER username
指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户。要临时使用管理员权限可使用sudo。在USER命令以前可使用RUN命令建立须要的用户。
例如:RUN groupadd -r docker && useradd -r -g docker docker
12.WORKDIR
格式: WORKDIR /path
为后续的RUN CMD ENTRYPOINT指定配置工做目录,可使用多个WORKDIR指令,若后续指令用得是相对路径,则会基于以前的命令指定路径。
13.ONBUILD
格式ONBUILD [INSTRUCTION]
该配置指定当所建立的镜像做为其余新建镜像的基础镜像时所执行的指令。
例以下面的Dockerfile建立了镜像A:
ONBUILD ADD . /app
ONBUILD RUN python app.py
则基于镜像A建立新的镜像时,新的Dockerfile中使用from A 指定基镜像时,会自动执行ONBBUILD指令内容,等价于在新的要构建镜像的Dockerfile中增长了两条指令:
FROM A
ADD ./app
RUN python app.py
14.docker build
建立好Dockerfile以后,经过docker build命令来建立镜像,该命令首先会上传Dockerfile文件给Docker服务器端,服务器端将逐行执行Dockerfile中定义的指令。
一般建议放置Dockerfile的目录为空目录。另外能够在目录下建立.dockerignore文件,让Docker忽略路径下的文件和目录,这一点与Git中的配置很类似。
经过 -t 指定镜像的标签信息,例如:docker build -t regenzm/first_image . ##"."指定的是Dockerfile所在的路径