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

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

相关推荐
zuoerjinshu43 分钟前
sql实战解析-sum()over(partition by xx order by xx)
数据库·sql
NocoBase2 小时前
【2.0 教程】第 1 章:认识 NocoBase ,5 分钟跑起来
数据库·人工智能·开源·github·无代码
Hoshino.413 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
Lxinccode3 小时前
docker(28) : 别名配置
docker·容器·eureka·docker别名
Oueii5 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
未来龙皇小蓝5 小时前
【MySQL-索引调优】11:Group by相关概念
数据库·mysql·性能优化
2401_831824965 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
学不完的5 小时前
Docker数据卷管理及优化
运维·docker·容器·eureka
njidf6 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
twc8296 小时前
大模型生成 QA Pairs 提升 RAG 应用测试效率的实践
服务器·数据库·人工智能·windows·rag·大模型测试