Docker给LXC -tools(用户空间的LXC工具)添加了什么?

如果你看一下Docker的特性,你会发现LXC已经提供了大部分特性。

那么Docker添加了什么呢?为什么我要使用Docker而不是普通的LXC?

108957 次浏览

让我们来看看Docker的技术特性列表,并检查哪些是由LXC提供的,哪些不是。

特点:

1) 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统中。

提供普通LXC。

2) 资源隔离:系统资源,如cpu和内存,可以使用cgroups不同地分配给每个进程容器。

提供普通LXC。

3) 网络隔离:每个进程容器运行在自己的网络命名空间中,具有自己的虚拟接口和IP地址。

提供普通LXC。

4) 即写即拷:根文件系统是使用写时复制创建的,这使得部署非常快,内存和磁盘成本低。

这是由AUFS提供的,AUFS是Docker所依赖的联合文件系统。您可以使用LXC手动设置AUFS,但Docker将其作为标准使用。

5) 日志记录:收集并记录每个进程容器的标准流(stdout/stderr/stdin),以便实时或批量检索。

Docker提供了这一点。

6) 变更管理:对容器文件系统的更改可以提交到一个新的映像中,并重用用于创建更多的容器。不需要模板或手动配置。

“模板或手动配置”是对LXC的引用,在LXC中您需要了解这两件事。Docker允许你像对待虚拟机一样对待容器,而不需要学习LXC配置。

7) 交互式shell: docker可以分配一个伪tty并附加到任何容器的标准输入,例如运行一个丢弃的交互式shell。

LXC已经提供了这一点。


我只是刚刚开始学习LXC和Docker,所以我欢迎任何更正或更好的答案。

码头工人常见问题解答:

Docker不是lxc的替代品。“lxc”指的是Linux内核的功能(特别是名称空间和控件组),这些功能允许相互沙箱进程,并控制它们的资源分配。

在内核特性的底层基础之上,Docker提供了一个具有以下几个强大功能的高级工具:

  • 跨机器的可移植部署。Docker定义了一种格式,用于将应用程序及其所有依赖项捆绑成一个对象,该对象可以传输到任何支持Docker的机器上,并在那里执行,以保证对应用程序公开的执行环境是相同的。Lxc实现了流程沙箱,这是可移植部署的重要先决条件,但仅凭这一点还不足以实现可移植部署。如果您向我发送了一份安装在自定义lxc配置中的应用程序副本,它几乎肯定不会像在您的机器上那样在我的机器上运行,因为它与您机器的特定配置绑定在一起:网络、存储、日志记录、发行版等。Docker为这些特定于机器的设置定义了一个抽象,因此,完全相同的Docker容器可以运行在许多不同的机器上,具有许多不同的配置。

  • < em >以应用程序为中心的。Docker针对应用程序的部署进行了优化,而不是针对机器。这反映在它的API、用户界面、设计理念和文档中。相比之下,lxc helper脚本将容器视为轻量级机器——基本上是启动速度更快、内存需求更少的服务器。我们认为容器的意义远不止这些。

  • < em >自动构建< / em >。Docker提供了一个工具,开发者可以从源代码中自动组装容器,完全控制应用依赖关系、构建工具、打包等。他们可以自由使用make, maven, chef, puppet, salt, debian包,rpm,源tarball,或以上任何组合,,而不管机器的配置

  • < em >版本控制。Docker包含类似git的功能,用于跟踪容器的连续版本,检查版本之间的差异,提交新版本,回滚等。历史还包括如何容器是由谁组装的,因此您可以从生产服务器一直追溯到上游开发人员。Docker还实现了增量上传和下载,类似于“git pull”,所以一个容器的新版本可以通过发送diff来传输。

  • < em >组件重用。任何容器都可以作为“基本映像”来创建更专门的组件。这可以手动完成,也可以作为自动构建的一部分。例如,您可以准备一个理想的python环境,并将其用作10个不同应用程序的基础。您理想的postgresql设置可以在您未来的所有项目中重用。等等。

  • < em >共享。 Docker可以访问公共注册表(https://registry.hub.docker.com/),在那里成千上万的人上传了有用的容器:从redis, couchdb, postgres到irc bouncers到rails应用服务器到hadoop到各种发行版的基本映像。注册表还包括由docker团队维护的有用容器的官方“标准库”。注册表本身是开源的,因此任何人都可以部署自己的注册表来存储和传输私有容器,例如用于内部服务器部署。

  • < em >工具生态系统。 Docker定义了一个API来自动化和自定义容器的创建和部署。有大量的工具与docker集成以扩展其功能。类似paas的部署(Dokku, Deis, Flynn),多节点编配(maestro, salt, mesos, openstack nova),管理仪表板(docker-ui, openstack horizon, shipyard),配置管理(chef, puppet),持续集成(jenkins, strider, travis)等。Docker正在迅速确立自己作为基于容器的工具的标准。

我希望这能有所帮助!

docker使用分层构建的图像。这在可移植性、共享、版本控制和其他特性方面增加了很多。这些图像非常容易移植或传输,由于它们是分层的,因此后续版本的更改将以层的形式添加到先前的层之上。所以,虽然移植了很多次,但你不需要移植基础层。docker有运行这些映像的容器,其中包含执行环境,他们将更改添加为新的层,提供简单的版本控制。

除此之外,Docker Hub是一个很好的注册表,有成千上万的公共映像,在那里你可以找到安装了操作系统和其他软件的映像。因此,您可以为您的应用程序获得一个很好的开端。

以上职位&随着LXD继续增强LXC的发展,答案正在迅速过时。是的,我知道道克也没有止步不前。

LXD现在为LXC容器映像实现了一个存储库,用户可以从该存储库中推送或提取映像,从而对其进行贡献或重用。

LXD的REST api LXC现在启用本地&远程创建/部署/管理LXC容器使用非常简单的命令语法。

LXD的主要特点是:

  • 设计安全(非特权容器,资源限制和 李更)< / >
  • 可扩展(从笔记本电脑上的容器到数千台计算机 李节点)< / >
  • 直观(简单、清晰的API和简洁的命令行体验)
  • 基于图像(没有更多的分发模板,只有好,可信 图像)热迁移

NCLXD插件现在为OpenStack允许OpenStack来利用LXD在OpenStack中部署/管理LXC容器作为虚拟机,而不是使用KVM, vmware等。

但是,NCLXD也支持混合传统HW vm和LXC vm的混合云。

OpenStack nclxd插件支持的特性列表包括:

stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support

到2016年4月Ubuntu 16.04发布的时候,将会有其他很酷的功能,如块设备支持,实时迁移支持

为了保持简洁,这个问题已经被问并回答了以上

然而,我想退一步,稍微不同地回答这个问题,docker引擎本身将编排作为其额外功能之一,这是破坏性的部分。一旦你开始运行一个应用程序作为容器的组合,运行在多个容器引擎的“某处”,它会变得非常令人兴奋。健壮性,水平缩放,从底层硬件中完全抽象,我可以列举很多……

这不仅仅是Docker给你的,事实上容器编排标准是Kubernetes,它有很多风格,一个Docker,还有OpenShift, SuSe, Azure, AWS…

然后在K8S下面还有替代的集装箱发动机;有趣的是Docker和CRIO——最近建立的,没有守护进程,是专门为Kubernetes设计的容器引擎,但还不成熟。我认为这两者之间的竞争将是容器引擎真正的长期选择。