zoukankan      html  css  js  c++  java
  • docker基础——5.Dockerfile

    把应用部署在容器中,改变了用文本文件保存配置信息的方式。而通过传环境变量配置。

    Dockerfile是一个文本文件,包括容器的指令。按顺序从上到下执行,第一行非注释指令必须是FROM指定基础镜像。

    Dockerfile的工作逻辑:

    (1)在一个专用目录放入Dockerfile文件,首字母大写。
    (2)Dockerfile引用的文件都在工作目录下,.dockeringore文件中标明的文件在打包时会被排除。
    (3)docker build命令把Dockerfile引用的工作目录传入Docker daemon,然后开始按照Dockerfile中的内容构造镜像。
    (4)Dockerfile中的每一条指令都会生出一个新的镜像层,最终的镜像就是基础镜像上叠加一层层的镜像层组建的。

    指令:

    (1)FROM
    Dockerfile第一个非注释行,用于指定基准镜像。
    格式:
    FROM <reposotiry>[:<tag>]
    FROM <reposotiry>@<digest>
    可以用标签或Hash码标识镜像

    (2) LABEL
    用键值格式表示各种元数据
    格式:
    LABEL <key> = <value> <key> = <value> ...
    例:LABEL autor="ss" time="20190312"

    (3) COPY
    用于从主机复制文件至创建的新映像文件
    格式:
    COPY <src> <dest>
    <src>:要复制的源文件或目录,支持通配符。
    <dest>:目标路径,建议使用绝对路径。
    说明:
    a.<src>为目录时,则会递归复制,但<src>目录本身不会被复制;
    b.指定多个<src>,或在<src>中使用通配符,则<dest>必须是目录,以/结尾;
    c.<dest>事先不存在,将被自动创建。

    (4) ADD
    ADD指令类似于COPY指令。ADD支持使用TAR文件和URL路径。
    格式:
    ADD <src> <dest>
    说明:
    a.同COPY指令
    b.如果<src>是一个本地系统上的tar文件,它将被展开为一个目录,类似于tar -x。而通过URL获取到的tar文件不会展开。
    c.如果<src>是多个或使用了通配符,则<dest>必须是/结尾的目录路径,否则<src>的内容将被直接写到<dest>

    (5) WORKDIR
    用于为Dockerfile中各种指令设定工作目录
    例如:
    WORKDIR /usr/local
    ADD tmp.tar.gz ./src/

    (6) VOLUME
    用于在image中创建一个挂载点目录,以挂载Docker host上的卷或其他容器上的卷。
    格式:
    VOLUME <mountpoint>

    (7) EXPOSE
    用于为容器打开指定要监听的端口
    例如:EXPOSE 11211/udp 11211/tcp
    配合docker run -P命令使用

    (8) ENV
    用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其他指令所调用。
    调用格式:$var 或 ${var}
    定义格式:
    ENV <key> <value>
    ENV <key>=<value> ...

    (9) RUN
    针对于FROM的基础镜像,在docker build阶段执行。
    格式:
    RUN <command>
    RUN ["<executable>", "<param1>", "<param2>"]
    注意:
    第一种方式,命令通过/bin/sh -c运行;
    第二种格式,命令直接运行,不调用shell,该格式被docker当成json数组解析,所以必须用双引号。

    (10) CMD
    CMD在docker run启动容器时运行。
    多个CMD,只执行最后一个。
    格式:
    CMD <command>
    CMD ["<executable>", "<param1>", "<param2>"]
    CMD ["<param1>", "<param2>"]

    (11) ENTRYPOINT
    与CMD类似,但在docker run时参数不会覆盖ENTRYPOINT,而是作为ENTRYPOINT的参数。
    CMD与ENTRYPOINT同时存在,CMD作为ENTRYPOINT的参数。

    (12) USER
    USER <UID>|<UserName>
    <UID>必须为/etc/passwd中有效的UID

    (13) HEALTHCHECK
    健康检查

    (14) SHELL
    指定shell
    默认
    linux:["/bin/sh", "-c"]
    win:["cmd", "/s", "/c"]

    (15) STOPSIGNAL
    更改stop的信号,默认是15

    (16) ARG
    在docker build时传参数。

    (17) ONBUILD
    用于在Dockerfile中定义一个触发器,在别人用该镜像作为基础镜像是使用。

  • 相关阅读:
    1 学习wcf 编写简单的WCF服务流程 并发布在IIS上
    通过FormData对象可以组装一组用 [XMLHttpRequest]发送请求的键/值对,它可以更灵活方便的发送表单数据。
    总结下抽象类Abstract和虚方法Virtual(易混点)
    mac VirtualBox虚拟机装CentOS,并配置网络,使其发布的静态网站能访问
    CentOS 7 1810版本不能使用yum 命令
    C# 选取本月周六日方法
    使用Newtonsoft序列化对象,实现深拷贝
    linq to sql 增删改查
    C# 对象对比是否相等 工作笔记
    zabbix server和zabbix agent的安装
  • 原文地址:https://www.cnblogs.com/maxgongzuo/p/10402412.html
Copyright © 2011-2022 走看看