1. 前言

ENTRYPOINTCMD 都是Dockerfile 中的命令,两者都是用来:指定默认的容器的主进程的启动命令。那么接下来就介绍一下这两者在Dockerfile 中,以及Docker中的如何使用,以及区别和联系。

2. CMD 命令

 首先介绍一下 CMD 命令,命令分为两种格式, 一种是shell,另一种是 exec

  • shell : CMD <命令>
  • exec: CMD ["可执行文件","参数1","参数2"...]

  既然 CMD 命令是用来指定默认的容器的主进程的启动命令的,那么我们就可以用新的命令来替代这个命令啦。
当我们直接输入docker run --rm -it ubuntu:14.04 的时候,是默认进入Bash 的,如下图所示:

那么如果我们想换一种方式,那么怎么办呢,很简单。我们自己构建一个镜像来演示(基于ubuntu:14.04)。
假如我们想一运行镜像,就输出一条信息,“Hello,Robert!”
Dockerfile 中如下所示:

保存退出后,我们输入命令docker build -t cmddemo . 构建镜像,
然后运行 docker run --rm cmddemo
发现控制台输出 Hello,Robert!
运行成功。


2.1 注意1

在指令格式上,一般推荐使用exec 格式,这类格式在解析时 会被解析成JSON数组,因此一定要用双引号,而不要使用单引号。
如果使用Shell 格式的话,实际执行中,会被转换成exec 命令。比如
CMD echo hello
转换成
CMD ["sh", "-c" , "echo 'hello'"]

2.2 注意2

Docker 不是虚拟机,容器中的应用都应该前台执行,而不是像虚拟机,物理机里面那样,用upstartsystemd 去启动后台程序。容器中没有后台服务的概念。

3. ENTRYPOINT 命令

ENTRYPOINTCMD 格式一样,分为shellexec 两种格式。 ENTRYPOINTCMD 的目的一样,都是指定容器启动程序及其参数。当指定ENTRYPOINT后, CMD的含义就发生了改变,不再是直接运行其命令,而是将CMD的内容作为参数 传给ENTRYPOINT ,换句话说实际执行就变成了如下
<ENTRYPOINT> "<CMD>"

其实ENTRYPOINT 用起来和CMD差不多,但是还麻烦点,麻烦有麻烦的好处。

Dockerfile 中的代码如下:

然后在构建完,运行可看见如下:

接下来讲述CMDENTRYPOINT配合起来使用的。
Dockerfile 中如下:

然后构建运行,得到

运行 docker run --rm demo "echo 'Hello,Audience!'" 则会把CMD 中的内容直接替换掉,结果如下图所示:

4.参考链接

  1. https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/

Docker入门之---ENTRYPOINT和CMD的更多相关文章

  1. CMD centos7 安装 最新版本的docker -- dockerfire 原语 ENTRYPOINT - 导入镜像 tar mariadb Dockerfile 构建镜像

    yum update # vim /etc/yum.repos.d/docker.repo //添加以下内容 [dockerrepo] name=Docker Repository baseurl=h ...

  2. Docker入门教程(三)Dockerfile

    Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...

  3. Docker入门之七Dockerfile

    Dockerfile是一个文本格式的配置文本,可以使用它来创建自定义的镜像.首先我们可以先看一个dockerfile是什么样子.这里可以有一个网站不错:http://dockerfile.github ...

  4. 这可能是最为详细的Docker入门吐血总结

    这可能是最为详细的Docker入门吐血总结  https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html Docker是什么? 在计算机技术日新 ...

  5. Docker入门学习总结

    1. 什么是Docker Docker是一种虚拟化技术,其在容器的基础上进一步封装了文件系统.网络互联.进程隔离等等,从而极大地简化了容器的创建和维护.Docker使用 Google 公司推出的 Go ...

  6. Docker 入门指南——部署常用服务示例

    MongoDB FROM centos:centos7 MAINTAINER The CentOS Project <cloud-ops@centos.org> RUN yum -y up ...

  7. Docker 入门 之基本命令

    3 Docker 入门 首先确保docker 已成功安装在Linux 或windows 系统中 我们可以使用 docker info 查看docker是否成功安装和正常运行 运行我们第一个docker ...

  8. redis哨兵集群、docker入门

    redis-sentinel主从复制高可用 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果m ...

  9. Docker 入门基础

    Docker是一个能把开发的应用程序自动部署到容器的开源引擎.Docker是新的容器化技术,轻巧,易移植[Build Once, Configure Once And Run Anywhere].Do ...

随机推荐

  1. java中的异常以及 try catch finally以及finally的执行顺序

    java中的 try.catch.finally及finally执行顺序详解: 1.首相简单介绍一下异常以及异常的运行情况: 在Java中异常的继承主要有两个: Error和Exception 这两个 ...

  2. 【django之权限组件】

    一.需求分析 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,一个角色拥有若干权限.这样,就构造成& ...

  3. C语言第九次作业

    一.PTA实验作业 题目1:统计大于等于平均分人数 1. 本题PTA提交列表 2.设计思路 float i为循环变量,sum=0,count=0来表示所求人数 float *p=s来储存首地址 for ...

  4. 248&258--高级软件工程第三次作业

    0 小组成员 马帅 / 2017202110248 齐爽爽 / 2017282110258 1 项目 GitHub 地址 GitHub:https://github.com/whumashuai/QT ...

  5. 项目Beta冲刺Day1

    项目进展 李明皇 今天解决的进度 点击首页list相应条目将信息传到详情页 明天安排 优化信息详情页布局 林翔 今天解决的进度 前后端连接成功 明天安排 开始微信前端+数据库写入 孙敏铭 今天解决的进 ...

  6. 【iOS】swift-Binary operator '|' cannot be applied to two UIViewAutoresizing operands

    let view = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 568)) addSubview(view) view.autoresi ...

  7. vue内置指令详解——小白速会

    指令 (Directives) 是带有 v- 前缀的特殊属性,职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM. 内置指令 1.v-bind:响应并更新DOM特性:例如:v-bi ...

  8. wpf研究之道——datagrid控件数据绑定

    前台: <DataGrid x:Name="TestCaseDataGrid" ItemsSource="{Binding}" > {binding ...

  9. 流程控制语句(MySQL/MariaDB )

    本文目录:1.BEGIN...END2.true和false3.if结构4.case结构5.loop.leave和iterate6.repeat循环7.while循环 MySQL/MariaDB中的符 ...

  10. app测试中遇到问题总结

    工作总结: 1 这两天由于工作,需要进行抓包,使用了Charles,fidder,发现一个坑点: charles没有抓到返回值的时候,默认是不在列表显示请求信息的,能不能设置,我就不知道了,但是可以在 ...