美文网首页k8s
docker Dockerfile

docker Dockerfile

作者: bdslinux | 来源:发表于2017-11-28 20:04 被阅读37次

    Dockerfile 介绍

    它是一个文本文件,镜像文件构建脚本
    由一些列用于根据基础镜像构建新的镜像文件的专用指令序列组成

    Dockerfile command

    • ADD
    • COPY
    • ENV
    • EXPOSE
    • FROM
    • MAINTANIER
    • LABEL
    • STOPSIGNAL
    • USER
    • VOLUME
    • WORKDIR

    FROM

    必须是第一个非注释行,用于指定所用到的基础镜像

    语法格式
    • FROM <image>[:<tag>]
    • FROM <image>@<digest>

    注意: 尽量不要在一个dockerfile中使用多个FROM指令

    MAINTANIER

    用于提供信息的指令,用于让作者提供本人的信息
    建议紧跟在FROM以后,不限制出现的位置

    语法格式

    MAINTANIER <authors detail>

    COPY

    用于docker主机复制文件指向正在创建的映像文件中

    语法格式
    • COPY SRC DEST
    • COPY "SRC"... "DEST"
    解释
    • src: 要复制的源文件或目录,支持使用通配符
    • dest: 目录路径,正在创建的镜像文件的文件系统路径,建议使用绝对路径,否则,则相对于WORKDIR而言,所有复制生成的目录文件的uid和gid均为0
    注意
    • src 必须是build上下文中的路径,因此不能使用类似"../some"的路径
    • src 如果是目录,递归复制会自动行,如果有多个src ,包括src上使用了通配符这种情况,此时,dest必须是目录,而且必须以/结尾
    • dest 如果事先不存在,它将被自动创建,包括其父目录

    ADD

    类似于COPY指令,额外还支持复制tar文件,以及URL语法

    语法格式
    • ADD SRC DEST
    • ADD "SRC" ... "DEST"
    注意
    • 以url格式指定的源文件,下载完成后其目标文件的权限为600
    • 如果src是url,且dest不以/结尾,则src指定的文件将被下载并直接被创建为dest, 如果dest以/结尾,则url指定的文件被下载至dest中,并保留原名
    • 如果src是一个tar文件,它将被展开为一个目录,其行为类似于tar -x 命令,但是如果通过url下载到的文件是tag格式的,是不会自动被展开的

    ENV

    定义环境变量,此变量可被当前dockerfile文件中的其它指令调用
    调用格式为$varaible_name或者${variable_name}

    语法格式
    • ENV <key> <value> 一次定义一个变量
    • ENV <key>=<value> ... 一次定义多个变量 如果value中有空白字符,如要用\字符进行转义
    注意
    • ENV 定义的环境变量在镜像运行的整个过程中一直存在
    • 因此可以使用inspect命令查看,甚至可以再docker run启动此镜像时候,使用--env选项来修改制定的环境值

    USER

    指定运行镜像时候, 或运行Dockerfile文件中的任何RUN,CMD,/ENTRYPORINT指定的程序时的用户名或者UID

    语法格式
    • USER <uid>|<USERNAME>
    注意
    • UID 应该使用/etc/passwd 文件存在的用户的UID,否则,docker run可能会出现错误

    WORKDIR

    用于为Dockerfile中所有的指令指定工作目录

    语法格式
    • WORKDIR <dirpath>
    注意
    • WORKDIR 可出现多次,也可使用相对路径,此时表示相对于前一个WORKDIR指令指定的路径
    • WORKDIR 还可以调用ENV定义的环境变量的值

    VOLUME

    用于目标镜像文件中创建一个挂载点的目录,用于挂载主机上的卷或者其它容器的卷

    语法格式
    • VOLUME <mountpoint>
    • VOLUME ["<mountpoint>" .... ]

    RUN

    于指定docker build命令过程中运行的命令

    语法格式
    • RUN <COMMAND>
    • RUN ["executeable" ,"<param1>" ,"<param2>" ]
    注意
    • 每个run命令就额外加一层,所以建议一个RUN指令执行多个命令

    CMD

    类似于RUN指令,用于运行程序,但二者运行的是场景不同
    CMD在docker run时运行而非docker build,CMD指令的首
    要目的为了在于为启动的容器指定默认要运行的程序程序
    运行结束, 容器也就结束,不过,CMD指令指定的程序可被
    docker run命令行参数中执行的要运行的程序所覆盖

    语法格式
    • CMD <COMMAND>
    • CMD ["executeable" ,"<param1>" ,"<param2>" ]
    • CMD ["<para1>","<param2>"]
    注意
    • 第三种为ENTRYPOINT指令指定的程序的默认参数
    • 如果dockefile中存在多个CMD指令,只会最后一个生效

    ENTRYPOINT

    类似于CMD,为容器指定默认的启动程序,不会被docker run
    所运行的程序所覆盖.而且这些命令行参数,会被当作参数送
    给ENTRYPOINT指令指定的程序但是如果运行docker run时,
    使用了 --entrypoint选项,此选项的参数可当作要运行的程序覆盖
    ENTRYPOINT指令指定的程序

    语法格式
    • ENTRYPOINT <COMMAND>
    • ENTRYPOINT ["executeable" ,"<param1>" ,"<param2>" ]

    EXPOSE

    用于为容器指定要暴露的端口

    语法格式
    • EXPOSE <PORT>[/<PROTOCAL>] [<PROT></PROTOCAL>]
    • PROTOCAL: 默认为tcp,可以是tcp或者udp
    例如 eg:
    • EXPOSE 11211/tcp 11211/udp

    ONBUILD

    定义触发器

    当前dockerfile构建出的镜像被用作基础镜像,去构建其他镜像的时候,ONBUILD指令指定的操作才会被执行

    语法格式
    • ONBUILD <instruction>
    • ONBUILD ADD my.conf /etc/mysql/my.conf
    注意

    ONBUILD不能自我嵌套,且不会触发FROM和MAINTERNATER指令

    docker command

    docker build -t bdshello  .     #创建image镜像构建Dockerfile 
    docker run -p 4000:80 bdshello  #启动bdshello容器 映射端口
    docker run -d -p 4000:80 bdshello  #后台启动
    docker container ls             #显示所有启动的容器
    docker container ls -a          #显示所有容器包括不启动的
    docker container stop <hash id>     #优雅停止容器 
    docker container kill  <hash id>    #强制停止容器
    docker container rm <hash id>       #移除容器 
    docker container rm  $(docker container ls -a -q)  #移除所有容器 
    docker image ls -a                #列出所有镜像 
    docker image rm <image id>        #删除镜像
    docker image rm $(docker image ls -a -q)  #删除所有镜像
    

    相关文章

      网友评论

        本文标题:docker Dockerfile

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