在Ubuntu环境中,OverlayFS是Docker默认的存储驱动之一,用于构建分层镜像。以下是通过OverlayFS添加新镜像(或新层)的具体流程:
首先需要一个基础镜像(如Ubuntu官方镜像),作为OverlayFS的底层(lowerdir)。若未安装Docker,可通过以下命令安装:
sudo apt update
sudo apt install docker.io -y
拉取Ubuntu基础镜像:
docker pull ubuntu:22.04
OverlayFS需要四个核心目录:
示例命令:
mkdir -p /mnt/overlay/{upper,work,lower,merged}
使用mount命令将OverlayFS挂载到merged目录,指定lowerdir(基础镜像)、upperdir(可写层)和workdir:
sudo mount -t overlay overlay -o lowerdir=/mnt/overlay/lower,upperdir=/mnt/overlay/upper,workdir=/mnt/overlay/work /mnt/overlay/merged
注:若基础镜像是Docker镜像,需先将其导出为目录(如
docker save ubuntu:22.04 | tar -C /mnt/overlay/lower -xvf -),或直接使用Docker的镜像层路径(如/var/lib/docker/overlay2/<镜像ID>/diff)。
进入merged目录(用户可见的文件系统),进行修改(如安装软件、复制文件):
sudo chroot /mnt/overlay/merged # 可选:进入chroot环境
apt update && apt install -y curl # 示例:安装curl
echo "Hello from Overlay!" > /tmp/new_file.txt # 示例:创建新文件
exit # 退出chroot
此时,所有修改都会保存在upperdir中(如/mnt/overlay/upper),而lowerdir中的基础镜像保持不变。
将修改后的Overlay层提交为新的Docker镜像:
docker commit /mnt/overlay/merged new-ubuntu-image
提交后,可通过docker images查看新镜像:
docker images
# 输出示例:
# REPOSITORY TAG IMAGE ID CREATED SIZE
# new-ubuntu-image latest abc123def456 5 seconds ago 120MB
完成操作后,卸载OverlayFS并清理临时目录:
sudo umount /mnt/overlay/merged
rm -rf /mnt/overlay/{upper,work,merged}
/var/lib/docker/overlay2)。upperdir和workdir挂载到宿主机的持久化目录(如/data/overlay)。通过以上步骤,即可在Ubuntu环境中通过OverlayFS添加新镜像(或新层),适用于容器化场景的镜像定制与管理。