Docker
Docker容器化作为一种轻量级的虚拟化技术,其核心思想是将应用程序及其所有依赖项打包在一起,形成一个可移植的单元。
Docker 就像软件交付的集装箱:
- 打包应用程序及其依赖项;
- 提供标准化的格式和运行环境;
- 实现应用程序之间的隔离;
- 使得应用程序可以在不同的环境中轻松部署、和运行;
Docker架构
Docker 采用典型的 C/S 架构(Client/Server),如下图所示:
主要由以下 5 大核心组件组成:
1.Docker Client(客户端)
角色: 用户与 Docker 进行交互的工具。
功能: 提供命令行接口 (docker
命令) 或其他工具,允许用户发送指令给 Docker Daemon,例如构建、拉取、运行、停止容器等。
特点: 轻量级,只负责发送请求,实际操作由 Docker Daemon 执行。可以与本地或远程的 Docker Daemon 通信。
2. Docker Daemon(守护进程)
角色: Docker 架构中的服务器端组件。
功能: 在宿主机后台运行,接收并执行来自 Docker Client 的请求。
负责管理 Docker 对象(镜像、容器、网络、卷),与操作系统内核交互(利用 Namespace 和 Cgroups 实现隔离和资源管理)。
特点: 是 Docker 的核心,执行所有容器化操作。
3. Docker Image(镜像)
角色: 创建 Docker 容器的模板或蓝图。
功能: 包含运行应用程序所需的所有内容(代码、运行时、库、环境变量、配置文件等)。
特点: 只读,分层存储,轻量级,可用于创建多个相同的容器。
4. Docker Container(容器)
角色: Docker 镜像的运行实例。
功能: 提供一个隔离的运行环境,运行应用程序。
特点: 基于镜像创建,可写层,隔离性(通过 Namespace),资源限制(通过 Cgroups),生命周期短暂。
5. Docker Registry(镜像仓库)
角色: 存储和分发 Docker 镜像的服务。
功能: 允许用户上传(push)和下载(pull)Docker 镜像。
特点: 可以是公共的(如 Docker Hub)或私有的。是 Docker 镜像共享和协作的关键。
希望这些简洁的介绍能够帮助您快速了解 Docker 的核心组成部分。
Docker原理
Docker 容器,主要是通过 Linux 提供的三大核心机制实现:
1.Namespace:实现资源隔离
Namespace是Linux内核提供的资源隔离机制,为容器创建独立的系统资源视图,包括:
-
PID Namespace:隔离进程ID,容器内进程只能看到本容器进程。
-
Network Namespace:隔离网络栈,容器拥有独立的网络接口和IP。
-
Mount Namespace:隔离文件系统挂载点,容器有独立文件系统视图。
-
User Namespace:隔离用户和组ID,提升安全性。
-
IPC、UTS等 Namespace:隔离进程间通信、主机名等资源。
通过Namespace,Docker容器实现进程、网络、文件系统等多维度的隔离,保证容器间互不干扰7。
2.Cgroups:资源限制与配额
Cgroups是Linux内核的资源管理机制,用于限制和监控容器的资源使用,包括CPU、内存、磁盘I/O和网络带宽。
它保证容器不会超出分配资源,防止资源争抢和系统过载。
Cgroups支持资源优先级管理和统计监控,是Docker实现资源控制的基础7。
3.UnionFS:镜像的分层文件系统
UnionFS(联合文件系统)允许将多个只读镜像层叠加,形成一个统一的文件系统视图。
每个镜像层存储相对于上一层的增量变化,支持镜像层的共享和复用。
容器启动时,在镜像层之上添加可写层,实现写时复制(Copy-on-Write),保证镜像层只读且容器的文件变更隔离。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》