docker離線鏡像文件選擇導入腳本方式
更新時間:2025年10月31日 08:53:24 作者:???傀儡師
本文檔提供了一個腳本,用于自動掃描、顯示和導入`/data/k8s-package`目錄下的Docker離線鏡像文件,用戶可以選擇單個或批量導入鏡像,并在每次加載后進行確認,腳本運行后,會顯示加載結(jié)果,并最終列出當前系統(tǒng)中的所有Docker鏡像
docker離線鏡像文件選擇導入腳本
可以讀取 /data/k8s-package 目錄下的離線鏡像文件,讓用戶選擇導入:
#!/bin/bash
# 腳本:離線鏡像加載工具
# 功能:讀取 /data/k8s-package 目錄下的 .tar 鏡像文件,交互式選擇加載
IMAGE_DIR="/data/k8s-package"
# 檢查目錄是否存在
if [ ! -d "$IMAGE_DIR" ]; then
echo "錯誤: 目錄 $IMAGE_DIR 不存在!"
exit 1
fi
# 查找所有的 .tar 鏡像文件
image_files=($(find "$IMAGE_DIR" -name "*.tar" -type f | sort))
# 檢查是否找到鏡像文件
if [ ${#image_files[@]} -eq 0 ]; then
echo "在 $IMAGE_DIR 目錄下沒有找到 .tar 鏡像文件!"
exit 1
fi
echo "=============================================="
echo " 離線鏡像加載工具"
echo "=============================================="
echo "找到 ${#image_files[@]} 個鏡像文件:"
echo ""
# 顯示鏡像文件列表
for i in "${!image_files[@]}"; do
filename=$(basename "${image_files[$i]}")
size=$(du -h "${image_files[$i]}" | cut -f1)
echo " $((i+1)). $filename ($size)"
done
echo ""
echo " q. 退出"
echo " a. 加載所有鏡像"
echo "=============================================="
# 主循環(huán)
while true; do
echo ""
read -p "請選擇要加載的鏡像編號 (1-${#image_files[@]}) 或輸入選項: " choice
case $choice in
[Qq]* )
echo "退出腳本."
break
;;
[Aa] )
echo "開始加載所有鏡像..."
for file in "${image_files[@]}"; do
filename=$(basename "$file")
echo "正在加載: $filename"
if docker load -i "$file"; then
echo "? 成功加載: $filename"
else
echo "? 加載失敗: $filename"
fi
echo "----------------------------------------------"
done
echo "所有鏡像加載完成!"
break
;;
* )
# 檢查輸入是否為數(shù)字且在有效范圍內(nèi)
if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le "${#image_files[@]}" ]; then
index=$((choice-1))
selected_file="${image_files[$index]}"
filename=$(basename "$selected_file")
echo "您選擇了: $filename"
echo "文件路徑: $selected_file"
echo "文件大小: $(du -h "$selected_file" | cut -f1)"
# 確認加載
read -p "確認加載這個鏡像? (y/n): " confirm
if [[ $confirm =~ ^[Yy]$ ]]; then
echo "正在加載: $filename"
if docker load -i "$selected_file"; then
echo "? 成功加載: $filename"
else
echo "? 加載失敗: $filename"
fi
else
echo "取消加載: $filename"
fi
else
echo "無效選擇! 請輸入 1-${#image_files[@]} 的數(shù)字,或輸入 q 退出,a 加載所有鏡像"
fi
;;
esac
done
echo ""
echo "=============================================="
echo "當前系統(tǒng)中的 Docker 鏡像:"
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedSince}}"
echo "=============================================="
保存腳本:
保存腳本到文件
vi /data/k8s-package/load_offline_images.sh
給腳本執(zhí)行權(quán)限
chmod +x /data/k8s-package/load_offline_images.sh
運行腳本:
cd /data/k8s-package ./load_offline_images.sh
腳本功能:
- ? 自動掃描 /data/k8s-package 目錄下的所有 .tar 文件
- ? 顯示文件列表 帶序號和文件大小
- ? 交互式選擇 可以按編號選擇單個鏡像加載
- ? 批量加載 輸入 a 可以一次性加載所有鏡像
- ? 持續(xù)運行 加載完一個鏡像后可以繼續(xù)選擇其他鏡像
- ? 確認機制 加載前會要求確認
- ? 結(jié)果反饋 顯示加載成功或失敗
- ? 退出選項 輸入 q 退出腳本
- ? 最后顯示 加載完成后顯示當前系統(tǒng)中的所有 Docker 鏡像
示例運行效果:
==============================================
離線鏡像加載工具
==============================================
找到 5 個鏡像文件:
1. nginx_20251011144621.tar (215MB)
2. redis_20251011144730.tar (118MB)
3. mysql_20251011144815.tar (444MB)
q. 退出
a. 加載所有鏡像
==============================================
請選擇要加載的鏡像編號 (1-3) 或輸入選項: 1

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker搭建Zookeeper&Kafka集群的實現(xiàn)
這篇文章主要介紹了Docker搭建Zookeeper&Kafka集群的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
解決Docker報錯:“docker build“ requires exactly&nb
這篇文章主要介紹了解決Docker報錯:“docker build“ requires exactly 1 argument.具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12

