zoukankan      html  css  js  c++  java
  • Docker中CMD,ENTRYPOINT命令区别_shell和Exec格式

    本人实践:

    # 下面这种写法会将变量值$MAIN_DLL当成字符串处理
    ENTRYPOINT  ["/usr/bin/dotnet","/app/$MAIN_DLL"]
    # 下面这种写法会把"/usr/bin/dotnet","/app/$MAIN_DLL"分开执行,且变量值$MAIN_DLL结果为空
    ENTRYPOINT  ["sh", "-c","/usr/bin/dotnet","/app/$MAIN_DLL"]
    # 正确写法1-多个脚本不使用环境变量:(结论:ENV环境变量只会在Shell脚本的首次执行起作用,多条脚本分开后面的命令会取不到环境变量)
    ENTRYPOINT  ["/usr/bin/dotnet","/app/WebApplication.dll"]
    # 正确写法2-单个脚本使用环境变量:(结论:ENV环境变量只会在Shell脚本的首次执行起作用,多条脚本分开后面的命令会取不到环境变量)
    ENTRYPOINT  ["sh", "-c","/usr/bin/dotnet /app/${MAIN_DLL}"]

    A-CMD,ENTRYPOINT命令区别

    CMD:  启动容器后,提供默认命令及参数 (不一定会执行,只是默认) 会docker run 后面参数替换
     
    ENTRYPOINT: 启动容器时执行(一定会执行)  
    /* 例如: Dockerfile 中:
     FROM centos             //必须现有base镜像,否则Error:No build stage in current context
     RUN touch ceshi_cmd         //run创建新镜像层,安装软件包
     CMD echo "hello with cmd"
     ENTRYPOINT echo "hello with entrypoint" 
    */
     
     docker run -it  this //运行 显示 ENTRYPOINT的内容
                          // ENTRYPOINT一定会执行,没有enrtypoint则会执行 cmd的内容
                          //cmd 作为默认选项 ,如果run it 带参数,则cmd不会执行

    B-CMD的使用

    CMD 指令允许用户指定容器的默认执行的命令。 
        三种格式:
    Excel:   CMD ["executable","param1","param2"]
    ExceL参数:CMD ["param1","param2"]  //用来为ENTRYPOINT 提供参数,此时entrypoint必须用Exce
    Shell:   CMD command param1 param2 
    例:  
    /*
        CMD echo "Hello world" 
       // docker run  -it [image] 输出: Hello World 
       // docker run -it  [image] /bin/bash  此时会进入 /bin/bash命令,忽视cmd
       // docker run -it  [image]  “param" 加参数会出现错误 
    */

     图例:

     C-ENTRYPOINT的使用:

    ENTRYPOINT :
    Exec格式 用使用CMD的参数,run [image] 会替代CMD参数,会使用 run 中的多个参数
    例:
    /*  
        ENTRYPOINT ["/bin/echo", "Hello"]   
        CMD ["world"]    //表示默认参数,没提供参数,则使用此参数
              
        docker run -it [image] 输出:Hello world 
        docker run -it [image] "hanke"  输出 Hello hanke  ,不使用默认参数
        docker run -it [image] "hanke" "hujing"  输出 Hello hankd hujing 使用多个提供参数
        
    */
     
    Shell格式 :不会使用 CMD参数,run [image] 参数

    图例:

    //entrypoint 使用参数   

    //entrypoint不使用cmd参数和[image]参数

     

    shell和Exec格式 

    Shell格式Example:                                            Exec格式Example:
     
    RUN apt-get install python3                      RUN ["apt-get", "install", "python3"] 
    CMD echo "Hello world"                           CMD ["/bin/echo", "Hello world"]   
    ENTRYPOINT echo "Hello world"                    ENTRYPOINT ["/bin/echo", "Hello world"] 
     
    Sheel格式中的命令会直接被sheel解析:
    而Exec格式不会直接解析,需要加参数
     
    例:
    ENV name Cloud Man   
    ENTRYPOINT ["/bin/echo", "Hello, $name"]   //输出 Hello,Cloud Man 
     
    ENV name Cloud Man   
    ENTRYPOINT ["/bin/sh","echo Hello, $name"]  //输出 Hello,$name 
    ["/bin/sh","-c","echo Hello, $name"] //输出  /bin/sh:Hello,Cloud Man Command not found
     
    Warming:
    CMDENTRYPOINT 推荐使用 Exec 格式,因为指令可读性更强,更容易理解
    RUN 则两种格式都可以。

    感谢:https://blog.csdn.net/weixin_42971363/article/details/91506844

    *感谢您的阅读。喜欢的、有用的就请大哥大嫂们高抬贵手“推荐一下”吧!你的精神 支持是博主强大的写作动力。欢迎转载!
    *博主的文章是自己平时开发总结的经验,由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
    *我的博客: http://www.cnblogs.com/lxhbky/
  • 相关阅读:
    《DSP using MATLAB》Problem 6.17
    一些老物件
    《DSP using MATLAB》Problem 6.16
    《DSP using MATLAB》Problem 6.15
    《DSP using MATLAB》Problem 6.14
    《DSP using MATLAB》Problem 6.13
    《DSP using MATLAB》Problem 6.12
    《DSP using MATLAB》Problem 6.11
    P1414 又是毕业季II
    Trie树
  • 原文地址:https://www.cnblogs.com/lxhbky/p/14511220.html
Copyright © 2011-2022 走看看