Overlay镜像管理的起点是基础镜像(Lowerdir),通常选择官方轻量镜像(如ubuntu:20.04、ubuntu:22.04)。可通过docker pull命令获取:
docker pull ubuntu:20.04
基础镜像作为Overlay文件系统的只读层,后续所有修改将叠加在其上。
Overlay文件系统需要四个核心目录,用于构建分层视图:
/path/to/base1:/path/to/base2);示例命令:
mkdir -p /mnt/overlay/{upper,work,lower,merged}
使用mount命令将目录组合为Overlay文件系统,语法如下:
mount -t overlay overlay -o lowerdir=/path/to/lowerdir,upperdir=/path/to/upperdir,workdir=/path/to/workdir /path/to/merged
示例(挂载基础镜像到/mnt/overlay/merged):
mount -t overlay overlay -o lowerdir=/path/to/ubuntu:20.04,upperdir=/mnt/overlay/upper,workdir=/mnt/overlay/work /mnt/overlay/merged
挂载后,/mnt/overlay/merged将显示基础镜像的内容,所有修改将写入upperdir。
merged目录,执行所需操作(如安装软件、修改配置):chroot /mnt/overlay/merged
apt-get update && apt-get install -y curl
exit
upperdir和lowerdir组合提交为新的镜像(需配合Docker使用):docker commit /mnt/overlay/merged optimized-image
新镜像将包含基础镜像的所有层及upperdir的修改。upperdir数据默认是临时的(容器删除后丢失),需通过Docker卷(Volumes)挂载到宿主机持久化:docker run -d --name my-container -v /host/data:/container/data optimized-image
umount /mnt/overlay/merged
rm -rf /mnt/overlay/{upper,work,merged}
Docker默认使用overlay2存储驱动(Ubuntu推荐),镜像层存储在/var/lib/docker/overlay2/目录下:
/var/lib/docker/overlay2/<layer-id>/root/bin/ls的inode号相同);upperdir(可写层),所有修改存储于此;docker history <image-name>查看镜像的分层历史,或ls /var/lib/docker/overlay2/查看镜像层目录。upperdir或容器数据,防止更新失败导致数据丢失;merged目录执行apt update && apt upgrade;do-release-upgrade升级Ubuntu版本,升级后检查关键服务(如Docker、OverlayFS)是否正常运行。通过以上流程,可在Ubuntu Overlay配置中高效管理镜像,实现分层存储、灵活修改及持久化需求。