Docker运行原理详解(图解+秒懂+史上最全)

Docker运行原理

Docker 是一种轻量级容器化技术,允许开发者打包应用及其依赖到一个可移植的容器中,并在不同环境中一致运行。

Docker运行原理详解(图解+秒懂+史上最全)-mikechen

Docker 容器运行时的核心原理,可以从: 架构组成、核心技术 、和 运行流程 三个层面来理解。

 

Docker架构

Docker架构,如下图所示:

Docker运行原理详解(图解+秒懂+史上最全)-mikechen

1. Docker Client(客户端)

与用户交互,如执行 docker rundocker build 等命令。

实际不做执行逻辑,而是将请求发给 Docker Daemon。

2. Docker Daemon(服务端)

是 Docker 的守护进程,运行在后台。

负责构建、运行和管理容器生命周期。

对接 Linux 内核的相关技术(如 namespace、cgroups)。

3. Docker Registry(镜像仓库)

存储镜像(如官方的 Docker Hub、本地 Harbor)。

docker pulldocker push 与之交互。

4. Docker Image & Container

Image(镜像):只读模板,如应用快照。

Container(容器):镜像运行时的实例,有独立环境和进程空间。

 

Docker核心技术

Docker 底层,依赖 Linux 的几个核心特性来实现容器隔离、和资源控制。

Docker运行原理详解(图解+秒懂+史上最全)-mikechen

Linux Namespaces (命名空间):

提供隔离机制,使得每个容器拥有独立的系统视图,包括 PID、网络、挂载点、UTS、IPC 和 User 命名空间。

Linux Cgroups (Control Groups,控制组):

提供资源限制和管理能力,可以限制容器的 CPU、内存、磁盘 I/O 和网络带宽等资源使用。

UnionFS (联合文件系统):

用于构建分层镜像,将多个只读层合并成一个可读写的文件系统,实现镜像的轻量化和高效分发。

容器镜像 (Container Images)

轻量级、可执行的软件包,包含运行应用程序所需的所有内容,例如代码、运行时环境、库、环境变量和配置文件。

容器 (Containers):

镜像的运行时实例,是隔离的进程,拥有自己独立的文件系统、网络和进程空间。

 

Docker运行流程

Docker运行流程,如下:

用户执行 docker run 命令
    ↓
Docker Client 发送请求到 Docker Daemon
    ↓
Docker Daemon 检查镜像是否存在(本地/远程拉取)
    ↓
基于镜像解压生成容器文件系统(利用 UnionFS)
    ↓
设置 namespace 和 cgroups,创建隔离环境
    ↓
初始化网络、挂载卷、设置环境变量等
    ↓
调用 containerd + runc 启动容器进程
    ↓
容器开始运行,PID=1 为主进程

总之,Docker 的运行原理基于 Linux 内核的命名空间、Cgroups 和 UnionFS,结合 containerd 等运行时,提供轻量、高效的容器化解决方案。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

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

评论交流
    说说你的看法