Docker镜像批量管理工具:打包、加载、打Tag与推送脚本
背景
针对公司内网环境,开发了Docker镜像批量管理脚本。
分别用于在外网批量打包镜像,以及在内网服务器上批量加载、tag、push这些镜像,显著提升镜像迁移与管理效率。
脚本功能
- 批量打包镜像:在服务器上将镜像保存为本地tar文件。
tee save.sh <<'EOF' #!/bin/bash set -x # 指定保存镜像的目录 OUTPUT_DIR="./images" mkdir -p "$OUTPUT_DIR" # 获取所有本地镜像列表 IMAGE_LIST=$(docker images --format "{{.Repository}}:{{.Tag}}") # 遍历每个镜像并保存为 tar 文件 for IMAGE in $IMAGE_LIST; do IMAGE_NAME=$(echo "$IMAGE" | sed 's/.*\///' | sed 's/:/-/') IMAGE_TAR="$OUTPUT_DIR/$IMAGE_NAME.tar" echo "Saving $IMAGE to $IMAGE_TAR" docker save -o "$IMAGE_TAR" "$IMAGE" done echo "All images saved to $OUTPUT_DIR" EOF
- 批量加载镜像:在服务器上从本地tar文件恢复Docker镜像。
tee load.sh <<'EOF' #!/bin/bash set -x # 指定包含镜像 tar 包的目录 IMAGES_DIR="./images" # 循环处理目录下的所有 tar 包 for TAR_FILE in ${IMAGES_DIR}/*.tar; do # 输出正在加载的镜像文件 echo "Loading image from: ${TAR_FILE}" # 使用 docker load 加载镜像 docker load -i ${TAR_FILE} # 检查 docker load 的返回状态 if [ $? -eq 0 ]; then echo "Image loaded successfully." else echo "Failed to load image." fi done echo "All images loaded from ${IMAGES_DIR}" EOF
- 批量tag镜像:在服务器上将本地镜像批量打tag。
tee tag.sh <<'EOF' #!/bin/bash set -x # 获取所有harbor镜像列表 IMAGE_LIST=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep "^goharbor") # 循环处理 for IMAGE in ${IMAGE_LIST}; do docker tag $IMAGE "k8s-harbor:30002/${IMAGE}" # 检查 docker load 的返回状态 if [ $? -eq 0 ]; then echo "Image tag successfully." else echo "Failed to tag image." fi done echo "All images tagged" EOF
- 批量推送镜像:在服务器上将本地镜像批量推送到私有仓库。
tee push.sh <<'EOF' #!/bin/bash set -x # 获取所有harbor镜像列表 IMAGE_LIST=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep "^k8s-harbor" |grep "goharbor") # 循环处理 for IMAGE in ${IMAGE_LIST}; do docker push "${IMAGE}" # 检查 docker load 的返回状态 if [ $? -eq 0 ]; then echo "Image ${IMAGE} successfully." else echo "Failed to push ${IMAGE}." fi done echo "All images pushed" EOF
评论区