Docker 架构与核心概念

Docker 采用「客户端-守护进程」架构:用户在终端敲的 docker 命令只是客户端,真正干活的是后台常驻的守护进程 dockerd。先把这条调用链和五大核心概念对上号,学后面的命令就有坐标了。

客户端-守护进程模型

Docker 架构:客户端-守护进程-运行时 docker CLI 把命令转成 REST API 请求发给 dockerd,dockerd 再交给 containerd 管理容器,最终由 runc 按标准创建进程:

docker 命令(CLI 客户端)
   └─→ dockerd(守护进程,接收请求并调度)
         └─→ containerd(管理容器生命周期)
               └─→ containerd-shim + runc(创建并运行容器进程)

日常见到的 docker ps、docker run 都走这条链;其中 dockerd 只负责接口与调度,容器进程的实际运行由 containerd 层守护。

五大核心概念

概念类比一句话说明
镜像 image模板 / 类只读的打包产物,描述「容器里装了什么」
容器 container运行实例 / 对象镜像运行起来后的进程,可启、停、删
镜像仓库 registry应用商店存放并分发镜像的地方(Docker Hub 等)
数据卷 volume移动硬盘容器外的持久化存储,容器删除后数据仍在
网络 network网线 + 虚拟交换机让容器互通或对外提供服务的通道

镜像与容器的关系最像「类与对象」:一个镜像能 start 出多个互不影响的容器。

一次 docker run 发生了什么

敲下 docker run nginx 后,背后大致经历四步:

  1. CLI 解析参数并调用 REST API,请求 dockerd 运行容器;
  2. dockerd 发现本地没有 nginx 镜像,先去镜像仓库拉取;
  3. containerd 按镜像内容准备好根文件系统并拉起进程;
  4. runc 依据 OCI 规范创建出真正的容器进程,进程存活期间由 containerd 守护。

标准化意义:OCI 与 runc

OCI(Open Container Initiative)是开放容器标准组织,它定义了「镜像长什么样、容器怎么运行」的公开规范;runc 是符合该规范的默认容器运行时。正因为接口标准化,Docker 镜像也能被其他符合 OCI 的运行时(containerd、podman 等)直接使用。

小结

docker 命令只是客户端,真正干活的是 dockerd → containerd → runc 这条调用链;镜像、容器、仓库、卷、网络五大概念是所有命令的操作对象,先在脑中建立这张图,再往下逐章掌握具体命令。

笔记加载中…