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和控制容器。