• 五.Dockerfile文件编写的常用指令记录解释


    1.0 Dockerfile的常用指令

    Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。Dockerfile 的内容分为四个部分:
    基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

    指令的一般格式为 指令名称 参数

    1.1.0 FROM

    ⽀持三种格式:

    1. FROM
    2. FROM :
    3. FROM @

    FROM指令必须指定且需要在Dockerfile其他指令的前⾯,指定的基础image 可以是官⽅远程仓库中的,也可以位于本地仓库。后续的指令都依赖于该指 令指定的image。当在同⼀个Dockerfile中建⽴多个镜像时,可以使⽤多个 FROM指令。
    比如:

    # 基于哪个镜像
    FROM java:8
    
    • 1
    • 2

    1.2.0 MAINTAINER

    格式:

    • MAINTAINER
      指定维护者

    1.3.0 LABEL

    为镜像添加元数据标签,一个 LABEL 就是一个键值对。
    LABEL maintainer="qaz" version="1.0"

    新添加的 LABEL 和已有的 LABEL 同名,则新值会覆盖掉旧值。

    1.30 ENV

    指令格式

    ENV <key> <value> 
    ENV <key1>=<value1> <key2>=<value2> 
    
    • 1
    • 2

    指定环境变量,会被后续RUN指令使⽤,并在容器启动后,可以通 过 docker inspect 查看这个环境变量,也可以通过 docker run --env = 来修改环境变量
    例子:

    ENV JAR_PATH '/home/soft/workspace/demo-study-1.0.0-SNAPSHOT.jar'
    
    • 1

    1.4.0 RUN

    ⽀持两种格式:

    1. shell指令格式:
    RUN <command>
    # 打印目录
    RUN pwd && ll    
    
    • 1
    • 2
    • 3
    1. exec 格式
    # 使用exec执行    
    RUN ["executable", "param1", "param2"]    
    
    • 1
    • 2

    也可指定其它终端。例如: RUN ["/bin/bash", "-c", "echo hello"] ,该⽅式必须使⽤["]⽽不能使⽤['], 因为该⽅式会被转换成⼀个JSON 数组;所以将多个命令通过&&合并到同一个 RUN指令上,避免镜像新建层,过大

    1.5.0 CMD

    格式有三种:

    1. shell : CMD

    2. exec 命令格式:
      CMD ["executable","param1","param2"]

    3. 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
      CMD ["","",...]

      作用:为启动的容器指定要运行的命令,类似于 RUN 指令,但 CMD 运行程序的时间是在 docker run 时执行的,命令运行结束,容器也就结束。

    CMD ["/bin/bash", "-c", "echo 'hello cmd!'"]
    
    • 1

    CMD指令的主要⽬的是为执⾏容器提供默认值。每个Dockerfile只有⼀个 CMD命令,如果指定了多个CMD命令,那么只有⼀条会被执⾏,如果启动容 器的时候指定了运⾏的命令,则会覆盖掉CMD指定的命令。

    1.6.0 EXPOSE

    为Docker容器暴露对外的端⼝号

    EXPOSE <port1> [<port2> ...]
    
    • 1

    1.7.0 ADD

    格式:

    1. ADD
    2. ADD ["",... ""]
      从src⽬录复制⽂件到容器的dest。其中src可以是Dockerfile所在⽬录的相对 路径,也可以是⼀个URL,还可以是⼀个压缩包

    注意:

    1. src必须在构建的上下⽂内,不能使⽤例如: ADD …/somethine /something ,因为 docker build 命令⾸先会将上下⽂路径和其⼦⽬ 录发送到docker daemon
    2. 如果src是⼀个URL,同时dest不以斜杠结尾,dest将会被视为⽂件,src 对应内容⽂件将会被下载到dest
    3. 如果src是⼀个URL,同时dest以斜杠结尾,dest将被视为⽬录,src对应 内容将会被下载到dest⽬录
    4. src是⼀个⽬录,那么整个⽬录其下的内容将会被拷⻉,包括⽂件系 统元数据
    5. ⽂件是可识别的压缩包格式,则docker会⾃动解压

    1.8.0 COPY

    COPY 指令非常简单,仅用于将文件拷贝到镜像中,而 ADD 相对来讲复杂一些,可以用于下载远程文件以及解压压缩包。所以除非要解压缩包,否则建议使用 COPY;
    复制本地端的src到容器的dest。和ADD指令类似,COPY不⽀持URL和压缩包。

    1.9.0 VOLUME

    格式为VOLUME ["/data"]
    使容器中的⼀个⽬录具有持久化存储数据的功能,该⽬录可以被容器本身使 ⽤,也可以共享给其他容器。当容器中的应⽤有持久化数据的需求时可以在 Dockerfile中使⽤该指令。
    作用

    • 避免重要的数据,因容器重启而丢失
    • 避免容器不断变大

    1.10.0 WORKDIR

    WORKDIR 指令可以设置默认目录,也就是运行 RUN / CMD / ENTRYPOINT 指令的地方。
    格式为WORKDIR /path/to/workdir

  • 相关阅读:
    rust学习——操作字符串、字符串转义、操作UTF8-字符串 (操作中文字符串)
    elasticsearch中文档操作,索引导入数据、批量导入、删除文档
    【算法练习Day3】 移除链表元素&&设计链表&&反转链表
    Java:关于mybatis框架mapper.xml编写小于号<的问题
    Spring Boot Actuator详解与漏洞利用
    前端Vue之Request URL:请求地址乱套问题记录
    婚姻家庭法简答题及答案
    vue3下watch的使用
    SpringCloud Ribbon--负载均衡 原理及应用实例
    【python】使用pysam读取sam文件时的常用属性
  • 原文地址:https://blog.csdn.net/qq_38212913/article/details/126334109