Docker 默认将数据存储在 /var/lib/docker
目录下(Linux 系统),主要包含以下子目录:
/var/lib/docker/
├── buildkit/ # BuildKit 构建缓存
├── containers/ # 容器运行时数据
├── image/ # 镜像存储
│ ├── overlay2/ # Overlay2 存储驱动数据
│ └── [其他存储驱动]
├── network/ # 网络配置
├── plugins/ # 插件存储
├── runtimes/ # 运行时数据
├── swarm/ # Swarm 集群数据
├── tmp/ # 临时文件
├── trust/ # 信任证书
├── volumes/ # 卷数据
└── [其他文件]
image/overlay2/
layerdb/
: 存储镜像层元数据imagedb/
: 存储镜像元数据distribution/
: 存储从 registry 拉取的镜像摘要信息containers/
config.v2.json
: 容器配置hostname
: 容器主机名hosts
: 容器 hosts 文件resolv.conf
: DNS 配置[container-id]-json.log
: 容器日志volumes/
Containerd 默认数据存储在 /var/lib/containerd
目录下:
/var/lib/containerd/
├── io.containerd.content.v1.content/ # 内容存储
├── io.containerd.metadata.v1.bolt/ # 元数据数据库
├── io.containerd.runtime.v1.linux/ # 运行时数据
├── io.containerd.snapshotter.v1.[snapshotter]/ # 快照存储
│ └── [snapshotter-specific-data]
├── tmp/ # 临时文件
└── [其他文件]
io.containerd.content.v1.content/
io.containerd.metadata.v1.bolt/
meta.db
BoltDB 数据库文件io.containerd.snapshotter.v1.[snapshotter]/
存储驱动:
镜像存储:
容器存储:
内容存储:
快照系统:
元数据存储:
Docker:
# 1. 停止Docker
sudo systemctl stop docker
# 2. 编辑配置文件 /etc/docker/daemon.json
{
"data-root": "/new/path/to/docker"
}
# 3. 复制数据
rsync -a /var/lib/docker/ /new/path/to/docker/
# 4. 启动Docker
sudo systemctl start docker
Containerd:
# 1. 停止containerd
sudo systemctl stop containerd
# 2. 编辑配置文件 /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd]
root = "/new/path/to/containerd"
# 3. 复制数据
rsync -a /var/lib/containerd/ /new/path/to/containerd/
# 4. 启动containerd
sudo systemctl start containerd
Docker:
# 清理无用数据
docker system prune -a -f --volumes
# 查看磁盘使用
docker system df
Containerd:
# 使用crictl清理
crictl rmi --prune
# 或者使用ctr命令
ctr images ls -q | xargs ctr images rm
存储驱动选择:
文件系统:
定期维护:
日志管理:
通过深入了解 Docker 和 Containerd 的存储机制,可以更好地管理容器化环境的存储资源,优化性能并避免存储相关问题。