Docker镜像远程(离线)迁移实践
更新时间:2026年03月16日 16:50:11 作者:灰阳阳
本文介绍了如何将本地服务器的指定镜像打包为tar格式的文件并通过scp命令将其传输到另一台服务器,scp命令依赖于ssh协议,具有加密传输、跨主机通用和易用性等特点,通过编写bash脚本,可以简化传输过程,并且可以避免每次传输时手动输入远程服务器密码
一、大致步骤
- 把本地服务器的指定镜像打包为tar格式的文件
- 把tar格式文件通过scp命令(linux自带)拷贝到另一台服务器
- 通过ssh远程控制服务器加载tar文件为镜像
二、涉及工具:scp命令
命令介绍
SCP(Secure Copy ),是linux/unix系统下,基于ssh协议协议的文件加密传输命令。
他有一下特点:
- 安全加密:依赖ssh协议(默认22端口),全过程加密(先非对称+对称加密)
- 跨主机通用:本地->远程 远程->本地 远程->远程
- 易用性:linux自带的命令,不用安装默认工具,且大部分服务器防火墙默认允许scp文件传输,不需要额外配置防火墙
命令语法
scp [可选参数] 要传输的本地文件/目录 远程用户@远程IP:远程目标路径
- 可选参数:-r可以递归传输文件
- 远程用户:一般默认
root,因为只有root才有最高权限 - 远程IP:服务器的IP地址
- 远程目标路径:目标服务器要下载该文件的文件夹路径
三、实操
编写bash脚本
这里可以不用脚本写,按照命令一步步来也行,不过为了更好的演示步骤,俺在这里就通过脚本的方式呈现给大家:
#!/bin/bash
# 脚本名称:transfer-docker-image.sh
#配置信息
REMOTE_USER="root" #远程服务器用户名
REMOTE_IP="113.44.150.39" #远程服务器IP
REMOTE_PATH="/root/remote_scp" #远程服务器的文件夹地址
IMAGE_NAME="depoy-app:latest" #要传输的镜像
TAR_FILE="depoy-app.tar" # 要打包成的tar文件
echo "=== Docker镜像传输开始 ==="
# 1. 保存镜像
echo "1. 保存镜像到本地文件..."
docker save -o "$TAR_FILE" "$IMAGE_NAME"
echo " 文件大小: $(ls -lh "$TAR_FILE" | awk '{print $5}')"
# 2. 传输文件
echo "2. 传输到远程服务器..."
echo " 目标: $REMOTE_USER@$REMOTE_IP:$REMOTE_PATH/"
scp "$TAR_FILE" "$REMOTE_USER@$REMOTE_IP:$REMOTE_PATH"
# 3.验证传输是否正常
ssh "$REMOTE_USER@$REMOTE_IP" "ls -lh $REMOTE_PATH"
# 4. 在线解压为镜像
ssh "$REMOTE_USER@$REMOTE_IP" "docker load -i $REMOTE_PATH/$TAR_FILE"
注意:
每次执行scp命令都要填写远程服务器密码,这是为了防止中间人攻击(底层ssh协议)
使用演示
1、 执行脚本
chmod +x transfer-docker-image.sh #赋予可执行权限,即使不用bash命令,也可执行bash脚本 bash transfer-docker-image.sh # 通过bash命令执行bash脚本(保险) === Docker镜像传输开始 === 1. 保存镜像到本地文件... 文件大小: 502M 2. 传输到远程服务器... 目标: root@113.44.150.39:/root/remote_scp/ The authenticity of host '113.44.150.39 (113.44.150.39)' can't be established. ED25519 key fingerprint is SHA256:pXZUvDvhC0aVaE3cH8WNtn4LMf9IUk0W7DUsnN/5IMg. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '113.44.150.39' (ED25519) to the list of known hosts. root@113.44.150.39's password: depoy-app.tar 100% 502MB 1.4MB/s 06:07 root@113.44.150.39's password: total 502M -rw------- 1 root root 502M Jan 31 16:21 depoy-app.tar root@113.44.150.39's password: Loaded image: depoy-app:latest
2、查看远程服务器,tar文件和镜像已经回显:
pwd #查看远程服务器地址是否匹配 /root/remote_scp ls -lh total 502M -rw------- 1 root root 502M Jan 31 16:21 depoy-app.tar root@hcss-ecs-d15b:~/remote_scp# docker images REPOSITORY TAG IMAGE ID CREATED SIZE depoy-app latest 911decca4303 4 months ago 522MB
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
简述Docker 安装influxDB分布式时间序列数据库及相关操作
influxDB是一个分布式时间序列数据库。这篇文章主要介绍了Docker 安装influxDB分布式时间序列数据库及相关操作,需要的朋友可以参考下2019-10-10
docker: invalid reference format.问题
这篇文章主要介绍了docker: invalid reference format.问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01


最新评论