在麒麟服务器 离线导出和加载镜像
通过阅读本篇文章,您将学习到以下内容:
- 离线环境部署:在无网络连接的服务器上部署应用
- 服务器间文件传输:远程文件传输
- 系统运维与排错:通过文件大小、哈希值等确认文件是否损坏
1. 在源服务器上导出镜像
1.1 确认镜像名称和标签
首先查看需要导出的镜像列表:
docker images
假设需要导出的镜像名为 myimage
,标签为 v1
。
1.2 导出镜像为 tar 文件
使用 docker save
命令将镜像保存为 tar 归档文件:
docker save -o myimage.tar myimage:v1
# 或指定路径
docker save -o /path/to/myimage.tar myimage:v1
1.3 计算文件大小和哈希值
计算导出的 myimage.tar
文件的大小和哈希值(以 SHA256 为例):
# 查看文件大小
du -sh myimage.tar
# 计算 SHA256 哈希值
sha256sum myimage.tar
记录下文件大小和哈希值,以便在目标服务器上进行验证。
1.4 传输镜像文件到目标服务器
可以使用 scp
、rsync
或其他文件传输工具:
scp myimage.tar user@目标服务器IP:/path/to/
2. 在目标服务器上加载镜像
2.1 接收并确认文件
检查传输过来的 tar 文件是否存在,并验证文件大小和哈希值:
# 查看文件大小并与源服务器的文件大小对比
du -sh /path/to/myimage.tar
# 计算 SHA256 哈希值并与源服务器的哈希值对比
sha256sum /path/to/myimage.tar
确保目标服务器上的文件大小和哈希值与源服务器上记录的值一致,以确认文件在传输过程中未损坏或被篡改。
2.2 使用 docker load
加载镜像
docker load -i /path/to/myimage.tar
加载成功后,Docker 会输出镜像的 ID 和标签信息。
2.3 验证镜像是否成功加载
docker images
应该能看到 myimage:v1
出现在列表中。
注意事项
- 权限问题:确保执行命令的用户有 Docker 操作权限(通常需要加入
docker
用户组)。 - 镜像大小:大型镜像可能需要更长的传输时间,建议在网络稳定时操作。
- 版本兼容性:尽量确保两台服务器的 Docker 版本一致,避免因版本差异导致镜像不兼容。
- 压缩传输:如果网络带宽有限,可以在导出时直接压缩:
对于压缩后的文件,同样可以计算其大小和哈希值(如# 源服务器导出并压缩 docker save myimage:v1 | gzip > myimage.tar.gz # 目标服务器解压并加载 gunzip -c myimage.tar.gz | docker load
sha256sum myimage.tar.gz
),并在目标服务器上进行验证,以确保文件传输的完整性。
替代方案:使用 Docker Registry
如果经常需要在多台服务器间共享镜像,推荐使用私有镜像仓库(如 Docker Registry 或 Harbor),避免手动传输文件:
# 在源服务器上
docker tag myimage:v1 私有仓库地址:端口/myimage:v1
docker push 私有仓库地址:端口/myimage:v1
# 在目标服务器上
docker pull 私有仓库地址:端口/myimage:v1