Docker 入门教程(二):Docker 的基本原理
文章目录
- 🐳 Docker 入门教程(二):Docker 的基本原理
- 1. Docker 架构总览:三大核心角色
- 2. 镜像与容器的关系
- 3. 容器启动流程:`docker run` 背后发生了什么?
🐳 Docker 入门教程(二):Docker 的基本原理
在学习镜像与容器的命令操作之前,我们必须弄清楚:Docker 是如何运作的?容器和镜像到底是什么关系?docker run
背后到底做了什么?
这一节我们通过结构图 + 原理分析,建立起对 Docker 系统性理解的底层认知。
1. Docker 架构总览:三大核心角色
Docker 采用经典的客户端 - 服务端架构(C/S 架构),它主要由以下三部分组成:
1.1 Client(客户端)
客户端就是我们日常使用的命令行工具,例如:
docker build
docker pull
docker run
这些命令本质上不会直接操作容器或镜像,而是通过 HTTP API 请求把意图发送给 Docker 服务端。
1.2 Docker Daemon(服务端)
也称为 dockerd
,是 Docker 的守护进程,负责实际执行一切命令,包括:
- 拉取镜像
- 构建镜像
- 创建 / 启动容器
- 管理网络、挂载、资源等
它同时维护两个最核心的资源:
- Images(镜像):只读模板,用于创建容器
- Containers(容器):基于镜像运行出来的隔离进程
1.3 Registry(镜像仓库)
这是 Docker 镜像的集中分发平台,默认是 Docker Hub,也可以是私有仓库(如 Harbor)。
Docker Daemon 会在执行 docker pull
、docker run
时自动从 Registry 拉取镜像。
图解架构流程
+---------+ HTTP API +-------------------------+
| Client | ─────────────▶──────────▶ | Docker Daemon |
| | | (dockerd) |
| docker | | |
| build | | +------------+ |
| pull | | | Images |◀───────┐
| run | | +------------+ |
+---------+ | | Containers | || +------------+ |+-------------------------+▲│pull/push│+-------------------------------+| Registry || (Docker Hub or custom) |+-------------------------------+
2. 镜像与容器的关系
Docker 中,镜像(Image)和容器(Container)的关系可以从两个角度来类比理解:
类比一:类 vs 实例
-
镜像 就像一个类(Class)
它定义了对象的结构、行为和属性,但不能直接运行。 -
容器 就是类创建出来的实例(Instance)
每个容器基于镜像创建,可以独立运行、修改、销毁,彼此互不影响。
类比二:安装包 vs 软件
-
镜像 像是一个软件安装包,里面包含程序代码和运行环境。它本身是静态的、不能直接运行。
-
容器 就是你在电脑上安装并运行起来的软件,它有自己的配置、运行数据和状态。你可以同时运行多个程序实例,它们都来源于同一个安装包。
3. 容器启动流程:docker run
背后发生了什么?
当你运行:
docker run redis
Docker 表面上只做了一件事:运行了一个 Redis 容器。
但实际上,它在背后做了一系列工作,整个过程可以拆成几个简单的步骤:
第一步:找镜像
Docker 会先检查你本地有没有 redis
镜像。
- 有就直接用
- 没有就从 Docker Hub 下载
第二步:创建容器
基于镜像,Docker 创建一个容器。就像“解压安装包、准备好环境”。
这一步会:准备一个独立的运行环境p;分配一个容器 ID;设置网络和存储
第三步:启动容器
Docker 会执行容器里的默认启动命令(比如 Redis 的服务器进程),让它真正“跑起来”。
此时容器就进入了运行状态(Running)。
第四步:资源隔离 & 控制(Docker 背后自动做的)
虽然我们看不见,但 Docker 还会在后台做几件重要的事:
- 资源隔离:让容器拥有自己独立的文件系统、网络、进程空间等
- 资源限制:防止某个容器用光 CPU 或内存
- 文件系统挂载:用一种叫 Overlay 的方式叠加镜像和容器的文件系统,便于读写分离