选对overlay2存储驱动、精简镜像体积、合理挂载命名卷,可显著提升容器启动速度与I/O性能,并节省超一半磁盘空间;overlay2为默认推荐驱动,多阶段构建和Alpine基础镜像可大幅减小镜像体积,命名卷配合nocopy选项优化数据库等高频IO场景。

直接改存储驱动、精简镜像、挂对数据卷,这三步做完,容器启动变快、读写不卡顿、磁盘空间也省了一半以上。
选对存储驱动:overlay2 是当前最稳最快的默认选项
Docker 默认用 overlay2,它比 devicemapper 或 aufs 更轻、更少锁竞争、回收空间也更及时。如果你的 docker info 显示不是 overlay2,就得手动切:
- 确认内核支持:
grep overlay /proc/filesystems,有输出才可用 - 编辑
/etc/docker/daemon.json,加入:{"storage-driver": "overlay2"} - 重启 Docker:
sudo systemctl restart docker
别强行换 btrfs 或 zfs——它们功能强但运维成本高,普通业务用 overlay2 就够了。
压缩镜像体积:从构建源头减负
镜像大 = 拉取慢 + 启动慢 + 占空间多。重点不在删文件,而在构建逻辑本身:
- 用多阶段构建:编译和运行环境物理隔离,比如 Go 项目只把二进制拷进 Alpine 镜像
- 基础镜像选 slim 或 alpine:
debian:bullseye-slim比debian:latest小 70% 以上 - RUN 指令合并并清理缓存:
RUN apt-get update && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/* - 用
.dockerignore排除node_modules、.git、docs等非必要目录
挂载高频数据到外部:绕过联合文件系统瓶颈
overlay2 对小文件随机写放大明显,数据库日志、缓存目录、上传临时文件这些,千万别留在容器层里:
- 优先用命名卷(named volume):
docker volume create db-data,再-v db-data:/var/lib/postgresql/data - 开发调试时用绑定挂载,加
:delegated(macOS/Linux)或:cached减少同步开销 - 避免
-v /host/path:/container/path直接挂整个项目目录——尤其含大量 node_modules 时,I/O 会拖垮性能 - 数据库类容器启用
--volume xxx:/data:rw,nocopy,跳过初始复制,启动更快
定期清理冗余资源:防止“越用越慢”
没人手动清理的话,dangling 镜像、退出容器、匿名卷会悄悄吃掉几十 GB 空间:
- 一键清理未用资源:
docker system prune -a --volumes(加-f跳过确认) - 查谁占空间最多:
docker system df -v看镜像、容器、卷各自用量 - 单独清理 dangling 镜像:
docker image prune -f - 给关键卷加标签便于识别:
docker volume create --label type=db --label env=prod db-data



















