Namespace & Cgroup

Docker Namespace Vs Cgroup

最近想学习一下Docker底层是用什么技术来实现容器之间互不影响这一强大功能的,偶尔发现了这篇文章,里面对Docker底层的实现技术做了比较宏观的解释、比较适合入门了解。
附上原文链接Docker Namespace Vs Cgroup
img

Namespace and Cgroup

  • 它们所运行的Linux容器是由两个底层的Linux内核技术驱动的:cgroups和namespaces。
  • 当你启动一个容器时,在幕后,Docker为该容器创建了一组命名空间和控制组。

What is Namespace?

  • 命名空间为容器提供了一个隔离层。
  • 容器的每个方面都在一个单独的命名空间中运行,其访问仅限于该命名空间。
  • 当你运行一个容器时,Docker为该容器创建一组命名空间。
  • 命名空间使在该命名空间内运行的进程相信他们有自己的该资源的实例。
  • 命名空间可以限制对某些进程树、网络接口、用户ID或文件系统挂载的可见性。

Docker Engine uses the following namespaces on Linux

  • PID(进程ID)它用于为进程分配一组PID,这些PID独立于其他命名空间的PID集。
  • NetWork(网络) 命名空间用于管理网络接口,如私有路由表、IP地址集、套接字列表、防火墙等。
  • IPC(进程间通信) 命名空间有自己的IPC资源,例如,POSIX消息队列。
  • Mount 挂载命名空间有一个独立的挂载点列表,用于管理文件系统挂载点。
  • UNIX时间共享(UTS)名称空间允许一个系统在不同的进程中看起来有不同的主机和域名。

What is Cgroup?

  • 控制组(cgroup)是一个Linux内核功能,它将一个应用程序限制在一组特定的资源使用上(CPU、内存、磁盘I/O、网络,等等)。
  • 控制组允许Docker Engine将可用的硬件资源分享给容器,并可以选择执行限制和约束。

Cgroups involve resource metering and limiting:

  • memory
  • CPU
  • block I/O
  • network

总结:

Docker使用了Namespace和Cgroup技术来确保不同的空间内(Namespace)可以使用不同的资源(cpu、memory...)想要深入了解的小伙伴可以按照这个思路再进一步深入了解!

posted @ 2023-02-25 21:27  Asakalan  阅读(44)  评论(0)    收藏  举报