chore: remove unused historic image files

This commit is contained in:
Baohua Yang
2026-02-21 16:43:31 -08:00
parent 79ac9c639a
commit 6aa7a51fef
124 changed files with 1001 additions and 492 deletions

View File

@@ -34,6 +34,7 @@ Docker 的内部架构如同洋葱一样分层,每一层专注解决特定问
#### 2Dockerd (守护进程)
Docker 的大脑
- 监听 API 请求
- 管理 Docker 对象 (镜像容器网络)
- 编排下层组件完成工作
@@ -41,6 +42,7 @@ Docker 的大脑。
#### 3Containerd (高级运行时)
行业标准的容器运行时 (CNCF 毕业项目)
- 管理容器的完整生命周期 (启动停止)
- 镜像拉取与存储
- **不包含**复杂的与容器无关的功能 (如构建API)
@@ -49,6 +51,7 @@ Docker 的大脑。
#### 4Runc (低级运行时)
用于创建和运行容器的 CLI 工具
- 直接与内核交互 (NamespacesCgroups)
- 遵循 OCI (Open Container Initiative) 规范
- **主要职责**根据配置启动一个容器然后退出 (将控制权交给容器进程)
@@ -56,6 +59,7 @@ Docker 的大脑。
#### 5. Shim
每个容器都有一个 shim 进程
- **解耦**允许 dockerd 重启而不影响容器运行
- **保持 IO**维持容器的标准输入输出
- **状态汇报** containerd 汇报容器退出状态
@@ -135,13 +139,15 @@ flowchart TD
### 总结
相关信息如下表
| 组件 | 角色 | 关键职责 |
|------|------|----------|
| **CLI** | 指挥官 | 发送指令展示结果 |
| **Dockerd** | 大管家 | API 接口整体调度 |
| **Containerd** | 经理 | 容器生命周期镜像管理 |
| **Shim** | 监工 | 保持 IO允许无守护进程重启 |
| **Runc** | 工人 | 真正干活创建容器干完就走 |
| **Runc** | 工人 | 真正干活 (创建容器)干完就走 |
### 延伸阅读

View File

@@ -36,7 +36,7 @@ Linux 内核提供了以下几种 NamespaceDocker 容器使用了全部:
| **UTS** | 主机名 | 独立的主机名和域名 |
| **IPC** | 进程间通信 | 独立的信号量消息队列共享内存 |
| **USER** | 用户/ ID | 容器内的 root 可以映射为宿主机的普通用户 |
| **Cgroup** | Cgroup 根目录 | 隔离 cgroup 层级视图Linux 4.6+ |
| **Cgroup** | Cgroup 根目录 | 隔离 cgroup 层级视图 (Linux 4.6+)|
---
@@ -139,6 +139,8 @@ MNT Namespace 负责文件系统挂载点的隔离,确保容器看到独立的
#### chroot 的区别
相关信息如下表
| 特性 | chroot | MNT Namespace |
|------|--------|---------------|
| 安全性 | 可以逃逸 | 更安全 |

View File

@@ -33,17 +33,21 @@ flowchart LR
### cgroups 的历史
相关信息如下表
| 时间 | 事件 |
|------|------|
| 2006 | Google 工程师提出 cgroups 概念 |
| 2008 | Linux 2.6.24 正式支持 cgroups v1 |
| 2016 | Linux 4.5 引入 cgroups v2 |
| 现在 | Docker 默认使用 cgroups v2如系统支持 |
| 现在 | Docker 默认使用 cgroups v2 (如系统支持)|
---
### cgroups 可以限制的资源
相关信息如下表
| 资源类型 | 子系统 | 说明 |
|---------|--------|------|
| **CPU** | `cpu`, `cpuset` | CPU 使用时间和核心分配 |
@@ -78,10 +82,10 @@ $ docker run --memory-reservation 256m myapp
| 参数 | 说明 |
|------|------|
| `-m` / `--memory` | 硬限制超过会 OOM Kill |
| `-m` / `--memory` | 硬限制 (超过会 OOM Kill)|
| `--memory-swap` | 内存 + swap 总限制 |
| `--memory-reservation` | 软限制内存竞争时生效 |
| `--oom-kill-disable` | 禁用 OOM Killer谨慎使用 |
| `--memory-reservation` | 软限制 (内存竞争时生效)|
| `--oom-kill-disable` | 禁用 OOM Killer (谨慎使用)|
#### CPU 限制
@@ -103,9 +107,9 @@ $ docker run --cpu-shares=512 myapp
| 参数 | 说明 |
|------|------|
| `--cpus` | 限制 CPU 核心数 1.5 |
| `--cpus` | 限制 CPU 核心数 ( 1.5)|
| `--cpuset-cpus` | 绑定到特定 CPU 核心 |
| `--cpu-shares` | CPU 时间片权重相对值 |
| `--cpu-shares` | CPU 时间片权重 (相对值)|
| `--cpu-period` / `--cpu-quota` | 精细控制 CPU 配额 |
#### 磁盘 I/O 限制
@@ -207,12 +211,14 @@ $ docker run --rm --cpus=1 stress --cpu 4
### cgroups v1 vs v2
相关信息如下表
| 特性 | cgroups v1 | cgroups v2 |
|------|-----------|-----------|
| 层级结构 | 多层级每个资源单独 | 统一层级 |
| 层级结构 | 多层级 (每个资源单独)| 统一层级 |
| 管理复杂度 | 复杂 | 简化 |
| 资源分配 | 基于层级 | 基于子树 |
| PSI压力监控 | | |
| PSI (压力监控)| | |
| rootless 容器 | 部分支持 | 完整支持 |
#### 概述

View File

@@ -56,6 +56,7 @@ COPY . . # 层4应用代码
#### 3容器启动快
容器启动时不需要复制镜像只需
1. 在镜像层上创建一个薄的可写层
2. 联合挂载所有层
@@ -83,6 +84,7 @@ flowchart LR
```
**流程**
1. 从只读层读取文件
2. 复制到容器的可写层
3. 在可写层中修改
@@ -105,6 +107,8 @@ Docker 可使用多种联合文件系统实现:
#### 各发行版推荐
相关信息如下表
| Linux 发行版 | 推荐存储驱动 |
|-------------|-------------|
| Ubuntu 16.04+ | overlay2 |
@@ -154,6 +158,8 @@ flowchart TD
#### 文件操作行为
相关信息如下表
| 操作 | 行为 |
|------|------|
| **读取** | 从上到下查找第一个匹配的文件 |
@@ -217,12 +223,14 @@ RUN apt-get update && \
#### 2避免在容器中写入大量数据
容器层的写入性能低于直接写入大量数据应使用
- 数据卷 (Volume)
- 绑定挂载 (Bind Mount)
#### 3使用dockerignore
排除不需要的文件可以
- 减小构建上下文
- 避免创建不必要的层

View File

@@ -14,6 +14,7 @@ Docker 容器网络就利用了这项技术。它在本地主机和容器内分
### 创建网络参数
Docker 创建一个容器的时候会执行如下操作
* 创建一对虚拟接口分别放到本地主机和新容器中
* 本地主机一端桥接到默认的 docker0 或指定网桥上并具有一个唯一的名字 veth65f9
* 容器一端放到新容器中并修改名字作为 eth0这个接口只在容器的命名空间可见
@@ -22,6 +23,7 @@ Docker 创建一个容器的时候,会执行如下操作:
完成这些之后容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络
可以在 `docker run` 的时候通过 `--net` 参数来指定容器的网络配置 4 个可选值
* `--net=bridge` 这个是默认值连接到默认的网桥
* `--net=host` 告诉 Docker 不要将容器网络放到隔离的命名空间中即不要容器化容器内的网络此时容器使用本地主机的网络它拥有完全的本地主机接口访问权限容器进程可以跟主机其它 root 进程一样可以打开低范围的端口可以访问本地网络服务比如 D-bus还可以让容器做一些影响整个主机系统的事情比如重启主机因此使用这个选项的时候要非常小心如果进一步的使用 `--privileged=true`容器会被允许直接配置主机的网络堆栈
* `--net=container:NAME_or_ID` Docker 将新建容器的进程放到一个已存在容器的网络栈中新容器进程有自己的文件系统进程列表和资源限制但会和已存在的容器共享 IP 地址和端口等网络资源两者进程可以直接通过 `lo` 环回接口通信

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -1,5 +1,7 @@
## 本章小结
相关信息如下表
| Namespace | 隔离内容 | 一句话说明 |
|-----------|---------|-----------|
| PID | 进程 ID | 容器有自己的进程树 |