Docker添加到lxc-tools(用户空间LXC工具)是什么?
如果你看看Docker的function,其中大部分已经由LXC提供。
那么Docker添加了什么? 为什么我会用普通的LXC来使用Docker?
从Docker FAQ :
Docker不是lxc的替代品。 “lxc”是指Linux内核(特别是命名空间和控制组)的function,它允许相互之间的沙盒过程,并控制其资源分配。
除了内核特性的底层基础之外,Docker还提供了一个具有以下强大function的高级工具:
-
跨机器的便携式部署。 Docker定义了一种将应用程序及其所有依赖绑定到一个单独对象中的格式,该对象可以被传输到任何启用docker的机器上,并在那里执行,保证暴露给应用程序的执行环境是相同的。 Lxc实现了stream程沙盒,这是便携式部署的重要先决条件,但单靠这一点对于便携式部署来说是不够的。 如果您向我发送了一个安装在自定义lxcconfiguration中的应用程序的副本,那么它几乎肯定不会像我们的机器那样在您的机器上运行,因为它与您计算机的特定configuration有关:networking,存储,日志logging,发行版,等等。Docker为这些特定于机器的设置定义了一个抽象,以便完全相同的docker容器可以在许多不同的机器上运行 – 不变 – 具有许多不同的configuration。
-
以应用为中心。 Docker针对应用程序的部署进行了优化,而不是机器。 这反映在其API,用户界面,devise理念和文档。 相比之下,lxc助手脚本将容器作为轻量级的机器 – 基本上是启动速度更快,内存更less的服务器。 我们认为容器不止于此。
-
自动构build 。 Docker包含一个工具,供开发人员自动从源代码中组装一个容器,完全控制应用程序的依赖关系,构build工具,打包等。他们可以自由使用make,maven,chef,puppet,salt,debian包,rpms,source tarballs,或上述的任何组合, 而不pipe机器的configuration如何 。
-
版本。 Docker包括用于跟踪容器的连续版本,检查版本之间的差异,提交新版本,回滚等类似git的function。历史logging还包括如何组装一个容器以及由谁来完成,因此您可以从生产服务器一路回到上游开发商。 Docker也实现增量上传和下载,类似于“git pull”,所以新版本的容器只能通过发送差异来传输。
-
组件重用。 任何容器都可以用作“基础图像”来创build更专业的组件。 这可以手动完成或作为自动构build的一部分。 例如,您可以准备理想的python环境,并将其用作10个不同应用程序的基础。 您理想的postgresql设置可以重新用于您所有的未来项目。 等等。
-
共享。 Docker可以访问一个公共registry( https://registry.hub.docker.com/ ),成千上万的人已经上传了有用的容器:从redis,couchdb,postgres到irc保险箱到rails应用服务器的任何东西,各种发行。 登记处还包括由docker工作组维护的有用容器的官方“标准库”。 registry本身是开源的,所以任何人都可以部署他们自己的registry来存储和传输私有容器,例如用于内部服务器部署。
-
工具生态系统 Docker定义了一个用于自动化和自定义容器的创build和部署的API。 有大量的工具与docker集成以扩展其function。 (Dokku,Deis,Flynn),多节点编排(maestro,salt,mesos,openstack nova),pipe理仪表板(docker-ui,OpenStack Horizon,造船厂),configurationpipe理(厨师,puppet),持续集成(jenkins,strider,travis)等。Docker正在迅速将自己定位为基于容器的工具的标准。
我希望这有帮助!
我们来看看Docker的技术特性列表 ,并检查哪些是由LXC提供的,哪些不是。
特征:
1) 文件系统隔离 :每个进程容器运行在一个完全独立的根文件系统中。
提供简单的LXC。
2) 资源隔离 :cpu和内存等系统资源可以通过cgroups分配到每个进程容器。
提供简单的LXC。
3) networking隔离 :每个进程容器运行在自己的networking名称空间中,具有自己的虚拟接口和IP地址。
提供简单的LXC。
4) 写时复制 :根文件系统是使用写时复制创build的,这使得部署速度非常快,内存便宜,磁盘便宜。
这由Docker依赖的union文件系统AUFS提供。 您可以使用LXC手动设置AUFS,但是Docker将它用作标准。
5) 日志logging :每个进程容器的标准stream(stdout / stderr / stdin)被收集并logging下来以进行实时或批量检索。
Docker提供了这个。
6) 更改pipe理 :对容器文件系统的更改可以被提交到一个新的映像中,并重新用于创build更多的容器。 不需要模板或手动configuration。
“模板或手动configuration”是对LXC的参考,您需要了解这两方面的知识。 Docker允许你以对待虚拟机的方式对待容器,而不需要了解LXC的configuration。
7) 交互式shell :docker可以分配一个伪tty并附加到任何容器的标准input,例如运行一次性交互式shell。
LXC已经提供了这个。
我只是刚开始学习LXC和Docker,所以我欢迎任何更正或更好的答案。
随着LXD的发展继续增强LXC ,以上的post和答案正在迅速成为过时。 是的,我知道Docker也没有停下来。
LXD现在实现了一个LXC容器映像的存储库,用户可以通过该存储库进行推送或重用。
LXD的LXC REST api 现在可以使用一个非常简单的命令语法实现本地和远程创build/部署/pipe理LXC容器。
LXD的主要特点是:
- 通过devise保护(无特权容器,资源限制等等)
- 可扩展(从笔记本电脑上的容器到数千个计算节点)
- 直观(简单,清晰的API和清晰的命令行体验)
- 基于图像(没有更多的分发模板,只有好的,可信的图像)实时迁移
OpenStack现在有NCLXD插件,允许OpenStack利用LXD在OpenStack中将LXC容器部署/pipe理为虚拟机,而不是使用KVM,vmware等。
但是,NCLXD还能够实现混合使用传统硬件虚拟机和LXC虚拟机的混合云。
OpenStack nclxd插件支持的function列表包括:
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时,将会有额外的酷function,如块设备支持,实时迁移支持 。
Docker使用图层构build。 这在可移植性,共享,版本化和其他function方面增加了很多。 这些图像非常容易移植或传输,并且由于它们在图层中,所以后续版本中的变化将以层的forms添加到先前的图层上。 所以,在移植很多次的时候,你不需要移植基础层。 Docker有容器,它们运行这些图像时包含执行环境,它们添加更改作为新的图层提供简单的版本控制。
除此之外,Docker Hub是一个很好的数以千计的公共映像registry,您可以在其中find安装了操作系统和其他软件的映像。 所以,你可以为你的应用程序获得一个很好的开端。