如果你看一下Docker的特性,其中大部分已经由LXC提供了。那么Docker添加了什么呢?为什么我要使用Docker而不是普通的LXC?
b0zn9rqh1#
从Docker FAQ:Docker不是lxc的替代品,"lxc"指的是linux内核的功能(特别是名称空间和控制组),它允许进程之间的沙盒,并控制它们的资源分配。在内核特性的底层基础之上,Docker提供了一个具有几个强大功能的高级工具:
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,所以我欢迎任何更正或更好的答案。
3pvhb19x3#
随着LXD continues to enhance LXC的发展,上面的帖子和答案很快就过时了。是的,我知道Docker也没有停滞不前。LXD现在为LXC容器映像实现了一个存储库,用户可以从该存储库中推送/拉取映像,以对其进行贡献或重用。LXD的REST API to *LXC现在支持使用非常简单的命令语法在本地和远程 * 创建/部署/管理LXC容器。LXD的主要特点是:
有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发布时,将有 * 额外的酷功能,如块设备支持、实时迁移支持 *。
myzjeezk4#
Dockers使用的映像是分层构建的。这在可移植性、共享、版本控制和其他特性方面增加了很多。这些映像非常容易移植或传输,并且因为它们是分层的,所以后续版本中的更改会以分层的形式添加到先前的层上。因此,虽然移植很多次你不需要移植基本层。对接器有容器运行这些图像与执行环境包含,它们将改变添加为提供容易的版本控制的新层。除此之外,Docker Hub是一个很好的注册表,有数千个公共映像,在那里你可以找到安装了操作系统和其他软件的映像。所以,你可以为你的应用程序获得一个很好的开端。
k97glaaz5#
要保持这一点,这是已经问和回答以上。我想退一步,但回答略有不同,码头工程师本身增加了编排作为其额外功能之一,这是破坏性的一部分。一旦你开始运行一个应用程序作为一个容器的组合运行“某处”跨多个容器引擎,它变得非常令人兴奋。健壮性,水平伸缩,从底层硬件完全抽象,我可以继续下去...它不只是Docker给你这个,事实上,事实上容器编排标准是Kubernetes,它有很多口味,一个Docker的,但也OpenShift,SuSe,Azure,AWS...然后在K8S之下有替代的集装箱引擎;有趣的是Docker和CRIO --最近建立的,没有守护进程,打算作为一个专门用于Kubernetes的容器引擎,但还不成熟。2我认为这两个引擎之间的竞争将是容器引擎真实的的长期选择。
5条答案
按热度按时间b0zn9rqh1#
从Docker FAQ:
Docker不是lxc的替代品,"lxc"指的是linux内核的功能(特别是名称空间和控制组),它允许进程之间的沙盒,并控制它们的资源分配。
在内核特性的底层基础之上,Docker提供了一个具有几个强大功能的高级工具:
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,所以我欢迎任何更正或更好的答案。
3pvhb19x3#
随着LXD continues to enhance LXC的发展,上面的帖子和答案很快就过时了。是的,我知道Docker也没有停滞不前。
LXD现在为LXC容器映像实现了一个存储库,用户可以从该存储库中推送/拉取映像,以对其进行贡献或重用。
LXD的REST API to *LXC现在支持使用非常简单的命令语法在本地和远程 * 创建/部署/管理LXC容器。
LXD的主要特点是:
有NCLXD plugin now for OpenStack allowing OpenStack可利用LXD将LXC容器作为OpenStack中的虚拟机进行部署/管理,而不是使用KVM、vmware等。
但是,NCLXD还支持混合传统HW VM和LXC VM的混合云。
OpenStack nclxd插件支持的功能列表包括:
到2016年4月Ubuntu 16.04发布时,将有 * 额外的酷功能,如块设备支持、实时迁移支持 *。
myzjeezk4#
Dockers使用的映像是分层构建的。这在可移植性、共享、版本控制和其他特性方面增加了很多。这些映像非常容易移植或传输,并且因为它们是分层的,所以后续版本中的更改会以分层的形式添加到先前的层上。因此,虽然移植很多次你不需要移植基本层。对接器有容器运行这些图像与执行环境包含,它们将改变添加为提供容易的版本控制的新层。
除此之外,Docker Hub是一个很好的注册表,有数千个公共映像,在那里你可以找到安装了操作系统和其他软件的映像。所以,你可以为你的应用程序获得一个很好的开端。
k97glaaz5#
要保持这一点,这是已经问和回答以上。
我想退一步,但回答略有不同,码头工程师本身增加了编排作为其额外功能之一,这是破坏性的一部分。一旦你开始运行一个应用程序作为一个容器的组合运行“某处”跨多个容器引擎,它变得非常令人兴奋。健壮性,水平伸缩,从底层硬件完全抽象,我可以继续下去...
它不只是Docker给你这个,事实上,事实上容器编排标准是Kubernetes,它有很多口味,一个Docker的,但也OpenShift,SuSe,Azure,AWS...
然后在K8S之下有替代的集装箱引擎;有趣的是Docker和CRIO --最近建立的,没有守护进程,打算作为一个专门用于Kubernetes的容器引擎,但还不成熟。2我认为这两个引擎之间的竞争将是容器引擎真实的的长期选择。