基本指令

FROM

格式为FROM <image>FROM <image>:<tag>

Dockerfile中的第一条指令必须是FROM,如果在同一个Dockerfile创建多个镜像,可以使用多个FROM。

MAINTAINER

格式为MAINTAINER <name> ,指定维护者信息

RUN

格式为RUN <command>RUN ["executable","param1","param2"]

前者会在shell终端(即/bin/sh -c)运行,后者则使用exec执行。

如果需要指定使用其他终端,则可以使用后者

RUN ["/bin/bash","-c","echo hello"]

每条RUN指令在当前镜像基础上执行,并提交为新的镜像。若命令较长,可以使用\来换行。

CMD

CMD支持3种格式:

  • CMD ["executable","param1","param2"] :使用exec执行

  • CMD command param1 param2 :在/bin/sh执行

  • CMD ["param1","param2"] :提供给ENTRYPOINT的默认参数

指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令;如果指定了多条命令,则只有最后一条会被执行。

如果用户启动容器时指定了运行的命令,则会覆盖CMD指定的命令。

其他指令

EXPOSE

格式为EXPOSE <port> [<port>...]

如暴露端口22,80,8443

EXPOSE 22 80 8443

ENV

格式为ENV <key> <value>

当指定环境变量后,会被后续的RUN指令使用,并在容器运行时保持。

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgres && ...
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

ADD

格式为ADD <src> <dest>

命令将复制指定的src到容器的dest。其中,src是Dockerfile所在目录的相对路径,它可以是URL,如果是tar文件,则自动解压为目录。

COPY

格式为COPY <src> <dest>

赋值本地的src(相对于Dockerfile的路径),到容器的dest。如果目标路径不存在,则自动创建。

当使用本地目录为源目录时,则使用COPY。

ENTRYPOINT

ENTRYPOINT有两种格式:

  • ENTRYPOINT ["executable","param1","param2"]

  • ENTRYPOINT command param1 param2

配置容器启动后执行的命令,并且不被docker run提供的参数覆盖。

每个Dockerfile只能有一个ENTRYPOINT,当指定多个ENTRYPOINT时,只有最后一个有效。

VOLUME

格式为VOLUME ["/data"]

创建一个从本地主机或其他容器挂载的挂载点,一般用来存放数据库等。

USER

格式为USER daemon

指定运行容器时的用户名或UID,后续的RUN也会使用指定的用户。

当服务不需要管理员权限时,可以使用该命令指定运行用户,并且可以在之前创建所需要的用户

RUN groupadd -r postgres && useradd -r -g postgres postgres

要临时获取管理员权限可以使用gosu,而不推荐使用sudo

WORKDIR

格式为WORKDIR /path/to/workdir

为后续的RUN、CMD、ENTRYPOINT指定配置工作目录。

可以使用多个WORKDIR指令,后续命令如果是相对路径,则会基于此前命令指定的路径

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

此时最终路径为/a/b/c

ONBUILD

格式为ONBUILD [INSTRUCTION]

配置当所创建的镜像作为其他镜像的基础镜像时,所执行的操作指令。

[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]

如果新的镜像基于上面镜像构建,则等价于添加两条命令

FROM image-A

ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src

使用ONBUILD指令的镜像,最好在标签中注明,如ruby:1.9-onbuild

results matching ""

    No results matching ""