Redis 容器底层环境分析
1. 容器基本信息
- 容器 ID: 8809a15ac3b5f053bc21f1e0ef0d0a41144eeac96a6cf4acfad12d780681d2b9
- 名称: /test-redis
- 状态: running
- 镜像: redis
- 主进程 PID: 14441
2. 文件系统(OverlayFS)
OverlayFS 结构:
MergedDir (容器看到的根目录):
/var/lib/docker/overlay2/84ba32b1c4b139f2f3bff53c2f383111a73a52bed03d8e92ec2c243bc3cad352/merged
UpperDir (可写层):
/var/lib/docker/overlay2/84ba32b1c4b139f2f3bff53c2f383111a73a52bed03d8e92ec2c243bc3cad352/diff
LowerDir (只读层,共 9 层):
-
9 个镜像层叠加
-
使用符号链接缩短路径(l/ 目录)
容器根目录内容:
bin, boot, data, dev, etc, home, lib, lib64, media, mnt, opt,
proc, root, run, sbin, srv, sys, tmp, usr, var
关键发现:
- 可写层(diff)目前为空,容器未写入文件
- 所有文件来自镜像的只读层
3. 命名空间(Namespaces)
容器创建了以下命名空间:
| 命名空间 | ID | 作用 |
|---|---|---|
| PID | 4026532295 | 独立进程树 |
| Network | 4026532297 | 独立网络栈 |
| Mount | 4026532292 | 独立文件系统视图 |
| IPC | 4026532294 | 独立 IPC |
| UTS | 4026532293 | 独立主机名 |
| User | 4026531837 | 用户映射 |
| Cgroup | 4026532296 | Cgroup 视图 |
| Time | 4026531834 | 时间命名空间 |
4. 网络环境
网络配置:
- IP 地址: 172.18.0.2/16
- 网关: 172.18.0.1
- MAC 地址: 02:42:ac:12:00:02
- 网络: bridge (默认 Docker 网络)
网络接口:
lo: 127.0.0.1/8 (回环接口)
eth0: 172.18.0.2/16 (容器网卡,连接到 docker0 bridge)
网络命名空间: net:[4026532297]
5. 挂载点
主要挂载:
- OverlayFS 根文件系统 (overlay)
- /proc (proc)
- /dev (tmpfs)
- /sys (sysfs, 只读)
- /dev/shm (tmpfs, 64MB)
- /data (volume, Redis 数据目录)
- /etc/resolv.conf (DNS 配置)
- /etc/hostname (主机名)
- /etc/hosts (主机映射)
6. 进程环境
容器内进程:
- PID 1: /sbin/init (systemd)
- 多个 systemd 服务进程
- 进程树独立于主机
7. Cgroup 配置
Cgroup 路径:
/sys/fs/cgroup/system.slice/docker-8809a15ac3b5f053bc21f1e0ef0d0a41144eeac96a6cf4acfad12d780681d2b9.scope
资源限制:
- 内存: 无限制 (0)
- CPU: 无限制 (0)
- 使用 systemd cgroup 驱动
8. 安全配置
- Privileged: false (非特权模式)
- SecurityOpt: null (使用默认安全配置)
- CapAdd/CapDrop: null (使用默认能力集)
9. 容器配置目录
容器配置存储在:
/var/lib/docker/containers/8809a15ac3b5f053bc21f1e0ef0d0a41144eeac96a6cf4acfad12d780681d2b9/
├── config.v2.json # 容器配置
├── hostname # 主机名
├── hosts # /etc/hosts
├── resolv.conf # DNS 配置
└── shm/ # 共享内存
总结
Docker 为这个 Redis 容器创建了:
- 文件系统:OverlayFS 联合挂载(9 层只读层 + 1 层可写层)
- 命名空间:8 个 Linux 命名空间(PID、Network、Mount、IPC、UTS、User、Cgroup、Time)
- 网络:独立的网络命名空间,veth pair,IP 172.18.0.2
- 进程:独立的进程树,PID 1 为 systemd
- 资源:Cgroup 目录(systemd 驱动)
- 安全:非特权模式,默认能力集
- 存储:1 个数据卷挂载到 /data
这些环境共同构成了一个隔离的容器运行环境。