导入与导出

首先明确的是建议优先使用Docker仓库,特别是对于Docker集群而言 Docker仓库非常重要,但是某些应用场景下比如单机环境下使用docker-compse编排应用,如果没有镜像仓库是不是就不能把docker镜像分发给其它的主机了呢?

答案是否定的,对于这种单机或者小规模环境,我们可以使用 docker savedocker 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 命令
    没有Docker仓库还能分发镜像吗?

  • load命令
    没有Docker仓库还能分发镜像吗?

扩展

结合 ssh 与 pv 命令的话,利用 Linux强大的管道,只用一个命令完成从一个机器将镜像分发到另一台机器。

没有Docker仓库还能分发镜像吗?

注意 pv 命令用于显示进度条,你可能需要单独安装这个命令。