美文网首页
Dockerfile

Dockerfile

作者: dlstone | 来源:发表于2020-02-19 00:08 被阅读0次
    • Dockerfile文件
    FROM alpine:3.11.3
    # 环境变量
    ENV path /test
    # 当前工作目录
    WORKDIR $path
    # 构建镜像时执行pwd命令
    RUN pwd
    # 拷贝文件至image
    COPY test.txt .
    # 构建镜像时执行cat命令
    RUN cat test.txt
    # 运行容器时执行命令
    ENTRYPOINT ["echo", "hello"]
    # ENTRYPOINT默认参数
    CMD ["world"]
    

    Dockerfile中的指令是相互独立的,互不影响

    • docker build
      从一个Dockerfile和一个context中构建一个image;
      context:build命令指定目录的所有文件(递归,也可以是git仓库地址)
      build命令会将context指定的文件都发送给docker daemon,可以在context根目录下添加.dockerignore文件,忽略不需要的文件和目录
      Dockerfile文件默认位于context根目录下,也可以通过-f指定
    Dockerfile指令
    • FROM
      拉取base image
    • RUN
      在构建image(docker build)时运行一条命令,可以有多个RUN
    # 第一种格式:shell form 格式
    RUN <command>
    # 第二种格式:exec form 格式
    RUN ["executable", "param1", "param2"]
    
    • CMD
      在运行镜像(docker run)时执行一条命令,Dockerfile中有且只有一个CMD生效:多个CMD只有最后一个生效
    # 第一种格式:exec form 格式(推荐)
    CMD ["executable","param1","param2"] 
    # 第二种格式:作为ENTRYPOINT的default parameters
    CMD ["param1","param2"]
    

    当ENTRYPOINT不存在时,CMD可作为单独的命令存在。当ENTRYPOINT存在时,CMD会被识别为ENTRYPOINT的默认参数。
    无论哪种情况,CMD指定的参数都会被docker run时指定的运行参数覆盖。

    • ENTRYPOINT
      在运行镜像(docker run)时执行一条命令,Dockerfile中只有最后一个ENTRYPOINT生效,生效规则同CMD
    # 推荐使用exec form格式,可由CMD指定默认参数
    ENTRYPOINT ["executable", "param1", "param2"]
    

    docker run有运行参数时:
    CMD被覆盖,所有docker run运行参数追加至ENTRYPOINT指令后。

    • ADD
      添加文件至image
    # src:host文件/目录;dest:image文件/目录
    ADD <src>... <dest>
    # 路径中含有空格
    ADD ["<src>",... "<dest>"]
    

    src必须在context下

    • COPY
      拷贝文件至image,类似ADD,可以看做ADD子集;-- 推荐使用(替代ADD)

    ADD额外功能:src支持URL;支持压缩包(gzip, bzip2 or xz)自动解压,但不支持URL下载的压缩包自动解压;

    • VOLUME
      创建挂载点
    # JSON array
    VOLUME ["/var/log/", "/var/db"]
    # plain string
    VOLUME /var/log /var/db
    

    需要在docker run时,通过-v--mount指定 host directory

    • ENV
      设置环境变量
    # 设置单个
    ENV <key> <value>
    # 批量设置
    ENV <key>=<value> ...
    

    可通过docker inspect来查看ENV

    • WORKDIR
      指定当前工作目录
    WORKDIR /path/to/workdir
    
    • EXPOSE
      容器在运行时监听的端口
    # 默认TCP协议
    EXPOSE 8080
    # 指定UDP协议
    EXPOSE 8080/udp
    

    需要在docker run时,通过-p来指定与主机端口的映射

    • USER
      指定当前用户
    # 指定当前用户为root
    USER root
    

    相关文章

      网友评论

          本文标题:Dockerfile

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