LXC于2008年首次引入,从其之前的Solaris Containers(或Solaris Zones)和FreeBSD jail中采用了其大部分功能。
LXC无需创建完整的虚拟机,而是可以通过自己的进程和网络空间来实现虚拟环境。通过使用命名空间来强制执行进程隔离,并利用内核本身的控制组(cgroup)功能,该功能可以限制,说明和隔离一个或多个进程的CPU,内存,磁盘I / O和网络使用情况。将此用户空间框架视为的一种非常高级的形式 chroot。
值得注意的是,LXC使用Namespace(名称空间)来实现进程隔离,同时使用内核自己的cgroup来解决并限制一个或多个进程中的CPU,内存,磁盘I / O和网络使用情况。
容器到底是什么
简短的答案是,容器使软件应用程序与操作系统脱钩,从而为用户提供了一个干净而最小的Linux环境,同时在一个或多个隔离的“容器”中运行其他所有内容。容器的目的是启动一组有限的应用程序或服务(通常称为微服务),并使它们在独立的沙盒环境中运行。
这种隔离可防止在给定容器中运行的进程监视或影响在另一个容器中运行的进程。同样,这些容器化服务不会影响或干扰主机。能够将分散在多个物理服务器上的许多服务整合为一个的想法是数据中心选择采用该技术的众多原因之一。
容器功能
- 安全性:网络服务可以在容器中运行,从而限制了由于安全漏洞或违反而造成的损害。
- 隔离:容器允许在同一台物理计算机上部署一个或多个应用程序,即使这些应用程序必须在不同的域下运行,每个域都需要对其各自资源的独占访问权。例如,在不同容器中运行的多个应用程序可以通过使用与每个容器关联的不同IP地址绑定到同一物理网络接口。
- 虚拟化和透明性:容器为系统提供了虚拟化的环境,可以隐藏或限制其下的物理设备或系统配置的可见性。容器背后的一般原则是,除了解决安全性或隔离性问题之外,避免更改运行应用程序的环境。
Docker主要致力于
- 可移植性:Docker提供了基于镜像的部署模型。这种类型的可移植性提供了一种跨多个环境共享应用程序或服务集(及其所有依赖项)的简便方法。
- 版本控制:单个Docker映像由一系列组合的层组成。每当更改图像时,都会创建一个新层。例如,每次用户指定命令(例如run或)时 ,都会创建一个新层 copy。Docker将这些层重用于新的容器构建。与Docker分层是它自己的版本控制方法。
- 回滚:同样,每个Docker映像都有层。如果从根本上说,Docker和LXC都非常相似。它们都是用户空间和轻量级虚拟化平台,它们实现cgroup和名称空间来管理资源隔离。但是,两者之间存在许多明显的差异。不想使用当前运行的图层,则可以回滚到以前的版本。这种敏捷性使软件开发人员可以更轻松地连续集成和部署他们的软件技术。
- 快速部署:准备一个新的机器通常可能需要几天的时间。而且安装和配置它的工作量和开销非常重。使用Docker,可以通过将启动和运行镜像所需的时间减少到几秒钟来避免所有这些情况。用完容器后,就可以轻松销毁它。
从根本上说,Docker和LXC都非常相似。它们都是用户空间和轻量级虚拟化平台,它们实现cgroup和名称空间来管理资源隔离。但是,两者之间存在许多明显的差异。
Docker与LXC的差异
使用范围
LXC:Linux 环境。
Docker:Docker 可以在 Linux 上运行,也可以在Windows 上运行。并且支macos,因此 Docker 并不完全依赖于 Linux,而是本机使用它运行的操作系统。
人气
LXC:LXC 已经很老了,但由于一些限制,在开发人员和管理员中并没有得到多少普及。
Docker:Docker 使容器超越了操作系统级别,以自身合并应用程序的粒度。可以说 docker 是 LXC 的扩展,因此受到欢迎。
工具
LXC:LXC 工具与运行裸机服务器的传统系统管理员非常接近,即直接 SSH 访问,这允许使用团队可能在裸机或运行在其上的虚拟机上使用的自动化脚本Virtual Box 和任何其他虚拟化生产环境。这种可移植性功能使任何应用程序从传统 Linux 服务器迁移到在 LXC 容器上运行的过程非常无缝,但前提是尚未使用任何其他容器化解决方案,例如 dockers。
Docker:在 Docker 的情况下,工具以 Docker CLI(命令行界面)为中心,其中包含用于列出镜像、收集和处理 Docker 镜像的命令。Docker Hub 是一个公共镜像注册中心,可以为常用应用程序提供对可变数量镜像的访问。如果需要,您还可以下载所需的操作系统镜像,以便在 docker 容器上运行。例如,假设一个 Docker 容器中的 Linux 操作系统。这个特殊的功能通常与一些 LXC 容器相关联,这使我们能够在不需要 VM 的情况下运行操作系统。但是,Docker 容器在处理应用程序时重量更轻,以支持快速节奏,实现更高的可扩展性,并使用微服务架构部署所需的应用程序。
生态
LXC:不需要任何其他供应商来提供 LXC 的工具,因为我们已经在 Linux 上使用的生态系统也足以支持 LXC。
Docker:Docker 需要对庞大的生态系统提供更专业的支持。Docker 得到 AWS、IBM、Google 和 Microsoft Azure 等主要云提供商的支持。Docker 生态系统包括 Docker Swarm 来管理 Docker 容器集群;Docker Trusted Registry 用于管理 Docker 镜像的注册表;Docker Compose 在需要交换数据的多个容器上启动多个应用程序,最后,Docker Machine 创建启用 docker 的虚拟机。
使用便利
LXC:从 VM 迁移到 LXC 非常容易,因为 LXC 为系统映像运行标准的 init,这使您可以在 docker 容器上运行。例如,更不用说 Docker 容器中的 Linux 操作系统。这个特殊的功能通常与一些 LXC 容器相关联,这使我们能够在不需要 VM 的情况下运行操作系统。
Docker:Docker 容器在处理应用程序时重量更轻,以支持快速节奏,实现更高的可扩展性,并使用微服务架构部署所需的应用程序。
LXC 提供了 Linux 上 VE 的优势,主要是能够将私有工作负载相互隔离。与 VM 相比,它是一种更便宜、更快速的解决方案,但这样做需要一些额外的学习和专业知识。Docker 是对 LXC 能力的重大改进,它的明显优势是因为足够简单学习成本低并不依赖操作系统。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/161835.html