Dockfile

Dockfile一般分为4部分:基础镜像信息、维护者信息、镜像操作指令和容器启动执行指令。
Dockerfile指令:

  • FROM:第一条指令必须是FROM指令。

    1
    FROM <image>[:<tag>]
  • MAINTAINER:指定维护者信息。

    1
    MAINTAINER <name>
  • RUN:

    1
    2
    3
    4
    RUN <command>
    RUN ["executable","param1","param2"]
    前者通过shell运行命令,即/bin/sh -c ;后者则使用exec执行。
    每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像。
  • EXPOSE:

    1
    2
    EXPOSE <port> [<port> ...]
    暴露一个或多个端口号,相应的运行容器的时候,可以配合-p选项映射相应的端口号到宿主机上指定的端口,若使用-P则docker自动随机分配一个端口映射到指定的端口。
  • ENV:

    1
    2
    3
    4
    5
    ENV <key> <value>
    指定环境变量。
    ENV JAVA_HOME /opt/jdk1.7.0_79
    ENV JRE_HOME /opt/jdk1.7.0_79/jre
    ENV LANG en_US.UTF-8
  • ADD:

    1
    2
    ADD <src> <dest>
    复制指定的<src>到容器中的<dest>。其中<src>可以是Dockerfile所在目录的一个相对路径的文件或目录,也可以是一个URL,如果是tar包,则会自动解压。
  • COPY:

    1
    2
    COPY <src> <dest>
    复制指定的<src>到容器中的<dest>。其中<src>只能是Dockerfile所在目录的一个相对路径的文件或目录。而不允许指定URL,且tar包不自动解压。
  • CMD:

    1
    2
    3
    4
    5
    6
    指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。若指定多条,则只有最后一条生效。
    如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。
    CMD支持三种格式:
    CMD ["executable","param1","param2"] 使用exec执行
    CMD command param1 param2 在/bin/sh中执行,提供给需要交互的应用
    CMD ["param1","param2"] 提供给ENTRYPOINT的默认参数
  • ENTRYPOINT:

    1
    2
    3
    4
    指定启动容器时执行的命令,且不被docker run指定的参数覆盖,每个Dockerfile只能有一条ENTRYPOINT命令。若指定多条,则只有最后一条生效。
    有两种格式:
    ENTRYPOINT ["executable","param1","param2"] 使用exec执行
    ENTRYPOINT command param1 param2 在shell中执行
  • VOLUME:

    1
    2
    VOLUME ["/data"]
    创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放需要持久化的数据。
  • USER:

    1
    2
    USER <username>
    指定运行容器时的用户名或UID,后续的RUN也会只用该用户执行。
  • WORKDIR:

    1
    2
    3
    4
    5
    6
    7
    WORKDIR /path/workdir
    为后续的RUN、CMD、ENTRYPOINT指定配置工作目录(类似于cd命令)
    WORKDIR /a
    WORKDIR b
    WORKDIR c
    RUN pwd
    则返回的路径为/a/b/c
  • ONBUILD: 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行。

坚持原创技术分享,您的支持将鼓励我继续创作!
0%