Docker 原理与生产实践全解析(从安装到内核机制)①
以下内容是我对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
当容器修改文件:
-
文件在 lower 层存在
-
先复制到 upper
-
修改 upper 中副本
这叫 CoW。
③ Whiteout 机制
删除文件不会删除 lower 文件。
而是在 upper 中创建:
.wh.filename
表示“隐藏该文件”。
6. Docker、Overlay2、UnionFS 的关系
-
Docker 是容器平台
-
Overlay2 是存储驱动
-
UnionFS 是概念
关系如下:
Docker
↓ 使用
Overlay2
↓ 实现
UnionFS 思想
Overlay2 是 Linux 内核实现的一种 UnionFS。
Docker 默认使用 overlay2。
更多推荐
所有评论(0)