• ubuntu-docker入门到放弃(七)Dockerfile简介


    一、dockerfile基本结构

    最简单的理解就是dockerfile实际上是一些命令的堆叠,有点像最基础的shell脚本,没有if 没有for,就是串行的一堆命令。

    一般而言,dockerfile分为四个部分:基础镜像信息、维护者信息、镜像操作指令和启动时执行指令,例如:

    #基础镜像信息
    FROM ubuntu
    
    #维护者信息
    MAINTAINER slim_liu slim_liu@163.com
    
    #镜像操作指令
    
    RUN apt-get update && apt-get install -u nginx
    
    #启动容器时执行的指令
    
    CMD /usr/sbin/nginx

     二、镜像操作指令

    指令分为很多种,下面一一列举:

    指令一般格式为 INSTRUCTION arguments ,指令包括FROM、MAINTAINER、RUN 等。

    2.1 FROM

    格式:

    FROM <image>或FROM <image>:<tag>

    Dockerfile 的开头,必须是FROM,如果在同一个dockerfile中创建多个镜像,可以使用多个from,每个镜像一次。

    2.2 MAINTAINER

    格式:

    MANINTAINER <name>,指定维护者信息

    2.3 RUN

    格式:

    RUN <command>或RUN ["executable", "param1", "param2"]

    前者将在shell终端中执行命令,即 /bin/sh -c。后者则使用exec执行,指定终端,可以使用第二种,RUN ["/bin/bash", "-c" , "echo hello!"]

    2.4 CMD

    CMD支持三种格式:

    CMD ["executable", "param1", "param2"]#使用exec执行,推荐方式。
    CMD command param1 param2 #在/bin/sh 中执行,提供给需要交互的应用。
    CMD ["param1", "param2"] #提供给ENTRYPOINT 的默认参数。

    每个dockerfile只能指定一条CMD指令,如果有多条,则只会执行最后一条,并且如果启动容器时,指定了运行的命令,则会覆盖掉CMD指定的命令。

    2.5 EXPOSE

    格式:

    EXPOSE <port> <port> ...
    例:
    EXPOSE 80 443 3306

    告诉docker容器暴露的端口号,供互联系统使用。在启动容器时,需要通过-P,docker主机会自动分配一个端口转发到指定的端口,如果使用-p,则可以具体的指定端口映射关系。

     2.6 ENV

    格式:

    ENV <key> <value> #指定一个环境变量,会被后续的RUN变量使用,并且会在容器中保持。
    例:
    ENV A 1
    RUN curl -SL http://test.com/temp-$A.tar.gz

    2.7 ADD

    格式:

    ADD <src> <dest>

    复制指定的src到容器中的dest,src可以是dockerfile相对路径的目录、url、tar文件(将自动解压成目录)等

    2.8 COPY

    格式:

    COPY <src> <dest>

    复制本地主机的src(为dockerfile所在目录的相对路径,文件或目录)为容器中的dest,目标路径不存在时,会自动创建,当使用本地目录为源目录时,推荐使用COPY。

    2.9 ENTRYPOINT

    格式1:

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

    格式2:

    ENTRYPOINT command param1 param2 (#shell中执行)

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

    每个dockerfile只能有一个此参数,多个时候,只有最后一个生效。

    2.10 VOLUME

    格式:

    VOLUME <"/data">

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

    2.11 USER

    格式:

    USER daemon

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

    当容器不需要管理员权限时,建议添加USER参数,例如:

    RUN groupadd -r postgres && useradd -r -g postgres postgres #需要临时获取管理员权限,可以使用gosu,不推荐sudo。

    2.12 WORKERDIR

    格式:

    WORKERDIR /path/workerdir

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

    可以使用多个WORKERDIR,如果后续的参数是相对路径,将基于之前的WORKERDIR

    例:

    WORKERDIR /a
    WORKERDIR b
    WORKERDIR c
    
    RUN pwd
    
    /a/b/c

    2.13 ONBUILD

    格式:

    ONBUILD [INSTRUCTION]

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

    例:

    我们首先创建了image-a,并在其中使用了ONBUILD

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

    接着我们from image-a创建image-b,就会自动执行上面的两句。

    如果使用ONBUILD指令的镜像,推荐在标签中注明,例如,ruby:1.9-onbuild

  • 相关阅读:
    uninstall_edge:win10带浏览器edge卸载工具
    安装spacedesk后,Win10状态栏图标间距变宽
    jacob实现语音朗读一段文本
    汇编语言-12内中断
    告警只提示一次,未解决也不再次提示
    汇编语言-11标志寄存器
    第2章 顺序表及其顺序存储
    第1章 概论
    再见:计算机行业
    QPainter
  • 原文地址:https://www.cnblogs.com/slim-liu/p/9950504.html
Copyright © 2020-2023  润新知