【问题标题】:Chroot vs DockerChroot 与 Docker
【发布时间】:2018-06-13 18:42:13
【问题描述】:

我正在尝试学习有关容器的基础知识(在本例中为 Docker)。据我从 Docker 文档和一些阅读材料中了解到,Docker 基本上通过使用 runc(之前使用 LXC)运行容器来提供隔离。无论哪种方式,它都使用与主机相同的内核。因此,容器镜像需要与主​​机内核兼容。我发现这与chroot 所做的非常相似。有人可以向我解释使用 Docker 而不是 chroot 的任何区别和/或优势吗? (除了 Docker 作为包装提供的附加功能、docker-hub 以及 Docker 提供的所有不错的功能)

【问题讨论】:

  • 重点(re:内核命名空间隔离)已经在“Docker 与 X 有何不同?”中得到了解答。问题,即使我们还没有专门针对 chroot 的问题。
  • 我认为有这个特定的问题很好,因为 chroot 是 Linux AFAIK 中的“第一个”隔离解决方案。这是第一个想到的问题,因为 chroot 也共享主机内核。
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • 在考虑路径和打包的不同之处以及对“Chroot vs. Docker”的安全影响时,我实际上发现了这个问题。这些绝对是基本问题。因此,在请求基础设施同事为他们配置主机之前,开发人员可能会向自己提出这个问题似乎是一个公平的问题。确实,我觉得这个问题写得很好,值得一票。

标签: linux docker chroot


【解决方案1】:

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

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

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

【讨论】:

  • 还有 cgroups(用于 cpu 和内存限制)、缩减功能、seccomp、selinux/apparmor 和 ulimits。文件系统也是分层的,可能是只读的,并且允许被卷挂载覆盖。
  • 很好的答案 Luc,但可以改进将 @BMitch 的反馈纳入答案本身,以免错过。
猜你喜欢
  • 2015-12-22
  • 2021-11-22
  • 2015-03-14
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多