没有Docker仓库还能分发镜像吗?
2016-03-08 by dongnan
导入与导出
首先明确的是建议优先使用Docker仓库,特别是对于Docker集群而言 Docker仓库非常重要,但是某些应用场景下比如单机环境下使用docker-compse
编排应用,如果没有镜像仓库是不是就不能把docker镜像分发给其它的主机了呢?
答案是否定的,对于这种单机或者小规模环境,我们可以使用 docker save 与 docker load 命令来完成镜像的分发,甚至通过Linux ssh 与管道技术相结合,可以直接把镜像分发给目标主机。
总而言之当遇到上述环境而且没有镜像仓库时,需要把一台机器上的镜像拷贝到另一台机器,试试 docker save
与 docker load
命令吧。
举个栗子
- HOST A 导出并压缩docker 镜像
docker save centos | gzip > img-centos.tar.gz
scp img-centos.tar.gz root@hostb:/root/
- HOST B 导入镜像
gzip -dc img-centos.tar.gz | docker load
批量操作
如果你需要批量导出/导入镜像,可以结合shell 命令与管道完成。
批量导出
for i in `docker images | awk '/irm/ {print $3}'`;do echo $i ; docker save $i | gzip > ${i}.gz ;sleep 2 ;done
其中awk 匹配镜像名称的关键字,print $3 输出第三个字段也就是镜像ID。
批量导入
for i in `ls`; do echo $i; gzip -dc $i | docker load ; sleep 5;done
命令帮助
- save 命令
- load命令
扩展
结合 ssh 与 pv 命令的话,利用 Linux强大的管道,只用一个命令完成从一个机器将镜像分发到另一台机器。
注意 pv 命令用于显示进度条,你可能需要单独安装这个命令。