如何通过 ssh "rsync" docker 图像到远程主机?
How to "rsync" docker image to remote host over ssh?
在部署 bash 脚本中,我有两个主机:
localhost
,这是一台机器,通常构建 docker 个图像。$REMOTE_HOST
,据信这是某个生产 Web 服务器。
我需要以最有效的方式(快速、可靠、私密、存储友好)将本地构建的 docker 图像传输到 $REMOTE_HOST
。直到今天,我的流媒体脚本中有以下命令:
docker save $IMAGE_NAME :latest | ssh -i $KEY_FILE -C $REMOTE_HOST docker load
这有以下 优点:
- 利用"compression-on-the-fly"
- 不在源和目标上存储中间文件
- 是否直接传输(图像可能是私有的),这也减少了上传时间并保持“green”,换句话说,更广泛地说。
然而,缺点也摆在棋盘上:当你涉及传输较大的图像时,你不知道操作进度。所以你必须等待未知,但合理的时间,你无法估计。我听说可以使用有点 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
选项提供数据传输的预期大小。