docker的底层原理二:容器运行时环境

概述:Docker 的容器运行时环境是其核心组成部分,提供了应用程序运行所需的隔离和资源管理。以下是容器运行时环境的一些关键底层原理和组件:

1. 命名空间(Namespaces)

  • Process Namespace:用于隔离进程ID,使容器内的进程拥有独立的PID空间。
  • Network Namespace:创建虚拟网络环境,每个容器有自己的网络设备、IP地址、路由表等。
  • Mount Namespace:为容器提供隔离的文件系统视图,确保容器只能看到和自己相关的文件和目录。
  • User Namespace:隔离用户ID和组ID,在容器内部以非root用户运行程序,提高安全性。
  • IPC Namespace:管理进程间通信(IPC),限制容器内进程只能与同一容器内的其他进程通信。
  • Cgroup Namespace:用于对CPU、内存等资源的配额管理。

2. 控制组(Control groups,cgroups)

  • 资源限制:cgroups 允许对容器可以使用的资源进行限制,比如 CPU 时间片、内存使用量、磁盘 I/O 速率等。
  • 优先级分配:可以通过 cgroups 设置不同容器对资源的优先级,实现服务质量(QoS)管理。
  • 审计:监控容器的资源使用情况,并生成报告。

3. 联合文件系统(Union File System)

  • 镜像层叠:Docker 使用 UnionFS 来存储镜像的层叠结构,每个镜像由多个只读层和一个可写层组成。
  • 数据持久化:容器在可写层中对文件的修改不会影响镜像本身,从而实现了数据的持久化。
  • 空间节省:多个容器可以共享同一份基础镜像层,节省存储空间。

4. 容器运行时(Container Runtime)

  • Docker Engine:最初,Docker 使用自己的运行时来管理和运行容器。
  • Containerd:后来,Docker 分解了运行时,引入了 containerd,它是一个容器管理系统,负责容器的生命周期管理。
  • RunC:是一个轻量级的容器运行时,专注于符合 OCI(Open Container Initiative)规范的容器执行环境。

5. 分离的进程树

  • Init 进程 :每个容器都有一个init进程(如/bin/sh/bin/bash),它是容器内所有进程的父进程。
  • PID 1:容器内的init进程通常被命名为PID 1,负责启动容器内的其他进程。

这些底层技术共同工作,确保了 Docker 容器的隔离性、资源控制和可移植性,使得 Docker 成为轻量级、可移植、一致的容器化平台。

相关推荐
七夜zippoe11 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
金刚猿11 小时前
01_虚拟机中间件部署_root 用户安装 docker 容器,配置非root用户权限
docker·中间件·容器
JH_Kong12 小时前
解决 WSL 中 Docker 权限问题:从踩坑到完整修复
docker·容器
忆~遂愿12 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
Fcy64812 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满12 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠13 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90313 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
陈桴浮海13 小时前
Kustomize实战:从0到1实现K8s多环境配置管理与资源部署
云原生·容器·kubernetes
珠海西格电力科技14 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市