Docker / LXC容器是运行的应用程序还是内存中的东西?
我刚刚阅读了这个优秀的SO问题“ Docker和VM有什么不同? ” 。 但是,接受的答案让我只想稍微多一点。
我有点理解一个容器(Docker / LXC – 我没有区别)使用一个名为libcontainer
和AuFS的东西,以便数十,数百甚至数千个容器可以共享相同的CPU,RAM和磁盘资源。 但是,答案仍然不能解释一个“容器” 究竟是什么!
容器只是这个libcontainer
一个实例吗? 它是使用libcontainer
的应用程序吗? Linuxy就像服务/守护进程一样吗? 所以我问:
- 什么是“容器”?
- 多个容器可以在同一个虚拟机/物理内共享的确切的计算/系统资源是什么?
- Docker / LXC是容器方程中的“hypervisor”吗? 如果不是,Docker,LXC和
libcontainer
之间有什么关系?
答案仍然不能解释一个“容器”究竟是什么!
一个容器基本上是一个孤立的过程,它所需要的所有工作环境(一个web服务器,一个数据库,一个CMS,任何软件……)。
一个容器使用Linux内核命名空间来隔离进程,networking和文件系统。 容器使用进程隔离的概念:文件系统,进程,networking,资源(CPU,内存),日志logging(STDIN …),shell隔离。
Docker / LXC – 我没有区别
LXC是一套控制容器的工具; Docker是另一套工具(全部捆绑在同一个程序中),它还增加了一个文件格式,这样一个“图像”的内容就可以在机器间传递。 Docker比LXC更受关注。 Docker曾经使用lxc库来控制容器,但用自己的库libcontainerreplace它。
多个容器可以在同一个虚拟机/物理内共享的确切的计算/系统资源是什么?
同一台机器上的容器将共享CPU,内存和内核。 另外,Docker可以让你select让它们共享同一个networking。
Docker / LXC是容器方程中的“hypervisor”吗?
Linux内核是真正的“pipe理程序”,Docker / LXC发送命令来创build和控制容器。