码迷,mamicode.com
首页 > 其他好文 > 详细

Docker一些概念和误区总结

时间:2018-12-13 11:32:50      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:业务   int   pac   持久   entry   running   shell   传递   没有   

1:每个业务最好只跑一个业务,且此业务是主进程:,这是容器技术的初衷和本意!!!


2:每个docker容器需要一个前台进程一直运行,因为docker容器并不是虚拟机,是利用linux的cgroup和namespace隔离的,在宿主机上本质是个隔离的进程,例如一个容器的主进程是启动nginx,service nginx start,这句shell充当了主进程,fork了一个子进程启动了nginx后这个shell就退出了,nginx是shell的子进程,主进程消亡子进程也就停止了,容器也就会一运行就exited了。


3:docker run是Run a command in a new container
而 docker exec是Run a command in a running container
因此以前理解的docker run -d --it centos /bin/bash 中的/bin/bash,其实是将bash作为了此容器的主进程,但是这样并没有什么卵用,因为容器是无状态的(数据不能持久化),当此容器挂掉的时候,文件就都丢失了,而这里的/bin/bash实际上就是dockerfile中的cmd,如果这里写了,那么就会覆盖dockerfile中的cmd,如果不写,那么就默认用dockerfile中的cmd
另外,以前认为docker exec -it 容器 /bin/bash,是进入容器的命令,实际上也是不准确的,这里的/bin/bash,实际上是让这个此容器运行/bin/bash,也就是进入了容器,但是实际上exec并不是单纯用来进入容器用的,它的真正作用是Run a command in a running container,因此也可以有这样的操作docker exec -it 容器 ls。


4:CMD和entrypoint
在dockerfile中
两者都可以设定命令作为主进程
两者都存在情况下,CMD是传递给entrypoint当作参数的。

Docker一些概念和误区总结

标签:业务   int   pac   持久   entry   running   shell   传递   没有   

原文地址:http://blog.51cto.com/11093860/2329757

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!