在Docker中,增量鏡像是指根據上一個鏡像版本生成的差異鏡像。增量鏡像能夠幫助用戶減小鏡像大小,并加快拉取速度。
生成增量鏡像的方法主要有兩種:基于文件系統的增量鏡像和基于二進制的增量鏡像。
基于文件系統的增量鏡像是在原有的鏡像上增量修改文件系統。這種方法有很多優點,比如容易實現、鏡像大小較小等。但是在刪除文件時,由于文件系統的特殊性,這種方法會產生一些副作用,導致增量鏡像不能完整還原原有的鏡像。
FROM ubuntu:18.04
RUN apt update
RUN apt install vim -y
RUN apt clean
CMD /bin/bash
docker build -t ubuntu:18.04-vim .
FROM ubuntu:18.04
RUN apt update
RUN apt install nano -y
RUN apt clean
CMD /bin/bash
docker build -t ubuntu:18.04-nano .
docker save ubuntu:18.04-nano | docker history --no-trunc=true ubuntu:18.04-vim
基于二進制的增量鏡像是在原有的鏡像上增量修改二進制文件。由于二進制文件不依賴文件系統,所以這種方法能夠更好地處理刪除行為。同時,這種方法也支持跨平臺生成增量鏡像。
docker save ubuntu:18.04-vim | xz >ubuntu-18.04-vim.tar.xz
xzcat ubuntu-18.04-vim.tar.xz | docker load
docker tag ubuntu:18.04 ubuntu:18.04.new
docker save ubuntu:18.04.new | xz >ubuntu-18.04.new.tar.xz
docker save ubuntu:18.04 | xz >ubuntu-18.04.tar.xz
echo "ubuntu:18.04.new->ubuntu:18.04" >layers.txt
diff ubuntu-18.04.new.tar.xz ubuntu-18.04.tar.xz | tar -xOzf - $(cat layers.txt) | docker load
docker image inspect ubuntu:18.04 | grep LastTagTime
通過使用增量鏡像,用戶可以更加高效地管理Docker鏡像。同時,Docker增量鏡像的出現也表明了Docker對于鏡像管理的不斷優化和創新。