如果你看一下Docker的功能,其中大部分已经由LXC提供.
那么Docker添加了什么?为什么我会使用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 horizon,造船厂),配置管理(厨师,木偶),持续集成(jenkins,strider,travis)等.Docker正在迅速建立自己作为基于容器的工具的标准.
我希望这有帮助!
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,所以我欢迎任何更正或更好的答案.
bmu*_*lan 15
随着LXD的发展继续增强LXC,上述帖子和答案正在迅速变得过时.是的,我知道Docker也没有停滞不前.
LXD现在为LXC容器映像实现了一个存储库,用户可以推送/拉出该存储库以贡献或重用.
LXD的LxC REST API 现在可以使用非常简单的命令语法实现LXC容器的本地和远程创建/部署/管理.
LXD的主要特点是:
有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月发布时,还会有其他很酷的功能,例如块设备支持,实时迁移支持.
归档时间: |
|
查看次数: |
103814 次 |
最近记录: |