5、Dockerfile指令详解

1、指令格式
    # Comment                注释
    INSTRUCTION argument    指令格式

    一个完整的Dockerfile的实例
    # first dockerfile for test
    FROM ubuntu:14.04
    MAINTAINER chao
    RUN apt-get update
    RUN apt-get install -y nginx
    EXPOSE 80

2、各指令详解

    2.1、FROM
        指定一个存在的镜像

        指令的格式
            FROM <image>
            FORM <image>:<tag>

2.2、MAINTAINER
    指定镜像的作者信息,包含镜像的所有者和联系人信息

    指令格式
        MAINTAINER <name> [<email>]

2.3、RUN
    指定当前镜像中运行的命令

    指令格式
        RUN <command>  (shell模式)
        RUN ["executable", "param1", "param2"] (exec模式)

        在shell 模式下是以/bin/sh -c command 运行的
        在exec模式下是以RUN ["/bin/bash", "-c", "echo hello"] 的方式运行的

2.4、 EXPOSE
    指定运行该镜像的容器使用的端口

    指令格式
        EXPORT <port> <port>

    注意EXPORT命令是告诉容器,容器中的程序会使用哪个端口,但为了安全起见,容器启动时不会主动暴露端口,必须在启动容器时指定端口映射,如一下命令
    docker run --name="df_nginx" -p 80 -d chao/df_test01 nginx -g "daemon off;"

2.5、CMD
    指定容器运行的默认命令,注意默认指令是指运行指定的镜像(run)时没有指定容器内运行指令时,它才会生效,如果运行容器时已指定运行的命令则CMD 命令被覆盖掉,不会起作用

    指令格式
        CMD ["exectuable", "param1", "param2"] (exec 模式)
        CMD command param1 param2 (shell 模式)
        CMD ["param1", "param2"] (作为ENTRYPOINT指令的默认参数)

2.6、ENTRYPOINT
    指定容器运行的命令, 与CMD不同的是它不会被docker run 命令中的指令所覆盖,但可以使用docker run --entrypoint 强制覆盖

    指令格式
        ENTRYPOINT ["exectuable", "param1", "param2"] (exec模式)
        ENTRYPOINT command param1 param2 (shell 模式)

    联合使用ENTRYPOINT 和 CMD 命令,用ENTRYPOINT 指定容器启动的命令用CDM指定启动的默认参数
    例:
        ENTRYPOINT ["/var/bin/nginx"]
        CMD ["-g"]

2.6、ADD & COPY
    将目标文件复制到容器中,ADD包含了类似tar 的功能,如果单纯的复制文件,Docker 推荐使用COPY

    指令格式
        ADD <src> ...<dest>
        ADD ["<src>"..."<dest>"]    (适应于文件路径中有空格的情况)

        COPY <src> ...<dest>
        COPY  ["<src>"..."<dest>"]    (适应于文件路径中有空格的情况)

2.7、VOLUME

2.8、WORKDIR
    指定容器的工作目录

    指令格式
    WORKDIR  /path/to/workdir

2.9 ENV
    指定容器的环境变量

    指令的格式
        ENV <key> <value>
        ENV <key>=<value>...

2.10 USER
    指定镜像是以什么用户去执行,没有指定会以root的模式去运行

    指定格式
        USER usr
        USER user:group
        USER user:gids

2.11、ONBUILD
    镜像触发器,当一个镜像被其他的镜像作为基础镜像时执行

    指令格式
        ONBUILD [INSTRUCTION]

    注:DOckerfile ONBIULD 指定的命令不会在构建镜像时执行,它只会在以此镜像构建的新的镜像才会执行


3、Dockerfile构建过程

    3.1、镜像的构建过程
        从基础镜像运行一个容器
        执行一条指令,对容器作出修改
        执行类似docker commit 的操作,提交一个新的镜像层
        再基于刚提交的镜像运行一个新的容器
        指定Dockerfile 中的下一条指令,直至所有指令执行完毕

        注意:镜像的构建过程中间镜像不会删除,而中间层镜像运行的容器则会被删掉

    3.1、使用中间层镜像镜像调试
        查找错误

    3.2、构建缓存
        Dockerfile 构建的过程中的每一步构建的中间层镜像都会变成缓存,在再一次构建相同的中间层镜像时就会利用缓存构建镜像,使构建镜像变得高效,有事如果要避免使用缓存时可以使用docker build --no-cache, 或在Dockerfile 中加上一个无关紧要的命令,下一次再一次build的时候,修改这个变量即可, 如 “ENV REFRESH_DATE 2018--0507”

    3.3、查看镜像的过程
        docker history [image]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值