feat: 增强Docker构建系统,支持多架构构建
- 为build-docker.sh添加架构特定构建支持 (amd64/arm64) - 始终使用Docker Buildx确保跨平台构建的一致性 - 添加构建缓存支持,使用.buildx-cache目录 - 更新Dockerfile使用平台感知基础镜像 (FROM --platform=$TARGETPLATFORM) - 改进push-docker.sh以支持架构特定标签 - 为构建脚本添加帮助选项 (-h) - 使用更严格的错误处理 (set -euo pipefail) - 更新.gitignore排除构建缓存 现在支持构建: - Apple Silicon本地开发 (arm64) - Linux服务器部署 (amd64) - 从任意机器进行跨平台构建
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# 推送 Docker 镜像到私有仓库脚本
|
||||
|
||||
set -e
|
||||
set -euo pipefail
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
@@ -22,8 +22,9 @@ echo -e "${GREEN}=== 推送 PeiPei 后端镜像到私有仓库 ===${NC}"
|
||||
TIMESTAMP=$(TZ='Asia/Shanghai' date +"%Y-%m-%d-%Hh-%Mm")
|
||||
echo -e "${YELLOW}推送时间戳 (UTC+8): ${TIMESTAMP}${NC}"
|
||||
|
||||
# 本地镜像名称
|
||||
# 本地镜像名称 (始终推送 amd64 版本到服务器)
|
||||
LOCAL_IMAGE="peipei-backend"
|
||||
LOCAL_TAG="latest-amd64" # 服务器使用 amd64 架构
|
||||
|
||||
# 远程镜像名称和标签
|
||||
REMOTE_IMAGE="${REGISTRY_URL}/${PROJECT_PATH}"
|
||||
@@ -35,9 +36,11 @@ echo -e "${BLUE}项目路径: ${PROJECT_PATH}${NC}"
|
||||
echo -e "${BLUE}远程镜像: ${REMOTE_IMAGE}${NC}"
|
||||
|
||||
# 检查本地镜像是否存在
|
||||
if ! docker images | grep -q "${LOCAL_IMAGE}"; then
|
||||
echo -e "${RED}错误: 本地镜像 ${LOCAL_IMAGE} 不存在${NC}"
|
||||
echo -e "${YELLOW}请先运行: ./build-docker.sh${NC}"
|
||||
if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${LOCAL_IMAGE}:${LOCAL_TAG}$"; then
|
||||
echo -e "${RED}错误: 本地镜像 ${LOCAL_IMAGE}:${LOCAL_TAG} 不存在${NC}"
|
||||
echo -e "${YELLOW}请先运行: ./build-docker.sh amd64${NC}"
|
||||
echo -e "${YELLOW}当前可用的镜像:${NC}"
|
||||
docker images --format "table {{.Repository}}\t{{.Tag}}" | grep "^${LOCAL_IMAGE}\s"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -53,12 +56,12 @@ fi
|
||||
echo -e "${GREEN}✅ 登录成功!${NC}"
|
||||
|
||||
# 标记镜像 - 版本标签
|
||||
echo -e "${GREEN}标记镜像: ${LOCAL_IMAGE}:latest -> ${REMOTE_IMAGE}:${VERSION_TAG}${NC}"
|
||||
docker tag "${LOCAL_IMAGE}:latest" "${REMOTE_IMAGE}:${VERSION_TAG}"
|
||||
echo -e "${GREEN}标记镜像: ${LOCAL_IMAGE}:${LOCAL_TAG} -> ${REMOTE_IMAGE}:${VERSION_TAG}${NC}"
|
||||
docker tag "${LOCAL_IMAGE}:${LOCAL_TAG}" "${REMOTE_IMAGE}:${VERSION_TAG}"
|
||||
|
||||
# 标记镜像 - latest 标签
|
||||
echo -e "${GREEN}标记镜像: ${LOCAL_IMAGE}:latest -> ${REMOTE_IMAGE}:${LATEST_TAG}${NC}"
|
||||
docker tag "${LOCAL_IMAGE}:latest" "${REMOTE_IMAGE}:${LATEST_TAG}"
|
||||
echo -e "${GREEN}标记镜像: ${LOCAL_IMAGE}:${LOCAL_TAG} -> ${REMOTE_IMAGE}:${LATEST_TAG}${NC}"
|
||||
docker tag "${LOCAL_IMAGE}:${LOCAL_TAG}" "${REMOTE_IMAGE}:${LATEST_TAG}"
|
||||
|
||||
# 推送版本标签
|
||||
echo -e "${GREEN}推送版本标签镜像...${NC}"
|
||||
@@ -92,6 +95,8 @@ echo -e " docker pull ${REMOTE_IMAGE}:${LATEST_TAG}"
|
||||
echo -e "\n${YELLOW}更新 docker-compose.yml 中的镜像:${NC}"
|
||||
echo -e " image: ${REMOTE_IMAGE}:${VERSION_TAG}"
|
||||
|
||||
echo -e "\n${BLUE}注意: 此脚本推送 amd64 架构镜像到服务器${NC}"
|
||||
|
||||
# 清理本地标记的远程镜像标签 (可选)
|
||||
echo -e "\n${GREEN}清理本地远程标签...${NC}"
|
||||
docker rmi "${REMOTE_IMAGE}:${VERSION_TAG}" "${REMOTE_IMAGE}:${LATEST_TAG}" 2>/dev/null || true
|
||||
|
||||
Reference in New Issue
Block a user