Docker中CMD,ENTRYPOINT命令区别,shell和Exec格式 (Docker学习笔记一)

 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不会执行

 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" 加参数会出现错误 
*/

 图例:

 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:
CMD 和 ENTRYPOINT 推荐使用 Exec 格式,因为指令可读性更强,更容易理解
RUN 则两种格式都可以。 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值