首页 / Docker 入门教程 / Docker 核心架构与概念

Docker 入门教程

Docker 核心架构与概念

本教程共 25 篇 · 第 2 篇 · 更新于 2026-07-26 · 约 7 分钟阅读

DockerDocker 入门教程Docker 架构镜像容器仓库namespacescgroups

2. Docker 核心架构与概念

本节目标:看清 Docker 的整体架构,记住镜像、容器、仓库这三大概念,并大致了解底层靠什么实现隔离。学完你心里会有一张 Docker 工作流程的地图。

Docker 是怎么组织的:C/S 架构

Docker 采用客户端-服务端(Client/Server)架构。你敲的每条 docker 命令,并不是自己直接去操作容器,而是先发给一个叫「守护进程(daemon)」的后台服务,由它来真正干活。

这套架构里有三个角色:

  • Docker 客户端(docker):就是你终端里敲的 docker 命令。它负责接收你的指令,转发给守护进程。
  • Docker 守护进程(dockerd):后台运行的服务,是真正干活的。它管理镜像、容器、网络、卷这些对象,监听客户端的 API 请求。
  • REST API:客户端和守护进程之间通信的桥梁,走 Unix 套接字或网络接口。

客户端和守护进程可以在同一台机器上,也可以分开—你完全可以在笔记本上敲命令,去操控一台远程服务器上的 Docker。

Tip

想直接验证这层通信,可以用 curl 去戳一下守护进程的套接字:curl --unix-socket /var/run/docker.sock http://localhost/version,能返回一段 JSON 版本信息,说明守护进程在正常工作。

三个必须记住的核心概念

整个 Docker 体系,说白了就是围绕三个概念转:镜像、容器、仓库。理解了它们之间的关系,Docker 就懂了一大半。

镜像(Image):应用的模板

镜像是只读的模板,里面装着应用运行需要的所有东西—代码、运行时、库、配置。你可以把它理解成一张「装机光盘」或者一份「菜谱」。

镜像有个重要特性:不可变。一旦构建好就不能改,想改只能基于它再做一个新的。它还是分层的,每条构建指令对应一层,层与层可以复用,所以镜像才又小又快。

容器(Container):镜像跑起来的实例

容器是镜像的运行实例。一个镜像可以跑出无数个容器,就像一份菜谱能做出无数盘菜。

容器是可写的—它在镜像只读层之上加一层可读写层,应用在里面的修改只存在于这个容器。容器停了、删了,这层修改就没了(除非你把数据存到数据卷里,后面会讲)。

仓库(Registry):存镜像的地方

仓库用来存和分发镜像。最出名的是 Docker Hub,一个公共镜像市场,上面有数百万个镜像,Ubuntu、Nginx、MySQL 这些官方镜像都能直接拉。

你也可以搭私有仓库(比如 Harbor),放公司内部用的镜像。

概念类比特点
镜像菜谱 / 装机光盘只读、分层、不可变
容器做好的菜 / 装好的系统可写、是运行实例
仓库美食广场 / 应用商店存放和分发镜像

一条命令背后的完整流程

光说概念有点虚,咱们来看一条 docker run 命令背后发生了什么。以 docker run -it ubuntu /bin/bash 为例:

  1. 客户端把命令发给守护进程。
  2. 守护进程发现本地没有 ubuntu 镜像,自动去仓库拉取(相当于执行了 docker pull ubuntu)。
  3. 基于镜像创建一个新容器,并给它分配一层可读写文件系统。
  4. 给容器分配网络接口和 IP,连到默认网络。
  5. 启动容器,执行 /bin/bash,因为带了 -it,你能直接和它交互。

记住这个流程,后面学命令时你就知道每一步对应什么操作了。

底层靠什么实现隔离

容器能「又轻又隔离」,靠的是 Linux 内核的两项技术:命名空间(namespaces)控制组(cgroups)。不用深究,知道它们各管什么就行。

namespaces:负责「看不见」

命名空间给容器做视图隔离。每个容器看到的文件系统、进程、网络、用户,都是被隔离过的,仿佛自己独占一台机器。

Docker 用到的几种命名空间:

  • PID:进程隔离,容器里只能看到自己的进程。
  • NET:网络隔离,容器有独立的网卡、IP、端口。
  • IPC:进程间通信隔离。
  • MNT:文件系统挂载点隔离。
  • UTS:主机名隔离。
  • USER:用户和用户组隔离。

cgroups:负责「限得了」

控制组负责资源限制。它能规定一个容器最多用多少 CPU、内存、磁盘 IO,防止单个容器把宿主机资源吃光。

Warning

Docker 从 v29.0.0 起正式弃用 cgroup v1,全面转向 cgroup v2。如果你在较老的系统上遇到容器启动报错,先确认内核和 systemd 是否支持 cgroup v2。大多数 2021 年后的主流发行版默认都已启用 v2。

Docker Desktop 算什么

如果你在 Mac 或 Windows 上用 Docker,大概率装的是 Docker Desktop。它把守护进程、客户端、Compose、甚至 Kubernetes 打包成一个桌面应用,背后靠一个轻量 Linux 虚拟机来跑真正的 Docker Engine。

对使用者来说,命令完全一样,体验无缝。这也是为什么官方把 Desktop 作为本地开发的首选方式。下一节我们就来讲怎么装它。

小结

这节梳理了 Docker 的骨架:C/S 架构里客户端发指令、守护进程干活;镜像、容器、仓库三个概念贯穿始终;底层靠 namespaces 做隔离、cgroups 做限制。

心里有了这张地图,接下来装好 Docker,我们就能真正上手跑命令了。