我们知道,通过docker run 创建并启动一个容器时,命令的最后可以指定容器启动后在容器内立即要执行的指令,如:

docker run -i -t ubunu /bin/bash   //表示容器启动时立即在容器内打开一个shell终端

docker run ubuntu /bin/ps    //表示容器启动后立即运行 /bin/ps命令,显示容器的当前进程。

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

#test
FROM ubuntu
MAINTAINER xxx
RUN echo hello1 > test1.txt
RUN echo hello2 > /test2.txt
EXPOSE
EXPOSE
CMD ["/bin/bash"]

上面dockerfile文件中最后一行CMD指令的参数是指定容器启动时要执行的命令,这里是bin/bash命令。

1、用docker run命令创建并启动容器(myimage  是用前面dockerfile创建的镜像的名称):

docker run -i -t myimage

上面命令是创建并启动容器,打开一个交互式shell。 而以前的写法是

docker run -i -t myimage  /bin/bash

这样就省去了在docker run中写命令了。

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

docker run -i -t myimage /bin/ps

上面命令,因为/bin/ps覆盖了CMD指令,启动容器时会打印容器内的当前进程,但容器会立即停止,因为/bin/bash被覆盖了,无法打开交互式shell界面。

3、需要注意的是,dockerfile中可以有多条cmd命令,但只是最后一条有效。

4、CMD命令的参数格式,一般写成 字符串数组的方式,如上面的例子。如:

CMD  ["echo","hello world"]

虽然也可写成CMD echo hello word 方式,但这样docker会在指定的命令前加  /bin/sh -c 执行,有时有可能会出问题。 所以推荐采用数据结构的方式来存放命令。

docker学习笔记11:Dockerfile 指令 CMD介绍的更多相关文章

  1. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  2. Docker学习笔记之Dockerfile

    Dockerfile的编写格式为<命令><形式参数>,命令不区分大小写,但一般使用大写字母.Docker会依据Dockerfile文件中编写的命令顺序依次执行命令.Docker ...

  3. 汇编学习笔记(11)int指令和端口

    格式 int指令也是一种内中断指令,int指令的格式为int n,n是中断类型码.也就是说,使用int指令可以调用任意的中断例程,例如我们可以显示的调用0号中断例程,还记得在汇编学习笔记(10)中我们 ...

  4. Docker学习笔记_Dockerfile常用指令

    Dockerfile常用指令

  5. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

  6. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

  7. docker学习笔记(3)- 镜像

    简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...

  8. Docker学习笔记 — Docker私有仓库搭建

    Docker学习笔记 — Docker私有仓库搭建   目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2   和Mavan的管理一样,Dockers ...

  9. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

随机推荐

  1. Bootstrap 响应式瀑布流 (使用wookmark)

    使用瀑布布局 官方 http://www.wookmark.com/jquery-plugin GitHub https://github.com/GBKS/Wookmark-jQuery  (下载后 ...

  2. 基于Visual C++2013拆解世界五百强面试题--题9-找出所有的排列方式

    给出一个函数来输出一个字符串的所有排列 按照排列组合的知识我们知道 N个字符排列组合个数有n!种, 那么可知f(n) = n*f(n-1), 如果{1,2}的组合有两种,12,21, 那么{123}的 ...

  3. 外网訪问内网应用实现之无公网IP、多port、固定port、UDP等应用的实现方法

    有公网IP时,能够通过路由映射来实现外网訪问内网.然,当没有公网IP时,怎样实现外网訪问内网应用? 硬件路由方法因为无公网不可行,能够使用软件port映射的方法.如开放的NAT123全port映射. ...

  4. 【翻译自mos文章】oracle支持在RDBMS HOME 下的 符号链接( Symbolic Links)吗?

    oracle支持在RDBMS HOME 下的 符号链接( Symbolic Links)吗? 參考原文: Does Oracle support Symbolic Links in the RDBMS ...

  5. python下使用protobuf

    python解决ImportError: No module named google.protobuf 关于protocol buffer的优点,就过多涉及:如果涉及到数据传输和解析,使用pb会比自 ...

  6. String、StringBuffer、StringBuilder之间区别

    String,StringBuffer,StringBuilder 之间区别 在字符串处理中C#提供了String.StringBuffer.StringBuilder三个类.那么他们到底有什么优缺点 ...

  7. View中的onTouchEvent()与setOnTouchListener()中的ontouch()方法的事件处理先后顺序

    Touch事件的两种情况 1.覆写View.class中定义的onTouchEvent-->基于事件回调监听方式 @Override public boolean onTouchEvent(Mo ...

  8. Port 8081 already in use, packager is either not running or not running correctly

    运行 react_native 时发生这个错误,解决办法 关掉端口8081对应的进程 1.打开终端,输入命令:lsof -i:8081 2.此时提示: COMMAND   PID    USER   ...

  9. Yii2 composer win7安装新建项目流程

    一.首先下载 Composer-Setup.exe ,安装. 问题1:openSSL 问题,在php.ini  内去掉":"注释 问题2:browscap 问题 ,在php.ini ...

  10. WebHdfs

    https://github.com/ihrwein/webhdfs https://tiborbenke.blogs.balabit.com/2013/11/the-syslog-ng-in-the ...