Docker的底层原理及分析

 更新时间:2025年09月28日 09:18:36   作者:三傻317  
Docker通过命名空间实现进程、网络等隔离,利用Cgroups控制资源,联合文件系统分层存储并支持数据持久化,数据卷技术确保容器数据不受生命周期影响

Docker底层原理

docker实际上类似于一种“进程隔离技术”,利用Linux系统的一些特性功能,将不同容器隔离开来,使其不受外界的影响。

docker使用的Linux特性功能主要有:

1、命名空间(Namespace):把不同容器的进程、网络、文件系统隔离开来

2、控制组(Cgroups):限制容器使用CPU、内存等资源

3、联合文件系统(UnionFS):支持镜像的分层构建

一、命名空间

命名空间可以将全局资源分为若干块,命名空间内部的进程无法看到其他命名空间的进程,利用这一特点,就可以做到容器的隔离。

命名空间有很多类型,docker主要使用的如下:

  • 1、PID命名空间:该命名空间的第一个进程的PID为1,其他的进程都挂在这个第一个进程下面,这样容器内部就无法看到宿主机进程
  • 2、NET命名空间:控制网络资源,每个容器都可以有独立的IP、路由表、端口号,然后由宿主机通过虚拟网卡把容器网络连到外面。值得注意的是,docker本身并没有硬件或者模拟硬件,docker与宿主机共用一个内核(特别地,docker容器中的网络协议栈是独立的,但是最终走宿主机的内核TCP/IP协议栈,网络并非完全共用)
  • 3、IPC命名空间:控制进程间通信,如信号量等,以防与宿主机的IPC冲突
  • 4、UTS命名空间:控制主机名和域名,使每个容器都有自己的hostname
  • 5、MNT命名空间:控制系统挂载点,容器内部能看到的根目录/实际上是宿主机的某个子目录
  • 6、USER命名空间:控制用户和权限,容器内的root用户可以映射为宿主机的普通用户

二、控制组

为了防止被隔离的容器吃光宿主机的资源,docker还利用了Linux提供的Cgroups来进行资源控制,如CPU,内存,磁盘I/O,网络等资源。

Cgroups实际上是一颗资源管理的层级树,每个Cgroup节点都能设置资源限制,进程加入某个Cgroup,就必须遵守对应的限制。

三、联合文件系统

UnionFSUnion File System,联合文件系统)是一种分层的文件系统。

它的特点是:

  • 1、可以把多个目录(层)“联合”挂载在一起,对外呈现成一个目录。
  • 2、上层可以覆盖下层的文件(像透明胶片叠加)。
  • 3、支持写时复制(Copy-On-WriteCOW)。

为了保证docker拉取后镜像干净不被修改,镜像被拉取下来都是只读的层,运行容器时,会在镜像的最上层加上一层可写层,由于上层可以覆盖下层的特性,修改上层文件就能达到修改容器运行逻辑的目的,同时,保证了这个镜像内部不被修改;容器删除后,可写层会消失,镜像层保持不变 。

当需要修改可写层时,将需要修改的对应数据找到并复制到可写层,再进行修改,这就是写时复制。

四、数据卷挂载

通过学习联合文件系统我们知道,容器内部的文件系统是独立的,也是一次性的,每次容器重启后,原有的数据就会消失,对于需要数据持久化的程序,就需要使用数据卷技术。

数据卷实际上是容器与宿主机之间共享的一块目录/文件,它不受容器的生命周期影响,因此可以被用来持久化数据

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker教程之dockerfile构建centos镜像

    Docker教程之dockerfile构建centos镜像

    这篇文章主要介绍了Docker教程之dockerfile构建centos镜像的相关资料,需要的朋友可以参考下
    2022-11-11
  • docker网络双向连接详解

    docker网络双向连接详解

    在本篇文章里小编给大家分享的是一篇关于docker网络双向连接知识点详解内容,有兴趣朋友们可以参考学习下。
    2020-01-01
  • docker环境中websocket 通过nginx代理不通解决方案

    docker环境中websocket 通过nginx代理不通解决方案

    这篇文章主要介绍了docker环境中websocket 通过nginx代理不通解决方案,下面是一些可能会导致 WebSocket 代理失败的问题以及相应的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Docker 常用命令详细整理

    Docker 常用命令详细整理

    这篇文章主要介绍了Docker 常用命令详细整理的相关资料,需要的朋友可以参考下
    2017-05-05
  • Docker-compose多服务使用详解

    Docker-compose多服务使用详解

    文章概述了部署多服务的流程:创建文件夹、上传并解压文件,删除旧容器,修正文件名,添加执行权限后运行脚本,最终启动多个服务
    2025-08-08
  • Docker中部署flink集群的两种方式

    Docker中部署flink集群的两种方式

    这篇文章主要介绍了Docker中部署flink集群的两种方式,本文将通过 2 种方式在 docker 中部署 flink standalone 集群,集群中共有 4 个节点,分别是 1 个 jobManager 节点和 3 个 taskManager 节点,需要的朋友可以参考下
    2024-02-02
  • CentOS7上安装Docker的详细步骤

    CentOS7上安装Docker的详细步骤

    Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单,容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止,下面这篇文章主要给大家介绍了关于CentOS7上安装Docker的详细步骤,需要的朋友可以参考下
    2022-01-01
  • 解决docker不加载 /etc/docker/daemon.json文件的问题小结

    解决docker不加载 /etc/docker/daemon.json文件的问题小结

    在Ubuntu 24.04 LTS Server上安装Docker后,发现镜像不保存且配置文件路径不正确,通过检查发现Docker服务启动时加载了非预期的配置文件,最终通过修改服务配置文件解决了问题,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • 修改Docker容器内文件的三种实现方式

    修改Docker容器内文件的三种实现方式

    这篇文章主要介绍了修改Docker容器内文件的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • docker项目部署的教程(Vue+Spingboot)

    docker项目部署的教程(Vue+Spingboot)

    这篇文章主要介绍了docker项目部署的教程(Vue+Spingboot),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04

最新评论