当前位置: 首页 > news >正文

8.dockerfile之CMD指令

一、CMD指令说明

CMD的作用是作为执行container时候的默认行为(容器默认的启动命令)

当运行container的时候声明了command,则不再用image中的CMD默认所定义的命令

一个Dockerfile中只能有一个有效的CMD,当定义多个CMD的时候,只有最后一个才会起作用

 
CMD定义的三种方式:
  • CMD <cmd> 这个会当作/bin/sh -c "cmd"来执行
  • CMD ["executable","arg1",....]
  • CMD ["arg1","arg2"],这个时候CMD作为ENTRYPOINT的参数

 

二、CMD指令案例


通过docker run 创建并启动一个容器时,命令的最后可以指定容器启动后在容器内立即要执行的指令,如:docker run -i -t image /bin/bash,表示容器启动时立即在容器内打开一个shell伪终端。

除了这种方式我们完全可以在dockerfile文件中通过CMD指令指定容器启动时要执行的命令。

首先,编写一个简单的dockfile,以centos为基础镜像:

#Base image
FROM centos

#MAINTAINER,this dockerfile creater
MAINTAINER loose@docker.com

#使用CMD指令
CMD ["/bin/bash"]

其次,我们根据该dockerfile构建一个镜像:

接着,我们查看构建的镜像:

最后,来体验下CMD的作用:

1.上面dockerfile文件中最后一行CMD指令的参数是指定容器启动时要执行的命令,这里设置为bin/bash命令,当我们使用docker run -i -t 镜像 /bin/bash命令交互,是在新容器内指定一个伪终端或终端,最后会帮我们将这个新容器生成出来;这时由于我们在CMD指定了/bin/bash,所以当我们本该执行docker run -i -t 镜像 /bin/bash命令来进行交互时,可以省略 /bin/bash,即我们只需要键入docker run -i -t 镜像即可:

再来查看帮我们生成的容器是否跟上方箭头指向的容器ID一致:

通过对比,是一致的!

2.就算dockerfile中有CMD指令,我们仍然可以在docker run命令中带上容器启动时执行的命令,这会覆盖dockerfile中的CMD指令指定的命令。

例如:docker run -i -t images /bin/ps(这里我们指定查看进程命令,就是为了无法打开交互式shell界面,以此来测试dockerfile内的CMD命令是否被覆盖)

3.在dockerfile中,可以有多条CMD命令,但多条CMD命令并不会都有效,以最后一条CMD命令为主

4.CMD命令的参数格式,一般建议编写为字符串数组的方式,如:

CMD ["echo","dockerfile.cmd"]

 

转载于:https://www.cnblogs.com/Json1208/p/8974157.html

相关文章:

  • Mysql Programming CS 155P笔记(七) Dynamic SQL
  • JMS学习六(ActiveMQ消息传送模型)
  • linux常用命令:find 命令参数详解
  • MySQL Route负载均衡与读写分离Docker环境使用
  • linux 下 mysql-5.5.8 安装
  • 网络流24题~飞行员配对方案问题
  • vs code 插件收集
  • 编程语言的介绍
  • java并发编程——通过ReentrantLock,Condition实现银行存取款
  • Qt QListWidget实现图片缩略图列表
  • 数字证书了解
  • [Java算法分析与设计]--线性结构与顺序表(List)的实现应用
  • python requests的content和text方法的区别
  • JS - 把类似document.querySelectorAll(.xxx)、document.getElementsByName(xxx)这种方法的返回结果转换成数组对象...
  • iOS App上架流程(2016详细版)来源DeveloperLY
  • extjs4学习之配置
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js数组之filter
  • Just for fun——迅速写完快速排序
  • MobX
  • ng6--错误信息小结(持续更新)
  • vue 配置sass、scss全局变量
  • 测试开发系类之接口自动化测试
  • 关于for循环的简单归纳
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 首页查询功能的一次实现过程
  • 译自由幺半群
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 正则表达式小结
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​flutter 代码混淆
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)斐波那契Fabonacci函数
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)fock函数详解
  • ../depcomp: line 571: exec: g++: not found
  • ./configure,make,make install的作用(转)
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .naturalWidth 和naturalHeight属性,
  • .NET BackgroundWorker
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • @ResponseBody
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析