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

我知道我缺少了一些东西。如果chroot可以做些类似的事情,那么知道它们有何不同以及是否需要docker真是太好了。 br />

评论

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

#1 楼

好吧,额外的烦恼被称为进程隔离,容器从主机内核获取自己的名称空间,这意味着容器中的程序无法尝试读取内核内存或吃掉超出允许范围的RAM。

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

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

因此,虽然容器可能被视为process namespace + chroot,但实际情况要复杂一些。

评论


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

– Vitalii Vitrenko
17年12月8日在17:30

是的,但是我认为目前引用aufs的教育材料比overlay2还要多:)

–滕西拜
17年12月8日在19:16

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

– Gaius
17年12月10日在17:07

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

–滕西拜
17年12月10日在19:08

#2 楼

是的,绝对比chroot更重要的一点是它们之间几乎没有共同点。


标准化脚本文件格式,包括与手任务有关的语义
图像(包括中间的匿名图像),缓存,命名,下载等,包括强大的管理功能(docker image prune ...)
容器(包括自己的临时文件系统,命名,能够对其进行命名等)。 )
过程管理(docker exec
仅需简单的选项即可联网,包括docker-container-networking等网络。
卷(包括特殊的托管卷)

docker container ...或蜂拥而至,因为低调升级了更多。