https://wxyaa.notion.site/58c564120d074fa999aa1bedb0d03463

Docker使用 Google 公司推出的Go 语言进行开发实现,基于 Linux 内核的cgroupnamespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd

Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

Untitled


基础原理

容器则是在镜像的基础上创建的运行实例,提供了一个独立、可移植的运行环境,使得应用程序可以在任何支持 Docker 的平台上运行。

Docker 容器的实现原理,涉及到 Linux 内核的一些特性和容器化技术,主要包括:Linux 命名空间(Namespaces)、Linux 控制组(Cgroups)和联合文件系统(UnionFS)等。

Linux 命名空间(Namespaces)

Linux 命名空间是 Linux 内核提供的一种机制,用于隔离系统资源的视图,如:进程、网络、文件系统等。

常见的 Linux 命名空间:PID 命名空间(PID Namespace)、网络命名空间(Network Namespace)、挂载命名空间(Mount Namespace)等。

Linux 控制组(Cgroups)

Linux 控制组是 Linux 内核提供的一种机制,用于限制和管理系统资源的使用,如 CPU、内存、磁盘 I/O 等。

常见的包括: