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

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

相关推荐
Lumbrologist10 小时前
【零基础部署】Docker 部署 CrewAI 多 Agent 编排框架保姆级教程
运维·docker·容器
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz11 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
键盘上的猫头鹰14 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
Royzst14 小时前
数据库知识点
数据库
雪的季节15 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
宋浮檀s15 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
yurenpai(27届找实习中)16 小时前
redis_点评(21.好友关注——关注、取关功能实现;共同关注功能实现)
数据库·redis·缓存
Rick199316 小时前
索引的排序和分组
数据库·mysql
爱莉希雅&&&16 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控