chroot和Docker之间的区别


15

我不明白docker和chroot之间的区别。是的,在打包注册表方面非常好。但是不知何故,我感觉到它只是带有额外的铃铛和哨子的根。

我知道我想念什么。如果chroot可以做些类似的事情,那么知道它们之间的不同以及对docker的需求将是很棒的。

我也找不到这个Chroot Vs Docker足够清晰。


好吧,是的,Docker不会做内核不会为您做的任何事情。它只是将其打包成一个或多或少的连贯且易于使用的工具。如果您不愿意自己做chroot,名称空间,配额,NAT和所有其他工作,则可以创建自己的Docker。
Gaius

Answers:


8

好吧,额外的麻烦叫过程隔离,容器从主机内核获取自己的名称空间,这意味着容器中的程序无法尝试读取内核内存或吃掉比允许的内存更多的RAM。

它还隔离了网络堆栈,因此两个进程可以在端口8080上监听,例如,您必须在主机级别处理路由,这没有什么魔术,但这允许在一个地方处理路由并避免将进程配置修改为收听免费端口。

其次chroot仍然是可读写的,任何更改都是永久性的,aufs每次启动容器时,使用的Docker容器将从一个干净的文件系统启动(如果停止/启动IIRC,则更改将保留)。

因此,尽管可以将容器视为process namespace+ chroot,但实际情况要复杂一些。


请注意,aufs默认情况下不再使用它。现在是overlay2
Vitalii Vitrenko

没错,但我认为目前引用aufs的教育材料比overlay2还要多:)
Tensibai '17

普通进程无法读取也不应该读取的任何内存。如果您依靠Docker来确保安全性,那就错了……
Gaius

@Gaius,您读错了我,我只是想为OP提供搜索线索...在交付管道中添加docker并赋予开发人员在其内部使用的所有自由,这绝对不是安全点。尽管如此,命名空间本质上可以防止堆栈溢出和缓冲区溢出。
Tensibai

5

是的,绝对不仅仅chroot在于他们几乎没有共同点。

  • 一种标准化的脚本文件格式,包括与手的任务有关的语义
  • 图像(包括中间的匿名图像),缓存,命名,下载等,包括强大的管理(docker image prune...)
  • 容器(包括它们自己的临时文件系统,命名,能够docker exec进入的容器等)
  • 流程管理(docker container ...
  • 只需一个简单的选项即可进行联网,包括docker-container-container-networking等。
  • 卷(包括特殊托管卷)
  • docker-compose 或随着低调升级到更多而蜂拥而至。
  • 基于dockerized容器(OpenShift等)的其他解决方案的大型动物园。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.