zoukankan      html  css  js  c++  java
  • Docker系列三:Dockerfile

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像

    Dockerfile由一行行命令语句组成,支持#开头的注释

    Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行命令

     

    Dockerfile中的关键字

    FROM

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

    第一条指令必须为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 ["executable", "param1", "param2"] 使用exec执行,推荐

    CMD command param1 param2 在/bin/sh中执行,提供给需要交换的应用

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

    指定容器时执行的命令,每个Dockerfile只能有一条CMD命令,如果有多条,最后一条生效

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

    EXPOSE

    格式 EXPOSE <port> ... 容器暴露的端口号,当启动容器时,如果指定了-P参数,则会随机指定端口映射到暴露的端口上

    ENV

    格式 ENV <key> <value> 指定环境变量,可以被后续的RUN指令使用

    ADD

    格式 ADD <src> <des> 该命令复制指定的src到容器中的des,启动src可以是一个相对路径,可以是一个url,也可以是一个tar文件(会自动解压为目录)

    COPY

    格式 COPY <src> <des> 复制本地文件到容器中,当本地文件时目录时,推荐使用COPY

    ENTRYPOINT

    两种格式

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

    ENTRYPOINT command param1 param2 (shell中执行)

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

    每个Dockerfile只有一个ENTRYPOINT,多条时最后一个生效

    CMD和ENTRYPOINT的区别

    如果同时有CMD和ENTRYPOINT指令,ENTRYPOINT指令级别高

    如果Dockerfile中有CMD指令,则CMD指令的参数会附加到ENTRYPOINT指令的后面

    如果docker run命令携带参数,这个参数会覆盖掉CMD命令的参数,并且会附加到ENTRYPOINT这里后面

    ENTRYPOINT指令不会被docker run提供的指令覆盖

    VOLUME

    格式 VOLUME ["/data1", "/data2"] 自动匿名挂载,自动生成挂载点---暂时不知道用途

    USER

    格式 USER daemon

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

    WORKDIR

    格式 WORKDIR /path/to/workdir

    为后续的RUN, CMD, ENTRYPOINT指令配置工作目录

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

    WORKDIR /a WORKDIR b WORKDIR c 最终路径为 /a/b/c

    ONBUILD

    格式 ONBUILD [INSTRUCTION]

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

    该命令的意思为:如果别的Dockerfile使用该文件创建的镜像时,会自动执行ONBUIDL后面的命令

     

    创建镜像

    目录使用当前目录查找,如果当前目录为空,则子目录查找

    如果工作目录和Dockerfile是同一级, 使用./表示当前目录下查找

     

    创建文件 Dockerfile,可以使用-f参数来指定使用的Dockerfile文件(默认配置文件名为Dockerfile)

    # Dockerfile文件, 同时本地镜像中有一个镜像名为 centos:6.7, 基于该镜像创建一个新建镜像
    # Dockerfile的原理是根据提供的镜像创建一个容器,执行完指定的命令后,再重新打包出一个新的镜像并删除运行的容器
    FROM centos:
    6.7 MAINTAINER djoker EXPOSE 80 RUN yum -y install epel-release #RUN yum -y install supervisor openssh openssh-server openssh-clients RUN yum -y install supervisor run sed -i 's/nodaemon=false/nodaemon=true/' /etc/supervisord.conf CMD ["/usr/bin/supervisord"]

    执行命令创建新的镜像

    # -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
    # 后面是Dockerfile所在的目录,  当工作目录和Dockerfile在同一级时,使用./来表示从当前目录查找,
    # 执行 docker build -t myrepo/myapp:laster ./
    docker build
    -t myrepo/myapp /tmp/test1
  • 相关阅读:
    6.8
    6.7
    6.2
    6.1儿童节
    5.24
    5.22
    5.18
    5.17
    Visual Studio开始一个HelloWorld的enclave程序
    以太坊MPT树的HP(Hex-Prefix)编码
  • 原文地址:https://www.cnblogs.com/djoker/p/10382105.html
Copyright © 2011-2022 走看看