Docker入门之---ENTRYPOINT和CMD
1. 前言
ENTRYPOINT 和CMD 都是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 不是虚拟机,容器中的应用都应该前台执行,而不是像虚拟机,物理机里面那样,用upstart和systemd 去启动后台程序。容器中没有后台服务的概念。
3. ENTRYPOINT 命令
ENTRYPOINT和 CMD 格式一样,分为shell 和exec 两种格式。 ENTRYPOINT 和CMD 的目的一样,都是指定容器启动程序及其参数。当指定ENTRYPOINT后, CMD的含义就发生了改变,不再是直接运行其命令,而是将CMD的内容作为参数 传给ENTRYPOINT ,换句话说实际执行就变成了如下
<ENTRYPOINT> "<CMD>"
其实ENTRYPOINT 用起来和CMD差不多,但是还麻烦点,麻烦有麻烦的好处。
Dockerfile 中的代码如下:
然后在构建完,运行可看见如下:
接下来讲述CMD 和ENTRYPOINT配合起来使用的。
Dockerfile 中如下:
然后构建运行,得到
运行 docker run --rm demo "echo 'Hello,Audience!'" 则会把CMD 中的内容直接替换掉,结果如下图所示:

4.参考链接
Docker入门之---ENTRYPOINT和CMD的更多相关文章
- CMD centos7 安装 最新版本的docker -- dockerfire 原语 ENTRYPOINT - 导入镜像 tar mariadb Dockerfile 构建镜像
yum update # vim /etc/yum.repos.d/docker.repo //添加以下内容 [dockerrepo] name=Docker Repository baseurl=h ...
- Docker入门教程(三)Dockerfile
Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...
- Docker入门之七Dockerfile
Dockerfile是一个文本格式的配置文本,可以使用它来创建自定义的镜像.首先我们可以先看一个dockerfile是什么样子.这里可以有一个网站不错:http://dockerfile.github ...
- 这可能是最为详细的Docker入门吐血总结
这可能是最为详细的Docker入门吐血总结 https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html Docker是什么? 在计算机技术日新 ...
- Docker入门学习总结
1. 什么是Docker Docker是一种虚拟化技术,其在容器的基础上进一步封装了文件系统.网络互联.进程隔离等等,从而极大地简化了容器的创建和维护.Docker使用 Google 公司推出的 Go ...
- Docker 入门指南——部署常用服务示例
MongoDB FROM centos:centos7 MAINTAINER The CentOS Project <cloud-ops@centos.org> RUN yum -y up ...
- Docker 入门 之基本命令
3 Docker 入门 首先确保docker 已成功安装在Linux 或windows 系统中 我们可以使用 docker info 查看docker是否成功安装和正常运行 运行我们第一个docker ...
- redis哨兵集群、docker入门
redis-sentinel主从复制高可用 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果m ...
- Docker 入门基础
Docker是一个能把开发的应用程序自动部署到容器的开源引擎.Docker是新的容器化技术,轻巧,易移植[Build Once, Configure Once And Run Anywhere].Do ...
随机推荐
- C语言博客作业--一二维数组。
一.PTA实验作业 题目1:7-1 将数组中的数逆序存放 1. 本题PTA提交列表 2. 设计思路 定义三个整型变量n用来存放整数个数i,j是循环数 scanf("%d",& ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- Bate测试报告
1 测试中找出的bug Bug类型 总数 描述 修复的bug 10 1.注册成功并没有直接跳转到登录页面: 2.学校地区无限制,数字也可以: 3.虽然相同用户名不能注册,但是只是显示,注册失败,却没有 ...
- 代码中输入数字自动筛选出最大值,使用array,for loop and if (21.9.2017)
# include <stdio.h> # define N main(){ int a, b; ,,,,,,,,,,,,,,,,}; //array中输入需要排序的数字 ]; ; a & ...
- 转 Eclipse快捷键调试大全
(1)Ctrl+M --切换窗口的大小(2)Ctrl+Q --跳到最后一次的编辑处(3)F2 ---重命名类名 工程名 --当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时To ...
- 团队作业4——第一次项目冲刺(Alpha版本)2017.11.19
第三次会议:2017-11-16 第二次会议讨论的还没有完全实现,于是在第三次会议上对此进行了一些对我们工作上的看法,得出结论:多花时间啊!!!! 又没照照片图: 会议主要内容: 1.登录注册完善 2 ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- OptaPlanner - 把example运行起来(运行并浅析Cloud balancing)
经过上面篇长篇大论的理论之后,在开始讲解Optaplanner相关基本概念及用法之前,我们先把他们提供的示例运行起来,好先让大家看看它是如何工作的.OptaPlanner的优点不仅仅是提供详细丰富的文 ...
- 使用JDBC中的出现的乱码和查询无结果问题
使用JDBC中的问题 连接的后出现查询结果是乱码. 1.可能是代码的编码与数据库的编码不同 有可以将二者都设置为UTF-8 2.如果比较懒得话可以只设代码为UTF-8 mysql 连接url中us ...
- Python内置函数(46)——format
英文文档: format(value[, format_spec]) Convert a value to a "formatted" representation, as con ...






