• 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/
  • 相关阅读:
    申论复习路线
    项目管理小拾
    物理隔离卡,双网通用安装
    生成css sprites
    图片压缩
    css预编译 sass
    小杂记
    遮罩层和弹出层(居中)
    布局之并列登高自适应高度解决方案
    slide逻辑
  • 原文地址:https://www.cnblogs.com/lxhbky/p/14511220.html
Copyright © 2020-2023  润新知