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

fafcakar  于 2022-12-26  发布在  Docker
关注(0)|答案(5)|浏览(100)

如果你看一下Docker的特性,其中大部分已经由LXC提供了。
那么Docker添加了什么呢?为什么我要使用Docker而不是普通的LXC?

b0zn9rqh

b0zn9rqh1#

Docker FAQ
Docker不是lxc的替代品,"lxc"指的是linux内核的功能(特别是名称空间和控制组),它允许进程之间的沙盒,并控制它们的资源分配。
在内核特性的底层基础之上,Docker提供了一个具有几个强大功能的高级工具:

    • 跨机器的可移植部署。* Docker定义了一种格式,用于将应用程序及其所有依赖项绑定到单个对象中,该对象可以传输到任何启用了Docker的机器,并在那里执行,同时保证向应用程序公开的执行环境将是相同的。Lxc实现了进程沙箱,这是可移植部署的重要先决条件。但是对于可移植的部署来说,这是不够的,如果您给我一个安装在自定义lxc配置中的应用程序的副本,它几乎肯定不会像在您的机器上那样在我的机器上运行,因为它与您的机器的特定配置相关联:网络、存储、日志记录、发行版等。Docker定义了这些特定于机器的设置的抽象,以便完全相同的Docker容器可以在许多不同的机器上运行(不做更改),具有许多不同的配置。
    • 以应用程序为中心。* Docker针对 * 应用程序 * 的部署进行了优化,而不是针对机器。这一点反映在它的API、用户界面、设计理念和文档中。相比之下,lxc助手脚本将容器作为轻量级机器来关注--基本上是启动速度更快、需要更少内存的服务器。我们认为容器不仅仅是这样。
    • 自动构建 . Docker包含一个工具,让开发人员可以从源代码自动组装容器,完全控制应用程序依赖项、构建工具、打包等。他们可以免费使用make、maven、chef、puppet、salt、debian包、rpm、源代码压缩包或以上各项的任意组合, 无论机器的配置如何 *。
    • 版本控制。* Docker包括类似git的功能,用于跟踪容器的连续版本,检查版本之间的差异,提交新版本,回滚等。历史记录还包括容器的组装方式和组装者,因此您可以从生产服务器一直追溯到上游开发人员。Docker还实现增量上传和下载,类似于"git pull"。因此容器的新版本可以仅通过发送DIFF来传送。
    • 组件重用。* 任何容器都可以用作"基础映像"来创建更专业的组件。这可以手动完成,也可以作为自动构建的一部分。例如,您可以准备理想的python环境,并将其用作10个不同应用程序的基础。您理想的postgresql设置可以在所有未来的项目中重用。等等。
    • Docker可以访问一个公共注册中心(https://registry.hub.docker.com/),成千上万的人在这里上传了有用的容器:从redis couchdb postgres到irc bouncers到rails应用服务器到hadoop到各种发行版的基础映像。注册中心还包括一个由docker团队维护的有用容器的官方"标准库"。注册中心本身是开源的,所以任何人都可以部署自己的注册中心来存储和传输私有容器,例如内部服务器部署。
    • 工具生态系统。* Docker定义了一个API,用于自动化和定制容器的创建和部署。有大量的工具与Docker集成,以扩展其功能。(Dokku、Deis、Flynn),多节点编排(maestro、salt、mesos、openstack nova)、管理 Jmeter 盘(docker-ui、openstackhorizon、shipyard)、配置管理(chef、puppet)、持续集成(jenkins、strider、travis)等。Docker正在迅速地将自己确立为基于容器的工具的标准。
wribegjk

wribegjk2#

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

特征:

1)文件系统隔离:每个进程容器在完全分离的根文件系统中运行。
配备普通LXC。
2)资源隔离:可以使用cgroups将诸如CPU和存储器之类的系统资源不同地分配给每个进程容器。
配备普通LXC。
3)网络隔离:每个进程容器在其自己的网络命名空间中运行,具有其自己的虚拟接口和IP地址。
配备普通LXC。
4)写入时复制:根文件系统是使用写入时复制来创建的,这使得部署极其快速、存储器和磁盘成本低廉。
这是由AUFS提供的,它是Docker依赖的一个联合文件系统。您可以使用LXC手动设置AUFS,但是Docker将其作为标准。
5)日志记录:收集并记录每个过程容器的标准流(STDOUT/STDERR/STDIN),用于实时或批量检索。
Docker提供了这个。
6)变革管理:对容器文件系统的更改可以提交到一个新的映像中,并重新用于创建更多的容器。无需模板或手动配置。
“模板化或手动配置”是对LXC的一个参考,在这里你需要学习这两件事。Docker允许你像对待虚拟机一样对待容器,而不需要学习LXC配置。
7)**交互式 shell **:Docker可以分配伪TTY,并附加到任何容器的标准输入,例如以运行一次性交互式 shell 。
LXC已经提供了这一点。
我只是刚刚开始学习LXC和Docker,所以我欢迎任何更正或更好的答案。

3pvhb19x

3pvhb19x3#

随着LXD continues to enhance LXC的发展,上面的帖子和答案很快就过时了。是的,我知道Docker也没有停滞不前。
LXD现在为LXC容器映像实现了一个存储库,用户可以从该存储库中推送/拉取映像,以对其进行贡献或重用。
LXD的REST API to *LXC现在支持使用非常简单的命令语法在本地和远程 * 创建/部署/管理LXC容器。
LXD的主要特点是:

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

NCLXD plugin now for OpenStack allowing OpenStack可利用LXD将LXC容器作为OpenStack中的虚拟机进行部署/管理,而不是使用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发布时,将有 * 额外的酷功能,如块设备支持、实时迁移支持 *。

myzjeezk

myzjeezk4#

Dockers使用的映像是分层构建的。这在可移植性、共享、版本控制和其他特性方面增加了很多。这些映像非常容易移植或传输,并且因为它们是分层的,所以后续版本中的更改会以分层的形式添加到先前的层上。因此,虽然移植很多次你不需要移植基本层。对接器有容器运行这些图像与执行环境包含,它们将改变添加为提供容易的版本控制的新层。
除此之外,Docker Hub是一个很好的注册表,有数千个公共映像,在那里你可以找到安装了操作系统和其他软件的映像。所以,你可以为你的应用程序获得一个很好的开端。

k97glaaz

k97glaaz5#

要保持这一点,这是已经问和回答以上。
我想退一步,但回答略有不同,码头工程师本身增加了编排作为其额外功能之一,这是破坏性的一部分。一旦你开始运行一个应用程序作为一个容器的组合运行“某处”跨多个容器引擎,它变得非常令人兴奋。健壮性,水平伸缩,从底层硬件完全抽象,我可以继续下去...
它不只是Docker给你这个,事实上,事实上容器编排标准是Kubernetes,它有很多口味,一个Docker的,但也OpenShift,SuSe,Azure,AWS...
然后在K8S之下有替代的集装箱引擎;有趣的是Docker和CRIO --最近建立的,没有守护进程,打算作为一个专门用于Kubernetes的容器引擎,但还不成熟。2我认为这两个引擎之间的竞争将是容器引擎真实的的长期选择。

相关问题