lxc
Lei Chu Lv4

运行虚拟机时,容器几乎接近裸机。托管虚拟实例时,它们几乎没有开销。
LXC于2008年首次引入,从其之前的Solaris Containers(或Solaris Zones)和FreeBSD jail中采用了其大部分功能。
LXC无需创建完整的虚拟机,而是可以通过自己的进程和网络空间来实现虚拟环境。
通过使用命名空间来强制执行进程隔离,并利用内核本身的控制组(cgroup)功能,该功能可以限制,说明和隔离一个或多个进程的CPU,内存,磁盘I / O和网络使用情况。
将此用户空间框架视为的一种非常高级的形式 chroot。

注意:LXC使用名称空间来实现进程隔离,同时使用内核自己的cgroup来解决并限制一个或多个进程中的CPU,内存,磁盘I / O和网络使用情况。

但是容器到底是什么?

简短的答案是,容器使软件应用程序与操作系统脱钩,从而为用户提供了一个干净而最小的Linux环境,同时在一个或多个隔离的“容器”中运行其他所有内容。容器的目的是启动一组有限的应用程序或服务(通常称为微服务),并使它们在独立的沙盒环境中运行。

这种隔离可防止在给定容器中运行的进程监视或影响在另一个容器中运行的进程。同样,这些容器化服务不会影响或干扰主机。能够将分散在多个物理服务器上的许多服务整合为一个的想法是数据中心选择采用该技术的众多原因之一。

容器功能包括:

  • 安全性:网络服务可以在容器中运行,从而限制了由于安全漏洞或违反而造成的损害。入侵者成功利用该容器中运行的一个应用程序上的安全漏洞,仅限于该容器中可能采取的一系列操作。
  • 隔离:容器允许在同一台物理计算机上部署一个或多个应用程序,即使这些应用程序必须在不同的域下运行,每个域都需要对其各自资源的独占访问权。例如,在不同容器中运行的多个应用程序可以通过使用与每个容器关联的不同IP地址绑定到同一物理网络接口。
  • 虚拟化和透明性:容器为系统提供了虚拟化的环境,可以隐藏或限制其下的物理设备或系统配置的可见性。容器背后的一般原则是,除了解决安全性或隔离性问题之外,避免更改运行应用程序的环境。

Docker主要致力于:

  • 可移植性:Docker提供了基于映像的部署模型。这种类型的可移植性提供了一种跨多个环境共享应用程序或服务集(及其所有依赖项)的简便方法。
  • 版本控制:单个Docker映像由一系列组合的层组成。每当更改图像时,都会创建一个新层。例如,每次用户指定命令(例如run或)时 ,都会创建一个新层 copy。Docker将这些层重用于新的容器构建。与Docker分层是它自己的版本控制方法。
  • 回滚:同样,每个Docker映像都有层。如果您不想使用当前运行的图层,则可以回滚到以前的版本。这种敏捷性使软件开发人员可以更轻松地连续集成和部署他们的软件技术。
  • 快速部署:置备新硬件通常可能需要几天的时间。而且,安装和配置它的工作量和开销非常重。使用Docker,您可以通过将启动和运行映像所需的时间减少到几秒钟来避免所有这些情况。用完容器后,就可以轻松销毁它。

*** 从根本上说,Docker和LXC都非常相似。它们都是用户空间和轻量级虚拟化平台,它们实现cgroup和名称空间来管理资源隔离。但是,两者之间存在许多明显的差异。