#!/bin/bash # Ver: 1.0 by Endial Fang (endial@126.com) # # Docker 镜像构建脚本 - 本地构建逻辑 # 从环境变量获取参数 IMAGE_NAME=${IMAGE_NAME:-"template"} REGISTRY_URL=${REGISTRY_URL:-"swr.cn-north-4.myhuaweicloud.com/colovu/"} APT_SOURCE=${APT_SOURCE:-"aliyun"} LOCAL_URL=${LOCAL_URL:-""} # 根据当前系统架构构建镜像 build() { local TAG="latest" # 获取当前系统的架构 local ARCH=$(uname -m) local PLATFORM="" case "$ARCH" in x86_64) PLATFORM="linux/amd64" ;; aarch64|arm64) PLATFORM="linux/arm64" ;; armv7l) PLATFORM="linux/arm/v7" ;; *) PLATFORM="linux/amd64" # 默认为 amd64 ;; esac echo "Building image ${IMAGE_NAME}:${TAG} (${PLATFORM})" # 构建镜像,不传递APP_VER参数,使用Dockerfile中的默认值 podman build --platform ${PLATFORM} \ --progress plain --force-rm \ --build-arg REGISTRY_URL=${REGISTRY_URL} \ --build-arg APT_SOURCE=${APT_SOURCE} \ --build-arg LOCAL_URL=${LOCAL_URL:-} \ -t ${IMAGE_NAME}:${TAG} \ . || { echo "Error: Image build failed for ${IMAGE_NAME}:${TAG}" exit 1 } echo "Build complete" } # 清理工作空间 clean() { echo "Cleaning workspace..." # 删除所有与 IMAGE_NAME 相关的镜像标签(包括带 localhost 前缀的) podman images --format "{{.Repository}}:{{.Tag}}" | grep -E "^(${IMAGE_NAME}|localhost/${IMAGE_NAME}):" | xargs -r podman rmi -f # 删除所有已退出的容器 podman ps -a --format "{{.ID}}" --filter status=exited | xargs -r podman rm # 删除所有悬空镜像(dangling images) podman images --filter "dangling=true" -q | xargs -r podman rmi -f # 清理构建缓存 podman system prune -f } # 显示使用帮助信息 show_help() { cat << EOF Usage: $0 [COMMAND] Docker 镜像构建和清理脚本 COMMANDS: build 构建镜像,仅生成 latest 标签 clean 清理工作空间,删除相关镜像和无用容器 help 显示此帮助信息 EXAMPLES: $0 build # 构建镜像,仅生成 latest 标签 $0 clean # 清理工作空间 $0 help # 显示帮助信息 DESCRIPTION: 该脚本用于构建镜像,仅生成 latest 标签,包含清理功能。 构建的镜像名称为 ${IMAGE_NAME}。 脚本会根据当前系统架构自动构建对应架构的镜像。 EOF } # 主函数 main() { case "$1" in build) build ;; clean) clean ;; help|-h|--help) show_help ;; *) if [ -z "$1" ]; then show_help else echo "Error: Unknown command '$1'" echo "" show_help exit 1 fi ;; esac } main "$@"