写点什么

Docker 学习路线 2:底层技术

作者:小万哥
  • 2023-07-11
    广东
  • 本文字数:1985 字

    阅读完需:约 7 分钟

Docker学习路线2:底层技术

了解驱动 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

cgroups control 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腾讯开发者社区阿里开发者社区


看完如果觉得有帮助,欢迎点赞、收藏关注

发布于: 刚刚阅读数: 4
用户头像

小万哥

关注

代码如人生 2023-02-09 加入

编程爱好者

评论

发布
暂无评论
Docker学习路线2:底层技术_Docker_小万哥_InfoQ写作社区