107 lines
2.9 KiB
Bash
Executable File
107 lines
2.9 KiB
Bash
Executable File
#!/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 "$@" |