项目中遇到问题,需要把服务用到的100多个镜像保存下来,以备到客户现场安装服务。开始用的方法是把一个个镜像使用docker save指令保存为一个个tar包,这样镜像占用的空间太大,假设一个tar包1G,100个镜像就有100G。
有什么方法减小保存的镜像容量?
docker pull拉取镜像保存到本机使用了覆盖文件系统,若不同镜像包含相同层,docker pull只会保存一次,这样可以大大减小保存到本机的镜像容量。举例: 下图中layer1、layer2被上层app镜像共用,layer1、layer2只会被拉取一次。
docker pull保存的镜像如何直接使用?
docker pull 默认会把镜像数据放到/var/lib/docker目录,保存此目录数据。到客户现场部署时,把此镜像数据导入待部署服务机器,并在安装docker时,把docker数据存储目录指向存放镜像的数据目录。
docker in docker解决兼容性问题
若客户待部署机器安装的docker不能正常读写已保存的镜像目录(即在公司docker pull保存镜像用的docker 版本和待部署机器docker版本不一致)怎么办?若一个机器上已经安装了docker,不能直接修改它的数据存储目录怎么办?
docker in docker可以上场了。
保存镜像时使用docker in docker,在待部署机器运行docker in docker使用保存的镜像,docker in docker 本身也是一个镜像,可以使用不同docker 版本运行,成功解决上面的两个问题。
使用docker pull直接拉取并保存使用到的多个镜像,相比docker save一个个保存单个镜像减小了存储空间。docker in docker 使用保存好的镜像,避免docker 版本不同带来的兼容性问题。