Chroot vs Docker

rka*_*ach 37 linux chroot docker

我正在尝试学习有关容器的基础知识(本例中为Docker).据我从Docker doc和几个读数中学习,Docker基本上通过使用runc运行容器来提供隔离(以前使用LXC).它使用与主机相同的内核的方式.因此,容器映像需要与主​​机内核兼容.我发现这与chroot的作用非常相似.有人可以向我解释使用Docker而不是chroot的任何差异和/或优势吗?(除了Docker提供的附件包装,docker-hub以及Docker提供的所有优秀功能)

Luc*_*Luc 32

Docker允许通过命名空间隔离多个级别的进程:

  • mnt命名空间提供了一个根文件系统(这个可以比作chroot我猜)
  • pid命名空间,因此进程只能看到自己及其子进程
  • 网络命名空间,允许容器拥有其专用的网络堆栈
  • 用户名空间(非常新),允许主机上的非root用户与容器中的root用户进行映射
  • uts提供专用主机名
  • ipc提供专用的共享内存

所有这些都增加了比chroot提供的更多隔离

  • Luc 的答案很好,但可以将 @BMitch 的反馈合并到答案本身中进行改进,这样就不会被错过。 (4认同)
  • 还有cgroup(用于cpu和内存限制),降低功能,seccomp,selinux/apparmor和ulimits.文件系统也是分层的,可能只读,并允许与卷安装重叠. (3认同)