CMD/ENTROYPOINT区别
CMD/ENTROYPOINT区别
相同点:都是指定一个容器:启动时要运行的命令
不同点(重点):
CMD:
dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换
例子:docker run -it -p 8888:8080 tomcat ls -l
[root@tzh tzh]# docker run -it -p 8888:8080 tomcat ls -l
total 152
-rw-r--r-- 1 root root 18982 Jun 3 17:13 BUILDING.txt
-rw-r--r-- 1 root root 5409 Jun 3 17:13 CONTRIBUTING.md
-rw-r--r-- 1 root root 57092 Jun 3 17:13 LICENSE
-rw-r--r-- 1 root root 2333 Jun 3 17:13 NOTICE
-rw-r--r-- 1 root root 3255 Jun 3 17:13 README.md
-rw-r--r-- 1 root root 6898 Jun 3 17:13 RELEASE-NOTES
-rw-r--r-- 1 root root 16262 Jun 3 17:13 RUNNING.txt
drwxr-xr-x 2 root root 4096 Jun 10 08:17 bin
drwxr-xr-x 2 root root 4096 Jun 3 17:13 conf
drwxr-xr-x 2 root root 4096 Jun 10 08:17 lib
drwxrwxrwx 2 root root 4096 Jun 3 17:10 logs
drwxr-xr-x 2 root root 4096 Jun 10 08:17 native-jni-lib
drwxrwxrwx 2 root root 4096 Jun 10 08:17 temp
drwxr-xr-x 2 root root 4096 Jun 10 08:17 webapps
drwxr-xr-x 7 root root 4096 Jun 3 17:11 webapps.dist
drwxrwxrwx 2 root root 4096 Jun 3 17:10 work
[root@tzh tzh]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@tzh tzh]#tomcat 默认的dockfile里面最后的是CMD["catalina.sh","run"],可是当我们执行了docker run -it -p 8888:8080 tomcat ls -l 以后,由于CMD只保留最后一个CMD,所以最后就变成了ls -l /usr/local/tomcat,所以就如上代码所示,看到的是/usr/local/tomcat的内容。而且通过docker ps发现tomcat并没运行起来。
ENTROYPOINT:
docker run之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的命令组合。就是更加强大!
给他用上ENTRPOINT演示:
1、制作一个ENTRPOINT版可以查询IP信息的容器
[root@tzh tzh]# cat test2
FROM centos
RUN yum install -y curl
CMD [ "curl", "-s", "http://ip.cn" ]2、构建并启动它
docker build -f test2 -t myip .
docker run -it myip #运行起来就可以看到自己的ip、地址
docker run -it myip -i #发现报错
[root@tzh tzh]# docker run -it myip -i
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-i\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled解决办法:
cp test2 test3 #拷贝一份dockerfile
[root@tzh tzh]# cat test3
FROM centos
RUN yum install -y curl
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]把CMD 换成 ENTROYPOINT
再次构建启动一个新的容器
docker build -f test3 -t myip2 .
docker run -it myip2 -i
CMD/ENTROYPOINT区别的更多相关文章
- [转]【docker】CMD ENTRYPOINT 区别
本文转自:https://blog.csdn.net/u010900754/article/details/78526443 昨天用Dockerfile来启动mongodb的集群,启动参数--repl ...
- AMD 和 CMD 的区别有哪些
在说AMD 和 CMD 的区别之前,先说明commonjs,它的回调和amd.cmd的不同于:commomjs加载完了所有模块,才执行回调amd和cmd是加载对应的模块,就可以执行回调中对应的代码 1 ...
- [转帖]Dockerfile: ENTRYPOINT和CMD的区别
Dockerfile: ENTRYPOINT和CMD的区别 https://zhuanlan.zhihu.com/p/30555962 在我们查阅Dockerfile的官方文档时, 有可能发现一些命令 ...
- [转帖]Dockerfile 中 ENTRYPOINT 与 CMD 的区别
Dockerfile 中 ENTRYPOINT 与 CMD 的区别 https://it.baiked.com/system/docker/1975.html 简单区别 Dockerfile 有两个启 ...
- AMD 和 CMD 的区别有哪些?
看到玉伯在介绍seajs和requirejs时,说“RequireJS 遵循的是 AMD(异步模块定义)规范,SeaJS 遵循的是 CMD (通用模块定义)规范”. 能否详细(举例)说明下这个2个规范 ...
- 【整理】 JavaScript模块化规范AMD 和 CMD 的区别有哪些?
根据玉伯等人在知乎上的回答整理.整理中... AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD CMD 规范在这里:https://githu ...
- commonjs amd cmd的区别
一篇博客告诉你三者的区别:http://zccst.iteye.com/blog/2215317 告诉你三者同requirejs seajs的区别:http://blog.chinaunix.net/ ...
- Perl system(cmd) 和 `cmd` 的区别探讨
在perl中系统调用有两种方式,一种是system(cmd),另一种是`system`以前一直没注意,这两种方式的区别,还以为是一样的,今天写脚本的时候,忽然想要获取命令的返回值,然后,用了my $r ...
- AMD 和 CMD 的区别
AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD CMD 规范在这里:https://github.com/seajs/seajs/issue ...
随机推荐
- Jemter响应数据乱码
问题分析: 请求响应数据出现中文时,通过查看jemter的察看结果树中的响应数据信息,出现乱码.经过查看jemter的配置文件jmeter.properties发现其默认字符集编码为ISO-8859- ...
- Java使用POI的SXSSFWorkbook与HSSFWorkbook导出复杂表头
一.HSSFWorkbook与SXSSFWorkbook的区别: HSSFWorkbook是对Excel2003以前的版本进行操作的,即后缀名为.xls SXSSFWorkbook时对Excel200 ...
- Ocelot+Consul实现微服务架构
API网关 API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口.这样就可以明显的简化客户端实现和微服务应用程序之间的沟通方式.以前的话,客户端不得不去请求微服务A ...
- 【BZOJ3453】XLkxc
http://192.168.102.138/JudgeOnline/problem.php?id=3170 知识点:1.拉格朗日插值(多特殊函数相加) 2.这个式子看似非常复杂,然而只要明白这个式子 ...
- 20190923-04Linux用户管理命令 000 012
useradd 添加新用户 1.基本语法 useradd 用户名 (功能描述:添加新用户) useradd -g 组名 用户名 (功能描述:添加新用户到某个组) 2.案例实操 (1)添加一个用户 [ ...
- python中gui编程的模块之一:tkinter(python3.x中是tkinter,小写的t)
一.tkinter是python的标准gui库,tkinter是内置在python的安装包之中的,所以安装好python之后就可以import导入tkinter模块了 二.创建一个GUI程序 1.导入 ...
- linux 多进程
Linux下的多进程编程初步 Linux下的多进程编程初步 多进程编程 1 Linux下进程的结构 2 Linux下的进程控制 21 僵尸进程 22 fork 23 exec 函数族 3 Linux下 ...
- [剑指Offer]65-不用加减乘除做加法
题目 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题解 用位运算模拟加法的三步: 无进位加法:异或运算. 进位:与运算再左移一位. 直到进位为0结束. 代码 pub ...
- 关于java基础语法的学习笔记
*java语言特点 1,简单易用 2,跨平台 拥有JVM虚拟机(运行程序) 3,面向对象 4,支持多线程*java核心机制 1,java虚拟机 JVM 2,垃圾回收机制*JDK和JRE JDK JRE ...
- 详解volatile关键字和原子引用
本篇看一下Volatile关键字和原子引用. 上图就是JUC包结构,总共分成三块 (1)java.util.concurrent:并发包基础类,包括阻塞队列,线程池相关类,线程安全Map等. (2)j ...