了解驱动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腾讯开发者社区阿里开发者社区

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

Docker学习路线2:底层技术的更多相关文章

  1. 优秀的云计算工程师需要学什么?云计算Docker学习路线

    云计算工程师要学什么?随着互联网的快速发展,云计算这个词大家并不陌生,但是云计算究竟是做什么的,想要从事云计算要学习什么,很多都不知道,那么今天就给大家讲一下云计算. 云计算是基于互联网的相关服务的增 ...

  2. docker 学习路线

    docker 学习路线 参考资料 知乎 docker 的学习路线 Docker - 从入门到实践 Docker 核心技术与实现原理 Docker 入门 <Kubernetes in Action ...

  3. docker学习路线

    http://www.simapple.com/320.html DOCKER 官网 :https://docs.docker.com/docker-for-mac/

  4. Docker学习要点记录

    Docker的架构和底层技术: 1.docker提供了一个开发,打包,运行app的平台2.把APP和底层infrastructure隔离开来 docker底层技术支持: 1>Namespaces ...

  5. 实现容器的底层技术 - 每天5分钟玩转 Docker 容器技术(30)

    为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术.cgroup 和 namespace 是最重要的两种技术.cgroup 实现资源限额, namespace 实现资源隔离. cgroup c ...

  6. 【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线

    [Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院  欧浩源 一.引言    在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感 ...

  7. 四:(之一和之二) docker架构和底层技术分析(C/S架构)

    1.架构和底层技术 Docker Host提供了RESTUL api,使docker client可以通过这些命令调用dockerd. Registry是一个公用的存储镜像的容器,类似于github. ...

  8. 5、Docker架构和底层技术

    5.1 Docker Platform Docker提供了一个开发,打包,运行APP的平台 把APP和底层infrastructure隔离开来 5.2 Docker Engine 后台进程(docke ...

  9. Java研发技术学习路线

    Java研发技术成长路线 作为一名Java研发者,深感Java技术的学习是一个漫长过程,从一名Java菜鸟开始,加之持之以恒的耐心和脚踏实地的精神,不间断理论的学习,不停止技术实践,终成为一名技术佼佼 ...

  10. 【强烈推荐】可能是最适合你的 Java 学习路线和方法

    如遇链接无法打开,建议使用 https://github.com/Snailclimb/JavaGuide/blob/master/docs/questions/java-learning-path- ...

随机推荐

  1. Elasticsearch系列之-linux.docker安装和基础操作及在Django中集成

    elasticsearch Elasticsearch是一个基于Lucene的搜索服务器,也是属于NoSQL阵营的数据库.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口提供 ...

  2. 问题:AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'

    分析 在使用支付宝沙箱时,报了这个错误,该问题是没有安装openssl包 解决 pip3 install pyOpenSSL 安装后再次运行如果还是报错,请降低加密库 pip install cryp ...

  3. 【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (二)

    问题描述 在上一篇博文([Azure 存储服务].NET7.0 示例代码之上传大文件到Azure Storage Blob (一):https://www.cnblogs.com/lulight/p/ ...

  4. linux用户权限相关命令笔记

    1,用户 和 权限 的基本概念 1.1 ls 扩展 ls -l 1.2 chmod 简单使用(重要) + 是加权限, - 是减权限 chmod 修改文件权限 chmod 修改目录权限: 想要在目录下执 ...

  5. Java 多线程---线程优先级

    Java 实例 - 线程优先级设置 以下实例演示了如何通过setPriority() 方法来设置线程的优先级: 1 SimplePriorities.java 文件 2 public class Si ...

  6. 十步带你用IDEA创建一个WEB项目及部署(Tomcat)

    部署一个web项目首先需要安装Tomcat,还没安装的朋友们可以看一下我这个博客: https://www.cnblogs.com/deyo/p/17241878.html 第一步:打开Idea-新建 ...

  7. vue3 markdown 读取文件的两种方法 有gitee发布地址

    方法一: markdown-loader html-loader import的时候就转换成html了,每次需要build,但是可以本地双击就能看,放哪个目录页不限制 方法二: axios + mar ...

  8. docker部署文件

  9. zhelper-cvtool

    https://github.com/bbqz007/zhelper-cvtool cvtool images/SuperMario.mp4 anno,cascade cvtool images/Su ...

  10. Python配置文件使用教程

    在 Python 应用程序开发过程中,配置文件扮演着重要的角色.配置文件可以用来存储应用程序的各种设置.选项和参数,使得程序更加灵活和可配置.本文将介绍 Python 中如何使用配置文件,并提供一些常 ...