Docker 架构
理解 Docker 的 C/S 架构与工作原理
掌握镜像、容器、仓库三大核心概念
理清组件之间的协作关系
核心讲解
Docker 采用客户端 - 服务端(C/S)架构,客户端发送命令,服务端(守护进程)负责实际执行。
(1)核心组件
Docker Client(客户端) 我们输入的
docker命令就是客户端,负责接收用户指令,发送给 Docker 守护进程。 可以是本地客户端,也可以远程连接服务端。Docker Daemon(守护进程 dockerd) 运行在宿主机后台的服务,是 Docker 的核心,负责管理镜像、容器、网络、存储等所有资源。 接收客户端的命令,执行对应的操作。
Image(镜像) 容器的模板,只读的文件包,包含应用运行需要的所有内容:代码、运行时、库、配置、环境变量等。 类比面向对象:镜像就是「类」。 镜像可以叠加,一层一层的,复用性很高。
Container(容器) 镜像运行后的实例,是镜像的可执行形态。 类比面向对象:容器就是「对象」。 容器可以创建、启动、停止、删除,每个容器互相隔离,有自己的文件系统。
Registry(镜像仓库) 存储和分发镜像的地方,类似代码的 Git 仓库。
公共仓库:Docker Hub(官方最大)、阿里云镜像、网易云镜像
私有仓库:企业自己搭建的 Harbor 等
(2)工作流程
以docker run nginx为例:
客户端输入命令,发送给 dockerd
dockerd 检查本地有没有 nginx 镜像
没有就去配置的仓库拉取镜像
有镜像就创建容器,分配文件系统、网络、启动进程
返回结果给客户端
(3)镜像和容器的关系
一个镜像可以创建无数个容器
容器删除了,镜像还在
镜像只读,容器运行时可以写自己的文件层
操作示例
# 查看本地镜像
docker images
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 查看Docker详细信息
docker info
# 可以看到客户端、服务端版本,镜像数、容器数、存储驱动等
常见误区
Docker 是单个程序:分为客户端和服务端,是两个程序,C/S 架构
镜像和容器分不清:镜像是模板文件,容器是运行的进程,就像程序和进程的区别
仓库就是 Docker Hub:仓库有很多种,可以自己搭私有仓库,不只是官方的
课后练习
画图说明 Docker 的 C/S 架构和核心组件
用自己的话解释镜像和容器的关系
执行 docker info,观察里面的关键信息

