zoukankan      html  css  js  c++  java
  • 9.dockerfile之ENTRYPOINT指令

    一、ENTRYPOINT说明


    entrypoint的作用是,把整个container变成了一个可执行的文件,这样不能够通过替换CMD的方法来改变创建container的方式。但是可以通过参数传递的方法影响到container内部

    每个Dockerfile只能够包含一个entrypoint,多个entrypoint只有最后一个有效

    当定义了entrypoint以后,CMD只能够作为参数进行传递

    二、ENTRYPOINT指令优先级


    ENTRYPOINT 指令和CMD类似,也是用来指定容器启动时执行的命令,但ENTRYPOINT指令的优先级更高:

    1.启动容器命令不包含参数

    假设dockerfile同时存在ENTRYPOINT指令和CMD指令,那么容器启动时先执行ENTRYPOINT指令再执行CMD指令;

    2.启动容器命令包含参数

    假设dockerfile同时存在ENTRYPOINT指令和CMD指令,那么容器启动时先执行ENTRYPOINT指令再执行CMD指令,同时dockerfile内的CMD指令被覆盖;

    我们编写个dockerfile来验证上面两种情况:

    #Base image
    FROM centos
    
    #MAINTAINER,this dockerfile creater
    MAINTAINER loose@docker.com
    
    #entrypoint指令,配合下方的CMD指令内容在容器启动时输出:entrypoint and cmd
    ENTRYPOINT ["echo"]
    
    #CMD指令
    CMD ["entrypoint and cmd"]

    构建镜像:

    查看镜像:

    测试上方的条件1,根据镜像启动容器,启动命令不携带参数:

    测试结果:的确是entrypoint指令先执行,如果没有先执行,是无法输出CMD指令参数的!

    测试上方的条件2,根据镜像启动容器,启动命令携带参数,验证是否dockerfile文件内的CMD参数被覆盖:

    测试结果:dockerfile文件内的CMD参数被覆盖,并且启动容器参数一样是在entrypoint指令后执行。

    三、ENTRYPOINT在启动容器时动态替换


     我们还可以在docker run命令中通过 --entrypoint 覆盖dockerfile文件中的ENTRYPOINT参数,我们先修改下dockerfile,然后再构建镜像,最后通过启动命令来指定entrypoint指令参数:

    #Base image
    FROM centos
    
    #MAINTAINER,this dockerfile creater
    MAINTAINER loose@docker.com
    
    #CMD指令
    CMD ["by entrypoint"]

    构建后,镜像为:

    启动容器,手动执行entrypoint:

    再次启动容器,指定CMD参数:

    总结:

    可以使用--entrypoint="xx"外部指定ENTRYPOINT指令参数;

    同时,在外部指定ENTRYPOINT指令参数时CMD参数也必须在外部启动容器时指定。

  • 相关阅读:
    最后一次作业-- 总结报告
    第14.15周作业
    第七周作业
    第六周作业
    第四周作业
    第三周作业。
    第四次作业
    第三次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/Json1208/p/8974164.html
Copyright © 2011-2022 走看看