Docker将什么添加到lxc-tools(用户空间LXC工具)?

Fli*_*imm 389 lxc docker

如果你看一下Docker的功能,其中大部分已经由LXC提供.

那么Doc​​ker添加了什么?为什么我会使用Docker而不是简单的LXC?

Sol*_*kes 545

来自Docker FAQ:

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

除了内核功能的低级基础之外,Docker还提供了一个具有几个强大功能的高级工具:

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

  • 以应用为中心.Docker针对应用程序的部署进行了优化,而不是机器.这体现在其API,用户界面,设计理念和文档中.相比之下,lxc帮助程序脚本将容器作为轻量级计算机集中在一起 - 基本上是服务器启动速度更快,需要更少的内存.我们认为容器不仅仅是那个.

  • 自动构建.Docker包含一个工具,供开发人员从源代码​​中自动组装容器,完全控制应用程序依赖性,构建工具,打包等.他们可以免费使用make,maven,chef,puppet,salt,debian软件包,rpms,source 无论机器的配置如何,都可以使用tarball或上述任意组合.

  • 版本.泊坞窗包括用于跟踪容器的后续版本,检查版本之间的差异,提交新版本,回滚等历史还包括混帐般的能力如何容器组装以及由谁,让你获得从生产服务器的完全可追溯一直回到上游开发者.Docker还实现了增量上传和下载,类似于"git pull",因此只能通过发送差异来传输容器的新版本.

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

  • 共享.Docker可以访问公共注册表(https://registry.hub.docker.com/),其中有数千人上传了有用的容器:从redis,couchdb,postgres到irc保镖到rails app服务器到hadoop到base图像的任何东西各种发行版.该注册表还包括由docker团队维护的有用容器的官方"标准库".注册表本身是开源的,因此任何人都可以部署自己的注册表来存储和传输私有容器,例如,用于内部服务器部署.

  • 工具生态系统 Docker定义了一个API,用于自动化和自定义容器的创建和部署.有大量工具与docker集成以扩展其功能.类似PaaS的部署(Dokku,Deis,Flynn),多节点编排(maestro,salt,mesos,openstack nova),管理仪表板(docker-ui,openstack horizo​​n,造船厂),配置管理(厨师,木偶),持续集成(jenkins,strider,travis)等.Docker正在迅速建立自己作为基于容器的工具的标准.

我希望这有帮助!

  • 您可以使用"docker import"从任何tarball轻松创建新容器.例如:"debootstrap raring ./rootfs; tar -C ./rootfs -c.| docker import flimm/mybase". (18认同)
  • Linux容器是使用一组Linux工具约束和隔离进程的结果:chroot,cgroups和名称空间.LXC是一个操纵这些设施的用户空间工具.libcontainer是LXC的替代品,可以操作相同的设施.Docker默认使用libcontainer,但可以使用LXC.也就是说,Docker(很多)不仅仅是libcontainer/LXC上的兼容层; 它添加了其他答案列出的其他功能. (10认同)
  • 当你说"任何容器都可以用作基本图像"时,我认为你的意思是一个Docker容器,而不是一个独立于Docker创建的LXC容器.据我所知,无法从头开始创建Docker容器,它必须始终从另一个Docker容器继承(相关问题:http://stackoverflow.com/questions/18274088/how-can-i-make-我 - 拥有 - 基础映像换泊坞窗). (3认同)
  • 现在这仍然是真的,Docker有libcontainer(它不是替代品)吗? (3认同)
  • @GaretClaborn是的,因为libcontainer只是他们自己的库来访问命名空间和cgroups,所以所罗门所说的一切仍然适用. (3认同)
  • 当然,最明显的错误是LXC实际上是一组用户空间工具(请参阅https://linuxcontainers.org/),据我所知,Docker不是基于LXC构建的,而是更多的替代方案.它.答案的其余部分似乎是基于这种误解. (2认同)

Fli*_*imm 70

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

特征:

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

提供简单的LXC.

2)资源隔离:cpu和内存等系统资源可以使用cgroups以不同方式分配给每个进程容器.

提供简单的LXC.

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

提供简单的LXC.

4)写时复制:使用copy-on-write创建根文件系统,这使得部署速度极快,内存便宜且磁盘便宜.

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

5)记录:收集并记录每个过程容器的标准流(stdout/stderr/stdin)以进行实时或批量检索.

Docker提供了这个.

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

"模板或手动配置"是对LXC的引用,您需要了解这两个方面.Docker允许您以用于处理虚拟机的方式处理容器,而无需了解LXC配置.

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

LXC已经提供了此功能.


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

  • 恕我直言,这个答案忽略了这一点.Docker没有"提供"这些功能; 它只是使它们易于使用.如果我们想要挑剔,我们可以说LXC不提供隔离:*命名空间*提供它,而LXC只是一个商品用户空间工具,使它们比基本的`unshare`工具更容易使用(或直接`clone()`syscall).同样,Docker使这些东西更容易使用(并且在桌面上带来了更多功能,比如推/拉图像的功能).我的2c. (35认同)
  • @Flimm:我喜欢[Admin Magazine](http://www.admin-magazine.com/)第16期的比较,p.34:*Docker将LXC与其他一些支持技术捆绑在一起,并将其包装在一个易于使用的命令行界面中.使用容器有点像尝试使用像`update-index`和`read-tree`这样的命令来使用Git,而没有熟悉的工具,如`add`,`commit`和`merge`.Docker在LXC的"管道"上提供了"瓷器"层,使您能够使用更高级别的概念,而不用担心低级细节.* (30认同)
  • 在我看来,Docker的较慢性能与磁盘I/O有关,因此可能是由于采用了AUFS. (7认同)
  • @jpetazzo:LXC实际上很简单,Docker如何让它变得更容易(除了添加推送和拉动图像等其他功能)? (6认同)
  • 我在Docker容器和LXC容器中运行了UnixBench基准测试,运行相同的操作系统,而LXC在得分方面表现优异.作为基于LXC的码头工作者,我对我的结果感到非常困惑. (4认同)
  • LXC可以使用OverlayFS代替AUFS进行快照或类似.这与盒子里的Docker差不多. (2认同)

bmu*_*lan 15

随着LXD的发展继续增强LXC,上述帖子和答案正在迅速变得过时.是的,我知道Docker也没有停滞不前.

LXD现在为LXC容器映像实现了一个存储库,用户可以推送/拉出该存储库以贡献或重用.

LXD的LxC REST API 现在可以使用非常简单的命令语法实现LXC容器的本地和远程创建/部署/管理.

LXD的主要特点是:

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

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

但是,NCLXD还支持混合使用传统硬件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
Run Code Online (Sandbox Code Playgroud)

当Ubuntu 16.04于2016年4月发布时,还会有其他很酷的功能,例如块设备支持,实时迁移支持.