设为首页 收藏本站
查看: 2202|回复: 0

[经验分享] centos7下安装docker(8.1运行容器)

[复制链接]

尚未签到

发表于 2017-11-23 07:17:16 | 显示全部楼层 |阅读模式
  从今天开始学习docker container
  1.docker run
  之前我们在学习制作镜像以及制作私有仓库的时候已经用到docker run -it以及docker run -d来临时运行一个容器和在后台运行一个容器了,
  我们可以通过docker ps 和docker ps -a 来查看运行中的容器,和所有容器(包括状态为up和exited)
   DSC0000.png
  或者可以使用docker container ls以及docker container ls -a来查看docker container ,效果和docker ps 或docker ps -a一致
   DSC0001.png
  无论是docker ps -a还是docker container ls -a,我们都是通过-a这个参数来查看所有container 的,一般这种exited状态的容器并不是我们想要的结果,我们希望容器能一直时running的状态,这样才能被使用。
  如何使容器长期保持运行状态呢?
  1.首先我们运行一个容器:docker run -it <image>   -i:获得一个交互式连接,获取container的输入  -t:进入一个终端;这两个参数通常连用
   DSC0002.png
  打开另一个终端:docker ps
DSC0003.png

  可以通过container ID 来判断我们在另一个终端打开的同一个容器的状态时运行中的(也可以通过ctrl+p,ctrl+q退出而不终止容器运行,可以使容器在后台保持运行)
  2.可以通过执行一个长期运行的命令来保持容器的运行状态,例如执行一下命令:
DSC0004.png

  while语句让bash不会退出,我们打开另外一个终端,可以看到容器为运行的状态
DSC0005.png

  3.通过 :docker run -d <image>在后台运行一个容器
DSC0006.png

  docker ps查看运行中的容器,可以看到容器为运行状态
DSC0007.png

  在做docker run -d在后台运行的状态时,我发现了一个问题:当我使用base 镜像在后台运行容器的时候
DSC0008.png

  通过docker ps发现这个容器并没有在后台运行,
   DSC0009.png
  实际是Exited状态的
DSC00010.png

  为什么会出现docker run -d闪退的情况呢?
   DSC00011.png
  我们可以观察到运行中的容器中COMMAND都没有结束,而Exited状态的容器COMMAND都已经执行完结束了,所以说如果想要通过docker run -d的方法使容器在后台一直保持运行的状态:容器里就必须有一个前台的进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的,这个是docker的机制问题,如果容器里面没有前台运行的进程,这样的容器,后台启动后,会立即自杀,因为他觉得他没事可做了.【这句话借鉴:http://blog.csdn.net/meegomeego/article/details/50707532】
  总结:一开始的想法只是想让docker run -it的容器始终保持运行,因为我每次退出一个新建的容器之后他都会变为Exited的状态,如果让他保持运行的话,就要再打开一个终端;
  后来发现第二种方法,执行一个始终运行的命令,可以保持容器运行,但依然要占用另一个终端
  原本以为docker run -d的方法可以使任何容器都可以在后台保持运行的状态,但是在试验的过程中,又发现一些容器也不能在后台保持运行的状态,通过查资料等了解到:docker run -d在后台运行容器,并使其保持运行状态的话就必须有一个前台运行的进程。
  难道运行一个容器就必须运行个前台的进程吗,后来我又发现:通过docker run -it的方法运行一个容器,退出的时候不要使用ctrl+c,而是使用ctrl+p&ctrl+q可以保存退出,这个方法对docker run -d和命令法运行容器都不适用。
  docker ps -a这个命令我们都知道是列出所有状态的容器
DSC00012.png

  CONTAINER ID:容器的"短ID",我们使用docker run -d运行容器时会出现一行容器的“长ID”,短ID是长ID的前12个字符
   DSC00013.png
  可以通过容器的ID来启动或者停止容器;启动:docker start CONTAINER ID 停止:docker stop CONTAINER ID
DSC00014.png

DSC00015.png

  IMAGE:容器使用的镜像
  COMMAND:创建容器的时候使用的命令
  CREATED:创建时间
  STATUS:运行状态
  PORTS:端口
  NAME:容器名字,当我们没有指定容器名字的时候,会随机分配一个名字,我们可以通过--name来指定容器的名字,可以使用docker rename来更改容器的名字
DSC00016.png

  容器按用途分类,可以分为:服务类容器和工具类容器
  1.服务类的容器以进程daemon的形式运行,对外提供服务。比如web server,数据库等。适合通过docker run -d的方式在后台运行,如果要排查问题,可以通过docker exec -it的方式进入容器;
  2.工具类的容器可以给我们提供一个临时的环境,可以通过docker run -it的方式运行,这种方式可以在容器创建完之后就进入容器,当然也可以使用docker exec -it的方式进入。工具类的容器通常使用base 镜像去创建:centos ,debian等。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-409726-1-1.html 上篇帖子: SaltStack学习(二) 通过 salt 远程执行管理 minion 下篇帖子: PYQT 指南(一) 介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表