Docker之十三:Docker 的核心技术

本文深入探讨了Docker的基本架构,包括客户端、服务端和镜像仓库,重点讲解了命名空间(PID、IPC、网络、挂载、UTS、用户)的概念和作用,以及控制组(CGroups)在资源限制和隔离中的功能。此外,还详细介绍了联合文件系统(UnionFS)如何支持Docker镜像的分层和高效存储。通过对Linux网络虚拟化的解析,阐述了Docker容器网络的基本原理和创建过程。
摘要由CSDN通过智能技术生成

本节内容来源于《Docker技术入门与实战》。

Docker 的基本架构

Docker的架构如下图所示:
Docker 基本架构

Docker 采用标准的 C/S 架构,包括客户端和服务端两大核心组件,同时通过镜像仓库来存储镜像。客户端和服务端可以运行在一个机器上,也可以通过 socket 或者 TESTful API 来通信。

服务端

Docker 服务端一般在宿主主机后台运行,dockerd 作为服务端接受来自客户地请求,并通过 containerd 具体处理与容器相关地请求,包括创建、运行、删除容器等操作。服务端主要包括四个组件:

  1. dockerd:为客户端提供 RESTful API,响应来自客户端地请求,采用模块化地架构,通过专门地 Engine 模块分发管理各个来自客户端地任务。
  2. docker-proxy:是 dockerd 的子进程,当需要进行容器端口映射时,docker-proxy 完成网络映射配置。
  3. containerd:是dockerd 的子进程,提供 gRPC 接口响应来自 dockerd 的请求,对下管理 runC 镜像和容器环境。
  4. containerd-shim:是 containerd 的子进程,为 runC 容器提供支持,同时作为容器内进程的根进程。

runC 是从Docker公司开源的libcontainer 项目演化而来的,目前作为一种具体的开放容器标准实现加入 OCI(Open Containers Initiative)。runC 已经支持了 Linux 系统中容器的相关技术栈,同时正在实现对其他操作系统的兼容。用户可以直接使用 docker-runc 命令来直接使用 OCI 规范的容器。 runC 为一个轻量级的工具,它是用来运行容器的,我们可以理解 runC 为一个命令行小工具,可以部经过 Docker 引擎直接运行容器。
RESTful API 就是REST风格的API。REST,表示性状态转移(representation state transfer),就是用 URI (Uniform Resource Identifier,统一资源标识符)表示资源,用HTTP方法(GET, POST, PUT, DELETE)表征对这些资源的操作。
gRPC 是一款 RPC 框架。RPC 称为远程过程调用,简单的说,就是将一个服务调用封装在一个本地方法中,让调用者像使用本地方法一样调用服务,对其屏蔽实现细节。而具体的实现是通过调用方和服务方的一套约定,基于TCP长连接进行数据交互达成。

dockerd 默认监听本地的 unix:///var/run/docker.sock 套接字,只允许本地的 root 用户或 docker 用户组成员访问。可以通过 -H 选项来修改监听方式。

$ sudo dockerd -H 127.0.0.1:1234

客户端

Docker 客户端为用户提供一系列可执行命令,使用这些命令可以实现于 Docker 服务端交互。
客户端默认通过本地的 unix:///var/run/docker.sock 套接字向服务端发送命令。如果服务端没有监听到默认的地址,则需要客户端在执行命令的时候显式地指定服务端地址。

# 假定服务端监听本地地 TCP 连接 1234端口为 tcp://127.0.0.1:1234,只有通过 -H 参数指定正确地地址信息才能连接到服务端
$ docker -H tcp://127.0.0.1:1234 info

镜像仓库

Docker 使用镜像仓库(Registry)存储和分发 Docker 镜像。镜像仓库提供了对不同寻出后端的支持,存放镜像文件,并且支持 RESTful API,接收来自 dockerd 的命令,包括拉取和上传镜像等。

命名空间

什么是命名空间 ?

命名空间(namespace)是 Linux 内核的强大特征,它将内核的全局资源做封装,使得每个 namespace 都有一份独立的资源,使得不同的进程在各自的命名空间内对同一种资源的使用不会互相干扰。命名空间的这种特性,为容器虚拟化带来极大的便利,保证了运行在同一宿主机内的不同容器之间彼此互不影响。

Linux 内核总共实现了六种命名空间:

  • 进程命名空间(PID):隔离进程 ID
  • IPC 命名空间(IPC):隔离 System V IPC 和 POSIX 消息队列
  • 网络命名空间(Network):隔离网络资源
  • 挂载命名空间(Mount)&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值