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. Excel导出不同浏览器下文件名乱码问题

    解决思路:通过请求头中的User-Agent参数中的信息来区分不同浏览器 public Object exportPz(HttpServletRequest request, HttpServletR ...

  2. (译文)开始学习Vue——构建你的第一个Vue应用

    我们要构建如下组件:(最终代码在这里:https://codesandbox.io/s/38k1y8x375) 开始 Vue是支持单文件组件的,但是我们不准备这么做.你也可以构建一个全局的组件,通过V ...

  3. numpy.random.seed()方法

    先贴参考链接: https://stackoverflow.com/questions/21494489/what-does-numpy-random-seed0-do numpy.random.se ...

  4. Python实现网站模拟登陆

    一.实验简介 1.1 基本介绍 本实验中我们将通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方 ...

  5. Linux下vim上编辑实现进度条

    1.效果展示: 进度条,先来看一个效果: 这是进度结果,模拟实现了进度条的前进.百分比的现实.以及稍微的动画特效. 2.原理描述: 因为Linux系统下的输出有缓存,如果及时刷新显示,就可以得到我们想 ...

  6. 网上找的hadoop面试题目及答案

    1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式全分布式模式2. 单机(本地)模式中的注意点? 在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM ...

  7. ViurtualBox配置虚拟机Linux的网络环境

    之前可以使用VMware配置成功,让虚拟机和本地通信,虚拟机可以访问外网,但是VMware体积太大了,最后终于把virtualBox也配置成功,也使得两者兼备 环境:本地windows7 64位专业版 ...

  8. 浅谈 DML、DDL、DCL的区别

    一.DML DML(data manipulation language)数据操纵语言: 就是我们最经常用到的 SELECT.UPDATE.INSERT.DELETE. 主要用来对数据库的数据进行一些 ...

  9. js通过class获取元素时的兼容性解决方案

    1:::::方法代码如下:function getByClass(sClass){    var aResult=[];    var aEle=document.getElementsByTagNa ...

  10. 在python后台如何将客户端提交的form表单数据提取出来?

    1.获取客户端提交的表达数据,数据类型为ImmutableMultiDictformData = request.form2.将提取的数据转化成字典formDict = formData.to_dic ...