以下内容是我对docker容器技术学习过程的总结

1. 生产环境的 Docker 安装过程

生产环境安装 Docker 与开发环境有本质区别,核心原则是:

  • 使用官方稳定源

  • 固定版本(避免自动升级破坏生产)

  • 关闭实验特性

  • 做好数据目录规划

以 Rocky / CentOS / RHEL 为例,标准流程如下:

① 卸载旧版本

dnf remove docker docker-common docker-engine

② 安装依赖

dnf install -y yum-utils device-mapper-persistent-data lvm2

③ 添加官方仓库

yum-config-manager \
  --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo

④ 固定版本安装

dnf install docker-ce-24.0.7 docker-ce-cli-24.0.7 containerd.io

生产环境建议指定版本,不使用 latest。

⑤ 配置 daemon.json

mkdir -p /etc/docker
vim /etc/docker/daemon.json

示例:

{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

⑥ 启动服务

systemctl enable docker
systemctl start docker

生产环境还需考虑:

  • 独立数据盘挂载到 /var/lib/docker

  • SELinux 策略调整

  • 日志轮转

  • 资源限制

2. 容器运行时的简略说明

容器运行时(Container Runtime)是负责:

  • 拉取镜像

  • 创建容器

  • 配置 Namespace

  • 配置 Cgroups

  • 启动进程

Docker 早期内置运行时,现在采用分层架构:

Docker CLI

Docker Engine

containerd

runc

Linux Kernel

核心组件说明:

  • containerd:负责生命周期管理

  • runc:真正创建容器

  • OCI:定义容器运行标准

runc 实际上做的事情就是:

clone() + setns() + cgroup + chroot + exec

容器本质是受限进程。


3. 什么是容器镜像?结构如何?

容器镜像是一个:

只读、分层的文件系统模板

镜像结构:

BootFS
RootFS
 ├── layer1
 ├── layer2
 ├── layer3

镜像的本质是多层只读 Layer 叠加。

每一层:

  • 只读

  • 通过 SHA256 校验

  • 可复用

容器启动时会在最上层增加:

Writable Layer

这就是容器的“读写层”。


4. 企业选择容器技术的理由

① 环境一致性

解决“在我机器上能运行”的问题。

② 资源利用率高

相比虚拟机:

  • 无需完整 Guest OS

  • 启动时间毫秒级

③ 易于扩缩容

结合 Kubernetes 可实现自动扩缩。

④ 持续集成友好

CI/CD 天然适配容器。

⑤ 微服务架构支持

服务拆分、独立部署。


5. UnionFS 实现原理完整说明

UnionFS 是联合文件系统。

核心思想:

多个目录合并为一个统一视图

关键机制

① 分层叠加
lowerdir = 只读层
upperdir = 可写层
merged   = 挂载点

② Copy-on-Write

当容器修改文件:

  1. 文件在 lower 层存在

  2. 先复制到 upper

  3. 修改 upper 中副本

这叫 CoW。

③ Whiteout 机制

删除文件不会删除 lower 文件。

而是在 upper 中创建:

.wh.filename

表示“隐藏该文件”。


6. Docker、Overlay2、UnionFS 的关系

  • Docker 是容器平台

  • Overlay2 是存储驱动

  • UnionFS 是概念

关系如下:

Docker
↓ 使用
Overlay2
↓ 实现
UnionFS 思想

Overlay2 是 Linux 内核实现的一种 UnionFS。

Docker 默认使用 overlay2。

更多推荐