Redis容器了解Docker底层

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. 挂载点

主要挂载:

  1. OverlayFS 根文件系统 (overlay)
  1. /proc (proc)
  1. /dev (tmpfs)
  1. /sys (sysfs, 只读)
  1. /dev/shm (tmpfs, 64MB)
  1. /data (volume, Redis 数据目录)
  1. /etc/resolv.conf (DNS 配置)
  1. /etc/hostname (主机名)
  1. /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 容器创建了:

  1. 文件系统:OverlayFS 联合挂载(9 层只读层 + 1 层可写层)
  1. 命名空间:8 个 Linux 命名空间(PID、Network、Mount、IPC、UTS、User、Cgroup、Time)
  1. 网络:独立的网络命名空间,veth pair,IP 172.18.0.2
  1. 进程:独立的进程树,PID 1 为 systemd
  1. 资源:Cgroup 目录(systemd 驱动)
  1. 安全:非特权模式,默认能力集
  1. 存储:1 个数据卷挂载到 /data

这些环境共同构成了一个隔离的容器运行环境。

相关推荐
蝎子莱莱爱打怪5 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
倔强的石头_7 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
小p1 天前
docker学习7:docker 容器的通信方式
docker
小p1 天前
docker学习5:提升Dockerfile水平的5个技巧
docker
小p1 天前
docker学习3:docker是怎么实现的?
docker
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
小p3 天前
docker学习: 2. 构建镜像Dockerfile
docker
小p3 天前
docker学习: 1. docker基本使用
docker
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba