云计算百科
云计算领域专业知识百科平台

一条Shell命令实现docker镜像服务器间快速转移

文章目录

  • 一,概述
  • 二,说明
    • 1, pigz
    • 2, pv
    • 3,管道命令
  • 三,辅助脚本
  • 四,运行效果

一,概述

docker镜像一个命令转移到指定服务器

相关文章 Docker遍历镜像生成导出镜像命令六法 如何下载Distroless Java镜像 如何下载Distroless Java镜像(续)

样例(192.168.0.1请替换为镜像接受服务器IP值)

#安装工具
yum install -y pigz pv

#默认端口22
docker save redis:alpine|pigz|pv|ssh root@192.168.0.1 'cat|docker load'

#非默认端口22
docker save redis:alpine|pigz|pv|ssh -p 10022 root@192.168.0.1 'cat|docker load'

#多个镜像
docker save redis:alpine hello-world|pigz|pv|ssh root@192.168.0.1 'cat|docker load'

二,说明

1, pigz

pigz命令是Linux系统中用于文件压缩的工具,属于gzip的并行实现,旨在利用多核处理器的优势来加速压缩过程。以下是对pigz命令的详细介绍和一些使用案例。

pigz命令概述

基本功能: pigz(Parallel Implementation of GZip)是一个高效的压缩工具,能够显著提高大文件的压缩速度。 它支持gzip的所有选项和压缩级别,兼容性良好。 主要特点:

多线程支持:pigz可以使用多个处理器核心进行压缩,显著提高速度。 保留原文件:通过-k选项,可以在压缩后保留源文件。 灵活性:支持多种压缩级别,从最快到最慢(-1到-9)。

当然这边也可以使用bzip2,gzip,区别可以自己去研究。

2, pv

pv 命令是一个在 Linux/Unix 系统的实用工具,用于监控数据的流动。pv 命令可以用于计算数据传输的速度,显示进度条以及估算剩余时间等。

3,管道命令

管道命令就是用来连接多条指令的,前一条指令的输出流向会作为后一条指令的操作对象。

管道命令的操作符是:|,它只能处理由前面一条指令传出的正确输出信息,对错误信息是没有直接处理能力的。然后,传递给下一条指令,作为操作对象。

三,辅助脚本

p2p.sh

#!/bin/bash

echo "=== Docker镜像服务器IP配置工具(带超时控制) ==="

# 初始化变量
selected_mirror=""
server_ip="120.55.67.54" # 默认服务器IP地址

# 步骤1:动态获取并显示本地Docker镜像列表
echo ""
echo "=== 当前本地Docker镜像列表(按名称+标签排序) ==="
mirror_list=$(docker images –format '{{.Repository}}:{{.Tag}}' 2>/dev/null | sort)

if [ -z "$mirror_list" ]; then
echo "❌ 未找到任何本地Docker镜像,请先执行 docker pull 拉取镜像!"
exit 1
fi

# 为镜像添加序号并显示
echo "$mirror_list" | nl -w1 -s". "

# 步骤2:用户选择镜像序号
read -p "请输入要选择的镜像对应序号(输入0退出): " mirror_choice

if [ "$mirror_choice" -eq 0 ]; then
echo "已取消操作,退出程序。"
exit 0
fi

# 根据序号选择镜像
selected_mirror=$(echo "$mirror_list" | sed -n "${mirror_choice}p")
if [ -z "$selected_mirror" ]; then
echo "❌ 无效序号,已取消操作。"
exit 1
fi

echo "✅ 已选择镜像:$selected_mirror"

# 步骤3:输入服务器IP地址(否则采用默认值)
echo "请输入服务器IP地址(如:$server_ip)"
read -p "服务器IP地址: " user_input

if [ -n "$user_input" ]; then
server_ip="$user_input"
echo "✅ 已输入服务器IP地址:$server_ip"
else
echo "未输入服务器IP地址,采用默认值:$server_ip"
fi

# 步骤4:字符串拼接并输出结果
echo ""
echo "=== 配置结果输出 ==="
echo "【本地镜像名称】$selected_mirror"
echo "【服务器IP地址】$server_ip"
echo "【生成运行命令】docker save $selected_mirror|pigz|pv|ssh root@$server_ip 'cat|docker load'"
echo "✅ 配置完成,开始执行命令!"
eval "docker save $selected_mirror|pigz|pv|ssh root@$server_ip 'cat|docker load'"

四,运行效果

[root@00fly work]# sh p2p.sh
=== Docker镜像服务器IP配置工具(带超时控制) ===

=== 当前本地Docker镜像列表(按名称+标签排序) ===
1. adoptopenjdk/openjdk8-openj9:alpine-slim
2. eclipse-temurin:8-jre-alpine
3. gcr.io/distroless/java11-debian11:debug
4. gcr.io/distroless/java11-debian11:latest
5. maven:3.9-eclipse-temurin-8
6. nginx:1.31-alpine-slim
7. openjdk:8-jre-alpine
8. tomcat:10.1-jdk17-temurin-jammy
9. tomcat:alpine
请输入要选择的镜像对应序号(输入0退出): 6
✅ 已选择镜像:nginx:1.31-alpine-slim
⏰ 请在10秒内输入服务器IP地址(如:192.168.1.100),超时将采用默认值 192.168.0.1
服务器IP地址: 192.168.1.189
✅ 已输入服务器IP地址:192.168.1.189

=== 配置结果输出 ===
【本地镜像名称】nginx:1.31-alpine-slim
【服务器IP地址】192.168.1.189
【生成运行命令】docker save nginx:1.31-alpine-slim|pigz|pv|ssh root@192.168.1.189 'cat|docker load'
✅ 配置完成!

–over–

赞(0)
未经允许不得转载:网硕互联帮助中心 » 一条Shell命令实现docker镜像服务器间快速转移
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!