Docker运行机制解析(图解+秒懂+全面)

Docker是云原生核心,下面我详解Docker运行机制@mikechen

Docker

Docker作为容器化技术的代表,已经成为现代应用交付与云原生架构的基石。

被广泛用于 微服务部署、持续集成、云原生架构 等场景。

Docker运行机制解析(图解+秒懂+全面)-mikechen

理解其运行机制有助于构建高效、可移植与安全的部署流程。

 

Docker架构

Docker架构如下所示:

Docker运行机制解析(图解+秒懂+全面)-mikechen

+----------------+
|  Docker Client |
+----------------+
        |
        |  REST API
        |
+----------------+
| Docker Daemon  |
+----------------+
        |
        |
+----------------+
| Containerd     |
+----------------+
        |
        |
+----------------+
|   runc         |
+----------------+
        |
        |
+----------------+
| Linux Kernel   |
+----------------+

从整体视角看,Docker 大致可以画成三层:

最上层:用户指令层

命令行:docker run / build / ps / stop

SDK / API 调用

中间层:引擎调度层

Docker Daemon:接收命令、调度容器

containerd:负责容器的生命周期管理

shim / runc:具体创建和启动容器进程

最底层:操作系统内核能力

Namespace:做“看见什么”的隔离

Cgroups:做“能用多少”的限制

UnionFS / OverlayFS:做“镜像分层和写时复制”。

 

Docker组件

包含如下组件:

Docker运行机制解析(图解+秒懂+全面)-mikechen

1 Docker Client

Docker Client 是用户与 Docker 交互的入口。

常见命令:

docker run;
docker pull;
docker build;

执行命令时,本质是通过 REST API 向 Docker Daemon 发送请求。

示例:

docker run nginx

2 Docker Daemon

Docker Daemon 是 Docker 的 核心后台服务。

主要负责:

管理镜像;

管理容器;

管理网络;

调度容器运行;

Docker Daemon 监听:/var/run/docker.sock

所有 Docker 命令最终都会发送到这里。

3 Containerd

Containerd 是 Docker 的 容器运行时管理组件。

核心职责:

管理容器生命周期;

管理镜像;

管理容器运行状态;

Docker 通过 containerd 调用更底层组件。

4 runc

runc 是真正 创建容器的工具。

作用:

创建容器;

设置 Namespace;

设置 Cgroups;

启动容器进程。

 

Docker运行机制

Docker的运行机制核心在于:以Linux内核的命名空间、与cgroup实现轻量隔离与资源控制。

Docker运行机制解析(图解+秒懂+全面)-mikechen

Linux Namespace 提供了不同的“隔离维度”:

PID Namespace:进程号隔离,每个容器都有自己的 PID 1;

NET Namespace:网络隔离,每个容器有独立网卡、路由表等;

MNT Namespace:挂载点隔离,每个容器有自己看到的文件系统挂载;

UTS Namespace:主机名、域名隔离;

IPC Namespace:进程间通信资源隔离。

Namespace 解决的是“隔离视图”,Cgroups 解决的是“资源配额”:

常见的资源限制:

CPU:限制 CPU 使用比例、绑定某几个核;

内存:限制最大可用内存,超限会触发 OOM;

I/O:限制磁盘读写速率;

PIDs:限制容器内最多能创建多少进程。

借助分层镜像与联合挂载实现高效的镜像管理,并通过按需的运行时(containerd、runc)将用户意图化为内核级进程。

评论交流
    说说你的看法