工具(用户空间LXC工具)?
如果您看看Docker的功能,其中大部分功能已由LXC提供。
那么Docker添加了什么? 为什么我会在普通的LXC上使用Docker?
从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 tarballs或上述的任何组合,而不管机器的配置如何。
版本。 Docker包括用于跟踪容器的连续版本,检查版本之间的差异,提交新版本,回滚等的类似git的功能。历史记录还包括容器如何组装以及由谁组装,以便从生产服务器获得完整的可追溯性一路回到上游开发商。 Docker也实现了增量上传和下载,类似于“git pull”,因此新版本的容器只能通过发送差异来传输。
组件重用。 任何容器都可以用作“基础图像”来创建更专业的组件。 这可以手动完成或作为自动构建的一部分。 例如,您可以准备理想的python环境,并将其用作10种不同应用程序的基础。 您理想的postgresql设置可以重新用于您所有未来的项目。 等等。
共享。 Docker可以访问一个公共注册表(https://registry.hub.docker.com/),其中有成千上万的人上传了有用的容器:从redis,couchdb,postgres到irc保险箱到rails应用服务器的任何内容,以便将hadoop映射到基础映像各种发行。 注册管理机构还包括由码头工作组维护的有用容器的官方“标准库”。 注册表本身是开源的,因此任何人都可以部署他们自己的注册表来存储和传输私有容器,例如用于内部服务器部署。
工具生态系统 Docker定义了一个用于自动化和自定义容器的创建和部署的API。 有大量的工具与docker集成以扩展其功能。 PaaS式部署(Dokku,Deis,Flynn),多节点编排(maestro,salt,mesos,openstack nova),管理仪表板(docker-ui,openstack horizon,造船厂),配置管理(厨师,puppet),持续集成(jenkins,strider,travis)等。Docker正在迅速将自己定位为基于容器的工具的标准。
我希望这有帮助!
我们来看看Docker的技术特性列表,并检查哪些是由LXC提供的,哪些不是。
特征:
1) 文件系统隔离 :每个进程容器运行在一个完全独立的根文件系统中。
提供简单的LXC。
2) 资源隔离 :像cpu和内存这样的系统资源可以通过cgroups以不同的方式分配给每个进程容器。
提供简单的LXC。
3) 网络隔离 :每个进程容器都在自己的网络名称空间中运行,并具有自己的虚拟接口和IP地址。
提供简单的LXC。
4) 写时复制 :根文件系统是使用写时复制创建的,这使得部署速度非常快,内存便宜并且磁盘便宜。
这由Docker依赖的联合文件系统AUFS提供。 您可以使用LXC手动设置AUFS,但是Docker将其用作标准。
5) 日志记录 :每个流程容器的标准流(stdout / stderr / stdin)被收集并记录下来进行实时或批量检索。
Docker提供了这个。
6) 更改管理 :对容器文件系统的更改可以提交到新映像中,并重新用于创建更多容器。 不需要模板或手动配置。
“模板或手动配置”是对LXC的参考,您需要了解这两方面的知识。 Docker允许您以您使用虚拟机的方式处理容器,而无需了解LXC配置。
7) 交互式shell :docker可以分配一个伪tty并附加到任何容器的标准输入,例如运行一次性交互式shell。
LXC已经提供了这个。
我只是刚开始学习LXC和Docker,所以我欢迎任何更正或更好的答案。
随着LXD的发展继续增强LXC,上述帖子和答案正在迅速成为过时。 是的,我知道Docker也没有停下来。
LXD现在实现了一个LXC容器图像的存储库,用户可以通过该存储库进行推送或重新提供。
LXD的LXC REST API现在支持使用非常简单的命令语法进行本地和远程创建/部署/管理LXC容器。
LXD的主要特点是:
OpenStack现在有NCLXD插件,允许OpenStack利用LXD在OpenStack中将LXC容器部署/管理为虚拟机,而不是使用KVM,vmware等。
但是,NCLXD还支持混合传统硬件虚拟机和LXC虚拟机的混合云。
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时,将会有额外的酷功能,如块设备支持,实时迁移支持。
链接地址: http://www.djcxy.com/p/30137.html