Files
common/build_local.sh
T

107 lines
2.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 "$@"