博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8.dockerfile之CMD指令
阅读量:5011 次
发布时间:2019-06-12

本文共 1273 字,大约阅读时间需要 4 分钟。

一、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 imageFROM centos#MAINTAINER,this dockerfile createrMAINTAINER 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

你可能感兴趣的文章
JAVA Bean
查看>>
ehcache memcache redis 三大缓存男高音_转
查看>>
curd_3
查看>>
百度地图API示例之设置地图显示范围
查看>>
Java构造方法、重载及垃圾回收
查看>>
.Net Core AES加密解密
查看>>
Spring Quartz实现任务调度
查看>>
python | 桶排序、冒泡排序、选择排序、去重
查看>>
两个Html页面之间值得传递
查看>>
EasyUI datagrid 的多条件查询
查看>>
Mac升级bash到最新版本
查看>>
利用vagrant打包系统--制作自己的box
查看>>
美女与硬币问题
查看>>
计算几何算法概览 (转)
查看>>
Notepad++的ftp远程编辑功能
查看>>
数据库多对多关联表(Python&MySQL)
查看>>
[实变函数]1.2 集合的运算
查看>>
第06天
查看>>
设计模式的征途—5.原型(Prototype)模式
查看>>
iOS10 app连接不上网络的问题
查看>>