我们在构建一个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 提供的参数。

Docker 的CMD与ENTRYPOINT区别的更多相关文章

  1. docker CMD 和 ENTRYPOINT 区别

    昨天用Dockerfile来启动mongodb的集群,启动参数--replSet死活没执行,最后就决定研究一哈cmd和entrypoint.但是上网看了一些资料个人觉得讲的不好,还是没有说出根本的东西 ...

  2. 论docker中 CMD 与 ENTRYPOINT 的区别

    Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: CMD指令: The main purpose of a ...

  3. 论docker中 CMD 与 ENTRYPOINT 的区别(转)

    Dockerfile 用于自动化构建一个docker镜像.Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: ...

  4. [转]【docker】CMD ENTRYPOINT 区别

    本文转自:https://blog.csdn.net/u010900754/article/details/78526443 昨天用Dockerfile来启动mongodb的集群,启动参数--repl ...

  5. Docker系列(23)- CMD和ENTRYPOINT的区别

    CMD和ENTRYPOINT的区别 CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 测试CMD ...

  6. RUN vs CMD vs ENTRYPOINT - 每天5分钟玩转 Docker 容器技术(17)

    RUN.CMD 和 ENTRYPOINT 这三个 Dockerfile 指令看上去很类似,很容易混淆.本节将通过实践详细讨论它们的区别. 简单的说: RUN 执行命令并创建新的镜像层,RUN 经常用于 ...

  7. Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

    1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这 ...

  8. Dockerfile中CMD和ENTRYPOINT的区别

    当启动一个容器时,CMD和ENTRYPOINT都可以用来执行启动命令.但它们的具体用法还是有一些区别: 1. Dockerfile必须至少指定CMD或者ENTRYPOINT其中的一个. 2. ENTR ...

  9. CMD 与 ENTRYPOINT 的区别

    Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: CMD指令: The main purpose of a ...

随机推荐

  1. mysql启动报错(mac)

    $mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) ...

  2. Storm累计求和中使用各种分组Grouping

    Shuffle Grouping: 随机分组, 随机派发stream里面的tuple, 保证bolt中的每个任务接收到的tuple数目相同.(它能实现较好的负载均衡) Fields Grouping: ...

  3. MAVEN入门(二)

    一.IDEA+MAVEN+Tomcat7 创建一个简单的Web app 1.用IDEA创建一个maven项目 注意: 红色部分一定要自己手选本地配置好的maven_home的地址,否则IDEA会选用内 ...

  4. Java读取数据源相关信息

    一.采用读取数据源配置文件的方式 package com.ofsp.utils; import java.io.IOException; import java.io.InputStream; imp ...

  5. sersync+rsync同步

    (一)目标服务器(rsync):10.60.50.192 1.安装rsync yum -y install rsync 2.创建rsyncd.conf配置文件 vi /etc/rsyncd.conf ...

  6. eclipse maven web

    在eclipse中用maven创建web项目. 环境配置 C:\Users\xxx>java -versionjava version "1.8.0_121"Java(TM) ...

  7. SELINUX工作原理

    SELinux工作原理 1. 简介 SELinux带给Linux的主要价值是:提供了一个灵活的,可配置的MAC机制. Security-Enhanced Linux (SELinux)由以下两部分组成 ...

  8. springMVC 拦截器源码解析

    前言:这两天学习了代理模式,自然想到了 springmvc 的 aop 使用的就是动态代理,拦截器使用的就是 jdk 的动态代理.今天看了看源码,记录一下.转载请注明出处:https://www.cn ...

  9. JS的__proto__与prototype

    一.prototype和__proto__的概念 prototype是函数的一个属性(每个函数都有一个prototype属性),这个属性是一个指针,指向一个对象.它是显示修改对象的原型的属性. __p ...

  10. APUE学习笔记——11 线程基础

    线程标识 线程由线程号进行标识.线程号仅在线程所属的进程环境中有效.也就是说属于不同进程的两个线程可能线程号一样. 线程标识用结构体pthread_t tid表示.与线程Id相关的函数如下: 比较两个 ...