直接進入主題:
用這個腳本前提是你本地可以拉鏡像倉庫的鏡像,并且在
本地有了,然后將所有的鏡像tag寫在一個文件中,和下面docker_tags.txt 對應,文件叫什么,腳本里對應改什么,給小白說的
#!/bin/bash# 假設 Docker 鏡像標簽存儲在 docker_tags.txt 文件中
TAGS_FILE="docker_tags.txt"
# 輸出目錄
OUTPUT_DIR="docker_images"# 創建輸出目錄,如果不存在
mkdir -p "$OUTPUT_DIR"# 讀取文件中的每一行
while IFS= read -r line; do# 使用正則表達式提取鏡像名和標簽if [[ $line =~ ^([a-zA-Z0-9.-]+/devops/[a-zA-Z0-9-]+):([a-zA-Z0-9-]+)$ ]]; thenimage_name=${BASH_REMATCH[1]}tag=${BASH_REMATCH[2]}# 構建鏡像的完整名稱full_image_name="${image_name}:${tag}"# 輸出文件名output_file="${OUTPUT_DIR}/${image_name//\//_}:${tag}.tar.gz"# 使用 docker save 保存鏡像echo "保存鏡像: $full_image_name 到 $output_file"docker save -o "$output_file" "$full_image_name"fi
done < "$TAGS_FILE"
賦權并執行腳本既可,
這個腳本做了以下幾件事:
讀取 docker_tags.txt 文件中的每一行。 使用正則表達式提取 Docker 鏡像的名稱和標簽。
構建鏡像的完整名稱(包括倉庫地址、鏡像名和標簽)。 為每個鏡像生成一個唯一的輸出文件名,避免文件名沖突。 使用 docker save
命令將每個鏡像保存為 .tar.gz 格式的文件到指定的輸出目錄中。 確保在運行此腳本之前,你已經登錄了 Docker
倉庫,并且有權限拉取這些鏡像。如果鏡像存儲在私有倉庫中,可能需要使用 docker login 命令登錄到相應的 Docker
倉庫。同時,確保你的 Docker 守護進程正在運行,并且有足夠的磁盤空間來存儲這些鏡像文件。