#!/usr/bin/env sh # 构建 dev 镜像:默认多平台(amd64/arm64)并推送,PUSH=0 时按本机架构构建并加载到本地 # # 用法: # sh deploy/docker/build-dev.sh # 多平台构建并推送 dev 标签 # PUSH=0 sh deploy/docker/build-dev.sh # 本机架构构建 --load,仅本地 # REGISTRY_IMAGE=demo/openteam PLATFORMS=linux/amd64 sh deploy/docker/build-dev.sh set -e cd "$(dirname "$0")/../.." REGISTRY_IMAGE=${REGISTRY_IMAGE:-mirrors2/opencatd-open} PLATFORMS=${PLATFORMS:-linux/amd64,linux/arm64} BUILDER=${BUILDER:-xbuilder} PUSH=${PUSH:-1} DOCKERFILE=${DOCKERFILE:-deploy/docker/Dockerfile} SHORT_SHA=$(git rev-parse --short HEAD 2>/dev/null || echo unknown) DATE_TAG=$(date +%Y%m%d) # 确保 buildx 容器构建器存在(默认 docker driver 不支持多平台) docker buildx inspect "$BUILDER" >/dev/null 2>&1 || docker buildx create --name "$BUILDER" --driver docker-container >/dev/null TAGS="-t $REGISTRY_IMAGE:dev -t $REGISTRY_IMAGE:dev-$SHORT_SHA -t $REGISTRY_IMAGE:dev-$DATE_TAG" if [ "$PUSH" = "1" ]; then echo ">>> 多平台构建并推送: $PLATFORMS" # shellcheck disable=SC2086 docker buildx build \ --builder "$BUILDER" \ --platform "$PLATFORMS" \ $TAGS \ --cache-from type=registry,ref="$REGISTRY_IMAGE:dev" \ --cache-to type=inline \ -f "$DOCKERFILE" \ . --push echo ">>> 已推送: $REGISTRY_IMAGE:dev (dev-$SHORT_SHA, dev-$DATE_TAG)" else HOST_ARCH=$(docker version -f '{{.Server.Arch}}') echo ">>> 本机架构构建并加载: linux/$HOST_ARCH" docker buildx build \ --builder "$BUILDER" \ --platform "linux/$HOST_ARCH" \ $TAGS \ -f "$DOCKERFILE" \ . --load echo ">>> 已加载本地镜像: $REGISTRY_IMAGE:dev (dev-$SHORT_SHA, dev-$DATE_TAG)" fi