zoukankan      html  css  js  c++  java
  • Docker 的CMD与ENTRYPOINT区别

    我们在构建一个docker镜像的时候,Dockerfile里面有两个命令会引起我们的注意,它们就是 CMD 和 ENTRYPOINT,看起来很相似,实际上并非如此。

    一、CMD

     顾名思义就是允许用户指定容器默认执行的命令。此命令会在docker run 没有指定其他命令的时候运行,换句话说,这个命令会被 docker run 指定的命令覆盖,即具有覆盖性,那么我们可以得出以下两个结论:

    1. 如果 docker run 指定了其他命令的话,那么CMD的命令将会被覆盖。
    2. 如果 Dockerfile 有多个CMD 指令,那么最终因为覆盖性,只会执行最后一条。

     CMD的三种格式

    1. Exec 格式:CMD["executable", "param1", "param2"]。
    2. 为 ENTRYPOINT 提供额外的参数:CMD["param1", "param2"],此时 ENTRYPOINT 必须使用 Exec 格式。
    3. Shell 格式:CMD command param1 param2,比如: CMD echo "hehehe",docker run 不带命令运行会直接输出: hehehe。

    二、ENTRYPOINT

      翻译过来是进入点,大概是可以由这个点进入容器内部的命令执行。

    准确的定义是:可以让容器以应用程序或者服务的形式进行。

     ENTRYPOINT的两种格式

    1. Exec 格式:ENTRYPOINT["executable", "param1", "param2"]
    2. Shell 格式:ENTRYPOINT command param1 param2,比如: CMD echo "hehehe",直接输出: hehehe。

    其中如果 CMD 与 ENTRYPOINT搭配使用的话,CMD 可以为 ENTRYPOINT 提供额外的参数。

    ENTRYPOINT ["/bin/echo", "nihao"]
    CMD ["laowang"]

    当容器通过 docker run -it <镜像名称> 启动的时候,输出:nihao laowang

    当容器通过 docker run -it <镜像名称> lisi 启动的时候,输出:nihao lisi

    PS.ENTRYPOINT  的 Shell 格式会忽略任何 CMD 或者 docker run 提供的参数。

  • 相关阅读:
    KVC
    MRC&ARC
    网络基础
    沙盒
    GCD深入了解
    iOS 架构模式MVVM
    iOS 源代码管理工具之SVN
    iOS给UIimage添加圆角的两种方式
    Objective-C 中,atomic原子性一定是安全的吗?
    iOS Block循环引用
  • 原文地址:https://www.cnblogs.com/cxbhakim/p/8530469.html
Copyright © 2011-2022 走看看