Docker镜像远程(离线)迁移教程

文章目录

一、大致步骤

  1. 把本地服务器的指定镜像打包为tar格式的文件
  2. 把tar格式文件通过scp命令(linux自带)拷贝到另一台服务器
  3. 通过ssh远程控制服务器加载tar文件为镜像

二、涉及工具:scp命令

命令介绍:

SCP(Secure Copy ),是linux/unix系统下,基于ssh协议协议的文件加密传输命令。

他有一下特点:

  • 安全加密:依赖ssh协议(默认22端口),全过程加密(先非对称+对称加密)
  • 跨主机通用:本地->远程 远程->本地 远程->远程
  • 易用性:linux自带的命令,不用安装默认工具,且大部分服务器防火墙默认允许scp文件传输,不需要额外配置防火墙

命令语法

bash 复制代码
scp [可选参数] 要传输的本地文件/目录 远程用户@远程IP:远程目标路径
  • 可选参数:-r可以递归传输文件
  • 远程用户:一般默认root,因为只有root才有最高权限
  • 远程IP:服务器的IP地址
  • 远程目标路径:目标服务器要下载该文件的文件夹路径

三、实操

编写bash脚本

这里可以不用脚本写,按照命令一步步来也行,不过为了更好的演示步骤,俺在这里就通过脚本的方式呈现给大家:

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、 执行脚本

bash 复制代码
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文件和镜像已经回显:

bash 复制代码
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

相关推荐
名字还没想好☜10 小时前
Docker buildx 多架构镜像实战:一次构建 amd64+arm64,告别 exec format error
运维·docker·eureka·架构·kubernetes
智购无人售货机厂家10 小时前
2026自动售货机软硬件版本管理策略:从版本号规范到兼容性矩阵的工程实践~YH
运维·服务器·人工智能·单片机·嵌入式硬件·线性代数·矩阵
gs8014011 小时前
告别 CI/CD 误伤与红条:Docker 镜像智能清理与优雅防冲突实战
ci/cd·docker·容器
bksczm11 小时前
Linux 五种 I/O 模型与多路复用详解
运维·服务器·网络
wjcroom11 小时前
FileBrowser的docker运行了改变密码长度的做法
运维·docker·容器
IT爱学堂11 小时前
新版Linux零基础入门到高手Rocky版本-替换CentOS(完结)
linux·运维·centos
蒸蒸yyyyzwd12 小时前
cpp选手秋招学习笔记day24-cs144项目总结
运维·服务器·网络
ang78412 小时前
日常高频使用的 Ansible 命令,按使用频率和场景整理。
linux·运维·服务器
赵庆明老师13 小时前
用同一个用户登录宝塔面板的ftp与Linux的sftp
linux·运维·服务器
山君爱摸鱼13 小时前
堡垒机远程服务器故障收集
运维·服务器