3.Docker底层技术和架构

Docker用Go编程语言编写,并利用Linux内核的多个功能来交付其功能。

命名空间(namespaces)

Docker使用一种称为namespaces的技术来提供称为container的隔离工作区。运行容器时,Docker会为该容器创建一组 namespaces

这些命名空间提供了一层隔离。容器的每个方面都在单独的命名空间中运行,并且对其的访问仅限于该命名空间。

Docker Engine在Linux上使用以下命名空间:

  • pid命名空间:进程隔离(PID: Process ID)。
  • net命名空间:管理网络接口(NET: Networking)。
  • ipc命名空间:管理访问IPC资源(IPC: InterProcess Communication)。
  • mnt命名空间:管理文件系统挂载点(MNT: Mount)。
  • uts命名空间:隔离内核和版本标识符。(UTS: Unix Timesharing System)。

控制组(Control groups)

Linux上的Docker引擎还依赖于另一种称为控制组 (cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,您可以限制特定容器可用的内存。

联合文件系统(Union file systems)

联合文件系统或UnionFS是通过创建层进行操作的文件系统,使其非常轻便且快速。Docker Engine使用UnionFS为容器提供构建模块。Docker Engine可以使用多个UnionFS变体,包括AUFS,btrfs,vfs和DeviceMapper。

容器格式(Container format)

Docker Engine将名称空间,控制组和UnionFS组合到一个称为容器格式的包装器中。默认容器格式为libcontainer。将来,Docker可以通过与BSD Jails或Solaris Zones等技术集成来支持其他容器格式。

Docker Engine和架构

Docker Engine是具有以下主要组件的客户端-服务器应用程序:

  • 服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
  • REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
  • 命令行界面(CLI)客户端(docker命令)。
3.Docker底层技术和架构

CLI使用Docker REST API通过脚本或直接CLI命令来控制Docker守护程序或与Docker守护程序进行交互。许多其他Docker应用程序都使用基础API和CLI。

Docker使用客户端-服务器架构。Docker客户端与Docker守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以 在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。

3.Docker底层技术和架构

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/basic/docker/2854.html

(0)
上一篇 2020年12月4日 20:07
下一篇 2020年12月4日 20:12

相关推荐

  • 8.安装Docker-Compose步骤(Ubuntu)

    安装 安装Docker-Compose前务必确保已安装Docker Engine。 首先从Compose repository release page on GitHub查询需要安装的版本,然后安装Docker-Compose: 要安装其他版本的Compose,请替换1.27.4 为要使用的Compose版本。 将可…

    Docker教程 2020年12月5日
    01.6K0
  • 4.Docker专业术语一览表

    术语名 缩写 解释 Virtual Machine(虚拟机) VM 虚拟机(VM)是将一台服务器转变为多台服务器的物理硬件的抽象。虚拟机管理程序允许多个VM在单台计算机上运行。每个VM包含操作系统,应用程序,必要的二进制文件和库的完整副本-占用数十GB。VM也可能启动缓慢。 Linux Container LXC Li…

    Docker教程 2020年12月4日
    07100
  • 2.Containers(容器)和Virtual Machines(虚拟机)的区别

    容器和虚拟机具有相似的资源隔离和分配优势,但功能不同,因为容器虚拟化了操作系统,而不是硬件。容器更加便携和高效。 容器是应用程序层的抽象,将代码和依赖项打包在一起。多个容器可以在同一台计算机上运行,​​并与其他容器共享OS内核,每个容器在用户空间中作为隔离的进程运行。容器占用的空间少于VM(容器映像的大小通常为几十MB…

    Docker教程 2020年12月4日
    01.2K0

发表回复

登录后才能评论