Docker是云原生的核心,也是大厂必备技能,下面我就全面来详解Docker核心原理@mikechen
Docker运行原理
Docker是一个用于创建、部署和运行容器化应用的开源平台。
与传统虚拟机相比,Docker通过操作系统层的轻量隔离将应用及其依赖封装为镜像。
从而实现快速启动、资源高效利用和环境一致性。

Docker推动了微服务、持续集成/持续部署(CI/CD)和云原生应用的发展。
降低了开发、测试与生产环境之间的“环境漂移”问题。
Docker架构
Docker的架构,主要由客户端-服务端模式,和若干关键组件构成:

Docker客户端(docker CLI):用户通过命令行与Docker交互,发出构建、运行、管理镜像和容器的请求。
Docker守护进程(dockerd):负责接收客户端请求并执行容器生命周期管理、镜像存取、网络配置与存储管理等任务。
镜像仓库(如Docker Hub):用于存储和分发镜像,支持镜像的拉取与推送。
镜像(Image):只读模板,包含运行容器所需的文件系统层与元数据。镜像由分层(layer)组成,便于复用和增量传输。
容器(Container):镜像的可写运行实例,包含隔离的进程空间、网络和文件系统视图。
Docker核心技术
Docker依赖于操作系统内核,提供的若干关键特性来实现隔离与资源控制:

Namespace(命名空间)。
包括PID、NET、MNT、IPC、UTS和用户命名空间等。
用于隔离进程视图、网络栈、挂载点、进程间通信及主机标识,使得容器拥有独立的运行环境。
cgroups(控制组)
用于限制和监控容器的CPU、内存、IO等资源使用,防止单个容器消耗过多主机资源。
联合文件系统(UnionFS)与镜像分层
通过OverlayFS、AUFS等实现镜像的分层存储与拷贝时写(copy-on-write),提高镜像构建与传输效率。
网络虚拟化:利用桥接(bridge)
覆盖网络(overlay)、端口映射与网络命名空间等机制,提供容器间及容器与外界的网络连接。
容器运行时(container runtime)
如runc,遵循OCI规范,负责基于镜像创建并启动容器进程,设置命名空间与cgroups。
Docker运行流程

Docker运行可以分为镜像构建、镜像分发与容器启动三个阶段:
1.镜像构建
通过Dockerfile指定基础镜像、文件复制和命令执行等步骤。
执行每一层时生成只读层,最终形成分层镜像。
2.镜像分发
构建完成的镜像被推送至镜像仓库,其他主机通过拉取(pull)操作获取所需层,采用分层传输减少带宽与存储开销。
3.容器启动与运行
当用户发出运行命令时,Docker守护进程调用容器运行时(如runc)完成工作。
比如:
在内核中为容器创建并配置命名空间(隔离进程、网络、挂载点等);
为容器设置cgroups以限制资源。
