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 提供的参数。

  • 相关阅读:
    洛谷 P3128 [ USACO15DEC ] 最大流Max Flow —— 树上差分
    洛谷 P3953 [ NOIP 2017 ] 逛公园 —— 最短路DP
    bzoj 3231 [ Sdoi 2008 ] 递归数列 —— 矩阵乘法
    bzoj 1024 [ SCOI 2009 ] 生日快乐 —— 递归
    hdu 5823 color II —— 子集DP
    bzoj 1093 [ ZJOI 2007 ] 最大半连通子图 —— 拓扑+DP
    洛谷 P3959 NOIP2017 宝藏 —— 状压搜索
    最短路(模板
    线段树 扫描线
    Dijkstra算法
  • 原文地址:https://www.cnblogs.com/cxbhakim/p/8530469.html
Copyright © 2011-2022 走看看