不使用仓库将 Docker 镜像从一台主机复制到另一台主机的方法
不使用仓库将 Docker 镜像从一台主机复制到另一台主机的方法
技术背景
在实际开发和运维过程中,有时无法使用 Docker 仓库来共享镜像,例如在离线环境或网络受限的情况下。这时就需要将 Docker 镜像从一台主机复制到另一台主机。
实现步骤
基本步骤
保存镜像为 tar 文件:
1
docker save -o <path for generated tar file> <image name>示例:
1
docker save -o c:/myfile.tar centos:16若镜像有仓库前缀,示例如下:
1
docker save -o C:\path\to\file.tar repository/imagename复制镜像文件:使用
cp、scp或rsync(大文件推荐)等工具将 tar 文件复制到新系统。加载镜像到 Docker:
1
docker load -i <path to image tar file>
其他传输方式
通过 SSH 传输并压缩
1 | |
若要查看传输进度,可加入 pv:
1 | |
根据网络情况选择压缩方式
- 网络速度快(上传速度达 10 Mb/s 及以上),使用
gzip:1
docker save <image> | gzip | ssh user@host docker load - 网络较慢(如移动网络),使用
xz:1
docker save <image> | xz | ssh user@host docker load
使用 DOCKER_HOST 变量
1 | |
保存和加载所有镜像
保存所有镜像:
1 | |
加载所有镜像:
1 | |
使用 docker-machine 复制镜像
在 mach1 和 mach2 之间复制镜像:
1 | |
查看进度:
1 | |
从本地 Docker 安装复制到 minikube VM
1 | |
使用 docker-machine scp
- 保存镜像:
1 | |
- 复制镜像:
1 | |
- 加载镜像:
1 | |
核心代码
保存和加载单个镜像
1 | |
保存和加载所有镜像
1 | |
最佳实践
- 对于大文件,使用
rsync进行复制,它能更高效地处理大文件传输。 - 根据网络速度选择合适的压缩方式,以提高传输效率。
- 使用
pv工具查看传输进度,便于监控。
常见问题
- Windows 机器使用 PowerShell 传输问题:在 Windows 机器上使用 PowerShell 执行
docker save <image> | ssh user@host docker load可能会添加额外字符导致失败,可使用 cmd(命令提示符)。 docker-push-ssh使用问题:使用docker-push-ssh时,需要手动将 localhost 添加到 Docker 的insecure_registries配置中。运行工具时若出现错误提示,可参考相关文档进行配置。
不使用仓库将 Docker 镜像从一台主机复制到另一台主机的方法
https://119291.xyz/posts/copy-docker-images-between-hosts-without-repo/