美文网首页PHP经验分享程序员PHP开发
Docker 入门教程之Dockerfile详解

Docker 入门教程之Dockerfile详解

作者: phpworkerman | 来源:发表于2021-08-11 17:49 被阅读0次
    什么是Dockerfile

    Dockerfile 是一个用来自动化构建镜像的文本文件,里面包含了许多构建镜像的指令。

    Dockerfile 的格式
    • Dockerfile 由指令和注释构成
    • 添加 # 表示本行为注释,构建镜像时会自动忽略,有一个例外是解析器指令 # directive=value
    • 注释或命令行前的空格会被忽略
    • 关键字不区分大小写,但推荐大写,以区分参数
    # 这是注释
    FROM centos
    RUN echo "hello world"
    

    以下命令等同于上边的

              # 这是加空格的注释
              FROM centos
          # 这是加空格的命令
          RUN echo "hello world"
    
    • 解析器指令
      正确设置后,可以使用其它特殊的指令,目前仅支持:syntax 和 escape,开启解析器指令有几个注意事项:
    1. 指令 # directive=value 需要写在 dockerfile 文件开头,不然会被当成普通注释
    2. 只能写入一次,多次会无法生效
    3. 空格不会对解析器指令产生影响
    4. 不区分大小写,但推荐小写
    • 环境变量
      可以通过设置环境变量,在命令行执行时解析,变量可以是任何字符串,也可以再次赋值变量
    ENV path=/usr/share
    ENV real_path=$path
    
    .dockerignore 文件

    该文件用来编写镜像打包时的文件忽略规则,由注释和文件匹配规则构成,类似 Git 的忽略文件

    # 这是一个注释
    */temp*
    */*/temp*
    !/temp/logo
    temp?
    
    Dockerfile 指令
    # This is a demo
    ARG  CODE_VERSION=20.04
    FROM ubuntu:${CODE_VERSION}
    LABEL version="1.0" \
    description="测试镜像" \
    org.opencontainers.image.authors="phpworkerman"
    EXPOSE 8081/tcp
    ENV DIRPATH=/etc
    WORKDIR $DIRPATH
    RUN pwd
    ADD test.conf .
    CMD ["bash"]
    ENTRYPOINT["ls"]
    

    ARG:可定义或是接收外部传入的变量,是唯一可以在 FROM 前使用的指令,外部传入时需要使用 --build-arg,例如:docker build --build-arg CODE_VERSION=21.04
    FROM:指定基础镜像,构建时作为做底层来使用,必须填写,一个 Dockefile 可出现多次,创建多个镜像,或指定其中的依赖关系
    LABEL:在镜像中添加元数据,格式为 key=value,可添加多个,LABEL值可继承父级镜像,如果KEY存在相同的,后者会进行覆盖
    EXPOSE:通知 Docker 容器在运行时监听的指定端口,并不是实际进行端口分发,默认 TCP 协议,也可指定 UDP 协议
    ENV:定义变量,格式为 key=value,另一种语法形式为 ENV key value,忽略等号
    WORKDIR:设置工作目录,如果目录不存在会自动创建,可以设置多个,当前如果是相对路径,那么将会根据于上个路径进行定位
    ADD:添加指定文件、文件夹或远程文件到目标目录,如果目标目录为相对路径,根据 WORKDIR 路径来执行
    COPY:复制指定文件、文件夹或远程文件到目标目录,如果目标目录为相对路径,根据 WORKDIR 路径来执行
    RUN:在当前镜像的新层中执行任何命令,并提交结果。有两种执行格式,一种是 shell 命令 RUN pwd,另一种是 Docker 封装的命令格式以 json 为参数传递执行 RUN ["pwd"]
    CMD:为容器执行命令提供默认值,有多个指令时,只会生效最后一个,在 执行容器生成命令 docker run 镜像 [命令],镜像后的命令会替换 CMD 指令
    ENTRYPOINT:为容器执行命令提供默认值,在 Dockerfile 文件中必须包含一个 CMD 或 ENTRYPOINT 指令,如果两种指令同时存在 CMD 会做为 ENTRYPOINT 的参数来进行交互
    MAINTAINER(已废弃) 作者信息已废弃,现在根据 LABEL 来指定

    执行 Dockerfile 文件进行镜像打包
    docker build -f /var/www/dockerfile -t phpworkerman/ubuntu:1.0 .
    

    --file, -f 设置 Dockerfile 文件所在的路径
    --tag, -t 设置新生成的镜像名称和标签
    .(点)该符号代表打包时依赖的上下文目录,因为打包是通过 Docker Engine 来进行的,它无法直接获取宿主机的文件目录,所以只能选择把 Dockerfile 文件所在的目录一同发送给 Docker Engine 处理,这个时候 .dockerignore 文件设置的忽略规则就会生效,点代表的就是 Dockerfile 文件所在的目录

    相关文章

      网友评论

        本文标题:Docker 入门教程之Dockerfile详解

        本文链接:https://www.haomeiwen.com/subject/fbmxbltx.html