Docker/LXC 容器是正在运行的应用程序还是内存中的东西?

Posted

技术标签:

【中文标题】Docker/LXC 容器是正在运行的应用程序还是内存中的东西?【英文标题】:Is a Docker/LXC container a running app or something in-memory? 【发布时间】:2015-03-20 17:48:59 【问题描述】:

我刚刚阅读了询问 "What is the difference between Docker and a VM?" 的优秀 SO 问题。然而,接受的答案让我只想要一点点。

有点了解一个容器(Docker/LXC - 我不明白其中的区别)使用名为 libcontainer 和 AuFS 的东西,以便数十、数百甚至数千个容器可以共享相同的 CPU、RAM 和磁盘资源。但是,答案仍然没有确切地解释什么是“容器”!

容器只是这个libcontainer 运行的一个实例吗?它是使用libcontainer 的应用程序吗?它是像服务/守护进程这样的 Linuxy 吗?所以我问:

究竟是什么“容器”? 多个容器可以在同一虚拟机/物理机内共享的确切计算/系统资源是什么? Docker/LXC 是容器方程式中的“管理程序”吗?如果不是,Docker、LXC和libcontainer之间是什么关系?

【问题讨论】:

【参考方案1】:

答案仍然没有准确解释什么是“容器”!

容器基本上是一个独立的进程,具有其工作所需的所有环境(网络服务器、数据库、CMS、任何软件......)。

容器使用 Linux 内核命名空间来隔离进程、网络和文件系统。 容器使用进程隔离的概念:文件系统、进程、网络、资源(CPU、内存)、日志记录(STDIN...)、shell 隔离。

Docker/LXC - 我看不出区别

LXC 是一套控制容器的工具; Docker 是另一组工具(全部捆绑到同一个程序中),它还添加了一种文件格式,因此“图像”的内容可以在机器之间传递。 Docker 比 LXC 更受关注。 Docker 曾经使用 lxc 库来控制容器,但将其替换为自己的库,名为...libcontainer。

多个容器可以在同一个虚拟机/物理机内共享的确切计算/系统资源是什么?

同一台机器上的容器将共享 CPU、内存和内核。此外,Docker 允许您选择让它们共享同一个网络。

Docker/LXC 是容器方程式中的“管理程序”吗?

Linux 内核是真正的“管理程序”,Docker/LXC 正在向它发送命令来创建和控制容器。

【讨论】:

也可以在这里查看我的其他答案***.com/questions/28024213/… 感谢@user2915097 (+1) - 确认您在这里所说的内容:Docker 容器是一个 Linux 进程/pid,使用这个 libcontainer 库利用 Linux 内核命名空间和进程隔离?是这样总结的吗?再次感谢! 是的,这张图总结的很好,虚拟机vs docker(在底部)docker.com/whatisdocker

以上是关于Docker/LXC 容器是正在运行的应用程序还是内存中的东西?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Ubuntu上创建及管理LXC容器

如何在Ubuntu上创建及管理LXC容器

如何在Docker中使用Nvidia GPU

畅谈Docker底层技术-LXC与Cgroup

Docker----LXC,chroot,namespace&cgroups

Docker----LXC,chroot,namespace&cgroups