理解驱动Docker的核心技术将让您更深刻地理解Docker的工作原理,并有助于您更无效地应用该平台。

Linux容器(LXC)

Linux容器(LXC)是Docker的根底。 LXC是一种轻量级的虚拟化解决方案,容许多个隔离的Linux零碎在单个主机上运行,无需全功能的虚拟化。 LXC无效地以平安和优化的形式隔离应用程序及其依赖项。

控制组(cgroups)

控制组(cgroups)是Linux内核的一个性能,容许调配和治理资源,例如CPU、内存和I/O,到一组过程。 Docker利用cgroups来限度容器应用的资源,并确保一个容器不会垄断主机零碎的资源。

联结文件系统(UnionFS)

UnionFS是一个文件系统服务,容许在单个、对立的视图中叠加多个文件系统。 Docker应用UnionFS为镜像和容器创立分层办法,这使得共享公共文件和更快的容器创立成为可能。

命名空间

命名空间是另一个Linux内核个性,提供过程隔离。它们容许Docker创立名为容器的隔离工作区。命名空间确保容器内的过程不能烦扰容器外或主机零碎上的过程。有几种类型的命名空间,如PID、NET、MNT和USER,每个命名空间负责隔离过程的不同方面。

命名空间

命名空间是 Docker 用于提供容器之间隔离的核心技术之一。在本节中,咱们将简要探讨命名空间是什么以及它们如何工作。

命名空间是什么?

在 Linux 内核中,命名空间是一种性能,容许隔离各种系统资源,使得过程及其子过程可能看到与其余过程拆散的零碎子集。命名空间有助于创立形象层,将容器化的过程与彼此和主机零碎离开。

Linux 中有几种类型的命名空间,包含:

  • PID (过程 ID):隔离过程 ID 号码空间,这意味着容器内的过程只看到它们本人的过程,而不是主机或其余容器中的过程。
  • Network (NET):为每个容器提供网络堆栈的独自视图,包含其本人的网络接口、路由表和防火墙规定。
  • Mount (MNT):以这样的形式隔离文件系统挂载点,以便每个容器都有本人的根文件系统,并且挂载的资源仅呈现在该容器内。
  • UTS (UNIX Time Sharing System):容许每个容器领有本人的主机名和域名,与其余容器和主机零碎离开。
  • User (USER):在容器和主机之间映射用户和组标识符,因而能够为容器内的资源设置不同的权限。
  • IPC (过程间通信):容许或限度不同容器中的过程之间的通信。

Docker 如何应用命名空间

Docker 应用命名空间为容器创立隔离的环境。当容器启动时,Docker 会为该容器创立一组新的命名空间。这些命名空间仅实用于容器外部,因而在容器内运行的任何过程都能够拜访一组与其余容器以及主机零碎隔离的系统资源的子集。

通过利用命名空间,Docker 确保容器真正具备可移植性,能够在任何零碎上运行,而不会与运行在同一主机上的其余过程或容器发生冲突或烦扰。

总之,命名空间提供了一种资源隔离的级别,使得在同一主机上运行具备独立系统资源的多个容器成为可能,而它们之间不会互相烦扰。这是 Docker 容器技术的支柱性特色。

cgroups

cgroupscontrol groups是Linux内核的一个性能,它容许您在运行零碎上的过程组之间调配和治理资源,例如CPU、内存、网络带宽和I/O。它在提供资源隔离和限度运行容器能够应用的资源方面施展着至关重要的作用。

Docker利用cgroups对容器进行资源束缚,从而使它们具备统一和可预测的行为。以下是cgroups在Docker容器上下文中的一些要害性能和长处:

资源隔离

cgroups有助于将每个容器限度在特定的资源集上,确保多个容器之间偏心共享系统资源。这能够在不同的容器之间实现更好的隔离,以便不良行为的容器不会耗费所有可用资源,从而对其余容器产生负面影响。

限度资源

应用cgroups,您能够设置容器应用的各种系统资源的限度,例如CPU、内存和I/O。这有助于避免单个容器耗费过多的资源,从而对其余容器或主机零碎造成性能问题。

优先解决容器

通过调配不同的资源份额,cgroups容许您优先或优先解决某些容器。这在某些容器比其余容器更为要害或在高资源争用状况下十分有用。

监控

cgroups还提供监督单个容器资源应用的机制,这有助于理解容器性能并辨认潜在的资源瓶颈。

总的来说,cgroups是Docker的一个重要的根底技术。通过利用cgroups,Docker提供了一个强壮和高效的容器运行时环境,确保容器具备所需的资源,同时保持良好的整体零碎性能。

Docker引擎

“Docker Desktop”和“Docker引擎”之间常常存在混同。 Docker引擎专指Docker桌面组件的一个子集,它是收费且开源的,只能在Linux上装置。

Docker引擎包含:

  • Docker命令行界面(CLI)
  • Docker守护过程(dockerd),公开Docker应用程序编程接口(API)

Docker引擎能够构建容器镜像,从容器镜像运行容器,并且通常能够执行Docker桌面的大多数操作,但它仅实用于Linux,并且不提供Docker桌面提供的所有开发人员体验。

最初

为了不便其余设施和平台的小伙伴观看往期文章,链接奉上:

公众号 Let us Coding牛客知乎开源中国CSDN思否掘金InfoQ简书博客园慕课51CTOhelloworld腾讯开发者社区阿里开发者社区

看完如果感觉有帮忙,欢送点赞、珍藏关注