Dockerfile 中的 CMD和ENTRYPOINT 两兄弟
CMD
先说老大 CMD
当一个容器准备好运行之后,需要找一个指定命令来创建一个初始进程并运行。
一,/bin/sh -c
因为某种意义上一个Dockerfile其实可以理解是一个简化版bash 脚本,所以一般情况下,我们可以像写bash命令一样使用CMD来指定使用bash来运行命令。
比如:
CMD echo 'hello world!'
这样,容器创建之后,就会使用/bin/sh -c来运行上述命令,如下所示:
/bin/sh -c 'echo hello world!'
二, 直接运行可执行程序
如果我们不想是用/bin/sh而是直接运行一个可执行程序的话,怎么办呢?这种情况下,可以使用CMD命令的另外一种形式,如下:
CMD ["echo", "hello world!"]
这样,容器准备好以后就会直接创建一个进程来运行echo这个程序 (/bin/echo),打印出"hello world!"。
使用CMD有一个好处就是在使用docker run命令运行容器时可以使用command参数来覆盖CMD缺省指定的命令。比如:
docker run -it test:latest echo 'hello world!'
ENTRYPOINT
其实ENTRYPOINT是老大,它比CMD优先级更高
我们也可以使用ENTRYPOINT来指定容器初始程序,可以是bash /bin/sh, 也可以是其他可执行程序。语法和CMD的相似。比如:
#/bin/sh -c
ENTRYPOINT echo 'hello world!' #exeutable
ENTRYPOINT ["echo", "hello world!"]
两兄弟如何相处
一 EntryPoint 老大
CMD可以指定容器运行入口。但ENTRYPOINT作为entry point,有不可置疑的地位。它是老大,只有它不在的时候,CMD才能当老大。那么它在的时候CMD是什么地位呢?这要看它以什么方式存在,如果是使用/bin/sh -c来启动容器,那么没有CMD什么事了。如果是使用其他可执行程序启动容器,那么CMD指定的所有东东统统作为该可执行程序的后续参数使用。
Dockerfile 中的 CMD和ENTRYPOINT 两兄弟的更多相关文章
- Dockerfile 中的 CMD 与 ENTRYPOINT
CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令.单从功能上来看,这两个命令几乎是重复的.单独使用其中的一个就可以实现绝大多数的用例.但是既然 doker 同时提供了它们,为了在 ...
- Dockerfile 中的 CMD 与 ENTRYPOINT(转)
add by zhj: CMD和ENTRYPOINT的差异很小,可以认为完全可以相互代替.两者都支持shell模式和exec模式, shell模式:跟你在shell下执行命令的格式一样,简单方便,但 ...
- Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别
RUN 指令:用于指定 docker build 过程中要运行的命令. 语法格式: RUN <command> 或 RUN ["<executeable>" ...
- Servlet中分发器和重定向两兄弟
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513702111698485767/ 弄清这个两兄弟,我们还是从练习中去理解 先创建一个数据提交页面,注意路径 编 ...
- Dockerfile之CMD与Entrypoint使用要点
CMD与ENTRYPOINT都可以代表容器的启动命令,单丛语义上来理解,CMD是一个命令或者口令,而ENTRYPOINT则是一个入口(相当于容器启动时的入口),那么其实就可以理解为每当我们开启一个容器 ...
- 论docker中 CMD 与 ENTRYPOINT 的区别
Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: CMD指令: The main purpose of a ...
- 论docker中 CMD 与 ENTRYPOINT 的区别(转)
Dockerfile 用于自动化构建一个docker镜像.Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: ...
- CMD 与 ENTRYPOINT 的区别
Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: CMD指令: The main purpose of a ...
- [转帖]Dockerfile 中 ENTRYPOINT 与 CMD 的区别
Dockerfile 中 ENTRYPOINT 与 CMD 的区别 https://it.baiked.com/system/docker/1975.html 简单区别 Dockerfile 有两个启 ...
随机推荐
- codeforces 690C3 C3. Brain Network (hard)(lca)
题目链接: C3. Brain Network (hard) time limit per test 2 seconds memory limit per test 256 megabytes inp ...
- 一题多解 —— linux 日志文件(log)reload 重新载入
1. tail -F 等同于–follow=name –retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪 也即可以间接实现从日志文件末尾,不断载 ...
- Eclipse全项目搜索指定文件&字串
在eclipse中如果希望在大量的项目中寻找指定的文件可不是一件轻松的事,还好eclipse提供了强大的搜索功能. 我们可以通过通配符或正则表达式来设定查寻条件,下面是操作示例: ctrl+h 打开搜 ...
- DebugView 使用
最近遇到带加密狗的工程项目,无法使用控制台调试,尝试使用DebugView进行辅助调试. DebugView是一个系统调试信息输出的捕获工具,可以捕获程序中由TRACE(debug版本)和Output ...
- linux中目录操作<1>
一.目录的权限 (1)目录文件的访问权限分为三组,分别为所有者,用户,其他.每个权限组的权限位有3个,分别为读.写.执行. 注意:可以使用stat函数得到目录文件的状态信息.权限为在stat结构中st ...
- sprintf系列函数
1 简介和功能 字符串格式化命令,主要功能是把格式化的数据写入某个字符串中.sprintf 是个变参函数. 把格式化的数据写入某个字符串缓冲区. 2 函数原型 int sprintf( char *b ...
- HDU 1270 小希的数表 (暴力枚举+数学)
题意:... 析:我们可以知道,a1+a2=b1,那么我们可以枚举a1,那么a2就有了,并且a1+a3=b2,所以a3就有了,我们再从把里面的剩下的数两两相加,并从b数组中去掉, 那么剩下的最小的就是 ...
- 了解Web Uploader
1.简介WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流 ...
- poj 1988 Cube Stacking【带权并查集】
设s[x]为x所在栈里的个数,c[x]表示x下面有几个,合并的时候直接合并s,然后路径压缩的时候更新c即可 #include<iostream> #include<cstdio> ...
- Event Handling Guide for iOS--事件驱动指南
事件是发送给应用程序来通知它用户动作的对象.在iOS中,事件可以有多种形式:多触摸事件,motion(,移动,手 势)事件---例如,设备的加速计(accelerometer)--和控制多媒体的事件. ...