如何通过 ssh "rsync" docker 图像到远程主机?

How to "rsync" docker image to remote host over ssh?

在部署 bash 脚本中,我有两个主机:

我需要以最有效的方式(快速、可靠、私密、存储友好)将本地构建的 docker 图像传输到 $REMOTE_HOST。直到今天,我的流媒体脚本中有以下命令:

docker save $IMAGE_NAME :latest | ssh -i $KEY_FILE -C $REMOTE_HOST docker load

这有以下 优点

然而,缺点也摆在棋盘上:当你涉及传输较大的图像时,你不知道操作进度。所以你必须等待未知,但合理的时间,你无法估计。我听说可以使用有点 rsync --progress 命令

来跟踪进度

但是 rsync 似乎可以传输文件,并且不能很好地与我的 ol'UNIX 风格的命令一起使用。当然你可以从一些文件中 docker load,但是如何避免呢?

如何利用管道来保持上述优势? (或者是否有其他特殊工具将构建映像复制到远程 docker 主机,显示进度?)

您可以调用 pv 作为管道的一部分:

docker save :latest | pv [options...] | ssh -i  -C  docker load

pv 的工作方式与 cat 相似,因为它从标准输入读取并写入标准输出。除此之外,就像 documentation 所说的那样,

pv allows a user to see the progress of data through a pipeline, by giving information such as time elapsed, percentage completed (with progress bar), current throughput rate, total data transferred, and ETA.

pv 有许多选项来控制它打印哪种进度信息。您应该阅读文档并选择所需的输出。为了显示完成百分比或 ETA,您可能需要使用 -s 选项提供数据传输的预期大小。