Docker核心原理详解(图文全面总结)

Docker核心原理

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

相较于传统的虚拟机,Docker 容器共享宿主机的内核,资源消耗更少,启动速度更快。

Docker 将应用程序及其所有依赖(库、系统工具、运行时环境等)打包到一个独立的、可执行的单元中,即容器。

Docker核心原理详解(图文全面总结)-mikechen

打包好的容器,可以在任何安装了 Docker 的环境中以相同的方式运行。

无论是开发者的笔记本电脑、测试服务器、还是生产环境的云平台,都保证了运行环境的一致性。

Docker核心原理,主要是基于 Linux 内核的命名空间、Cgroups 和 UnionFS。

 

Linux 内核的命名空间

Linux 命名空间:是 Docker 实现容器隔离的核心技术。

通过为每个容器,创建独立的命名空间,Docker 使得容器拥有了自己的“世界”。

与其他容器和宿主机环境隔离开,从而实现了资源和环境的独立性,提高了安全性并简化了部署。

Docker核心原理详解(图文全面总结)-mikechen

Linux命名空间是 Linux 内核提供的一种强大的隔离机制。

它允许在同一个物理系统上创建多个隔离的运行环境,每个环境都拥有自己独立的系统视图。

比如:提供进程、网络、用户、挂载点等资源的隔离。

使得每个容器拥有独立的视图,保证容器间互不干扰。

例如,网络命名空间隔离了容器的网络接口、和IP地址。

 

Cgroups(控制组)

Cgroups 是 Linux 内核提供的另一种关键特性,用于限制、控制和隔离进程组(process groups)的资源使用。

与 Namespaces 提供的隔离不同,Cgroups 主要关注的是资源的管理和限制

Docker核心原理详解(图文全面总结)-mikechen

常见的限制策略,包含:

 

  • cpu: 控制 CPU 时间片的分配。
  • cpuacct: 统计 CPU 使用情况。
  • memory: 控制内存的使用,包括内存限制、交换空间限制等。
  • blkio: 控制块设备 (磁盘 I/O) 的访问。
  • net_clsnet_prio: 控制网络流量的分类和优先级。
  • devices: 控制设备文件的访问权限。
  • freezer: 可以挂起和恢复 Cgroup 中的进程。

Docker 与 Cgroups: 当使用 docker run 命令,并指定资源限制选项 (例如 -m 指定内存限制,-c 指定 CPU 权重) 时。

Docker Daemon 会配置相应的 Cgroup 子系统,将容器内的进程放入一个特定的 Cgroup 中,并设置相应的资源限制。

比如:

docker run -it --memory="256m" alpine sh

通过上面命令,可以限制内存运行容器。

 

 

UnionFS(联合文件系统)

UnionFS(联合文件系统) 是一种支持将多个文件系统“叠加挂载”的文件系统,它是 Docker 镜像与容器文件系统的核心。

Docker 镜像由多个层组成,每一层都是只读的,而容器运行时会添加一个 可写层(容器层):

Docker核心原理详解(图文全面总结)-mikechen

Docker镜像采用分层存储,每一层都是只读的,容器启动时在镜像顶层添加一个可写层。

Docker 镜像是由多个只读层 (layers) 组成的,Dockerfile 中的每一条指令通常会创建一个新的镜像层。

这些层是增量式的,意味着每一层只包含相对于上一层的修改。

总之,Docker利用了 Linux 内核提供的 命名空间 (Namespaces) ,实现了资源和环境的隔离。

利用 Cgroups (控制组) 实现了资源管理和限制,以及利用 UnionFS (联合文件系统) 实现了镜像的分层存储和高效管理。

这三大核心技术相互配合,共同构成了 Docker 强大功能的基础。

mikechen

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

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

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

评论交流
    说说你的看法