Docker是如何工作的?这篇底层原理讲透了!

Docker容器

在容器技术成为云原生基石的今天,Docker 几乎是所有开发者和运维工程师必须掌握的工具。

Docker是如何工作的?这篇底层原理讲透了!-mikechen

Docker 是一个开源的容器化平台,用于构建、部署和运行应用程序的容器。

它通过轻量级虚拟化技术,让开发者可以在任何支持Docker的环境中以一致的方式运行应用。

核心思想是:“一次构建,到处运行”。

 

Docker工作原理

Docker的运行原理,重点围绕镜像 (Images)、容器 (Containers) 和 仓库 (Registries/Repositories) 这三个核心。

如下图所示:

Docker是如何工作的?这篇底层原理讲透了!-mikechen

Docker镜像

Docker镜像是一个轻量级、独立的可执行软件包,包含了运行一个软件所需的所有内容:代码、运行时环境、库、环境变量和配置文件。

你可以把它想象成应用程序及其所有依赖项的一个“静态快照”或者“安装包”。

Docker Image
├── Layer 1:FROM ubuntu
├── Layer 2:RUN apt install nginx
├── Layer 3:COPY index.html /var/www
└── ... 最终构成一个多层镜像

 

Docker容器

容器(Container)是镜像的一个运行实例,相当于“类”的实例对象。

Docker是如何工作的?这篇底层原理讲透了!-mikechen

容器是镜像的可写运行环境,启动时在镜像之上创建一个可写层。

容器内运行的进程拥有独立的命名空间和资源限制,实现进程隔离和资源控制。

容器是动态的,可以启动、停止、删除,其生命周期与其可写层绑定,容器删除时该层也会消失。

 

Docker仓库

仓库(Registry),是存储和管理镜像的地方,类似代码仓库。

用户可以将镜像推送(push)到仓库,也可以从仓库拉取(pull)镜像。

仓库支持公共和私有两种形式,Docker Hub是最大的公共仓库。

Docker是如何工作的?这篇底层原理讲透了!-mikechen

仓库使得镜像可以在不同环境间共享和分发,实现应用的快速部署和版本管理

 

Docker底层技术

Docker的工作原理主要基于Linux内核的三大核心技术:命名空间(Namespaces)、控制组(cgroups)和联合文件系统(UnionFS)。

Docker是如何工作的?这篇底层原理讲透了!-mikechen

1. Namespace:实现资源隔离

Namespace 是 Linux 提供的资源隔离机制,Docker 利用以下几种 Namespace 来实现容器的“虚拟环境”效果:

  • PID Namespace:隔离进程 ID 空间;
  • NET Namespace:隔离网络接口、IP、端口等;
  • IPC Namespace:隔离进程间通信;
  • UTS Namespace:隔离主机名和域名;
  • MNT Namespace:隔离文件系统挂载点;
  • USER Namespace:隔离用户和权限;

通过这些机制,容器像是一个独立的系统,但其实只是主机上的一组被隔离的进程。

2. Cgroups:实现资源限制

Cgroups(控制组)用于限制和统计容器对资源的使用:

  • 限制 CPU、内存、IO、网络带宽
  • 做资源隔离和分配
  • 防止某个容器耗尽系统资源

示例:限制容器最多使用 512MB 内存:

docker run -m 512m nginx

3. UnionFS:实现镜像分层机制

Union 文件系统(如 OverlayFS)支持将多个目录挂载到同一目录,Docker 镜像就构建于此之上。

  • 每一层都是只读的增量文件系统
  • 最上层是可写层(容器运行时)
  • 镜像层复用,实现快速构建与启动

总之,Docker通过Linux内核的命名空间实现了资源隔离,通过Cgroups实现了资源限制,通过联合文件系统实现了高效的镜像管理。

评论交流
    说说你的看法