33# ### halt script on error
44set -xe
55
6+ # 1. 克隆代码(保持原逻辑)
67git clone https://github.com/springjk/web-dev-docker.git
78cd web-dev-docker
89
@@ -12,42 +13,56 @@ docker --version
1213echo ' ##### Print environment'
1314env | sort
1415
15-
16- # ### Build the Docker Images
17-
18- echo build version is ${NODE_VERSION}
19-
20-
21- docker build --build-arg NODE_VERSION=${NODE_VERSION} -t webdev .
22- # ####################################
23-
24- # push to docker hub
25- echo " $DOCKER_PASSWORD " | docker login -u " $DOCKER_USERNAME " --password-stdin
26-
27- docker tag webdev:latest ${DOCKER_USERNAME} /webdev:latest
28-
29- docker images
30-
31- docker push ${DOCKER_USERNAME} /webdev
32-
16+ # 2. 定义关键变量(新增:指定需要支持的架构列表,如 ARM64 + x86_64)
17+ TARGET_ARCHITECTURES=" linux/arm64,linux/amd64" # 多架构列表(arm64对应ARM,amd64对应x86_64)
18+ DOCKER_HUB_REPO=" ${DOCKER_USERNAME} /webdev" # Docker Hub 仓库地址
19+ ALIYUN_REPO=" registry.cn-hangzhou.aliyuncs.com/${DOCKER_USERNAME} /webdev" # 阿里云仓库地址
20+ NODE_VERSION=${NODE_VERSION:- " latest" } # 默认Node版本为latest
21+
22+ echo " ##### Build version: ${NODE_VERSION} , Target architectures: ${TARGET_ARCHITECTURES} "
23+
24+ # 3. 配置 Docker Buildx(启用多架构构建能力)
25+ # - 创建构建器实例(若不存在)
26+ # - 启用构建器(切换到多架构构建模式)
27+ docker buildx create --name multiarch-builder --use || true
28+ # 加载 qemu 模拟器(用于跨架构构建,如在x86机器上构建ARM镜像)
29+ docker run --privileged --rm tonistiigi/binfmt --install all
30+
31+ # 4. 多架构构建并推送至 Docker Hub(核心修改:用 buildx build --platform 指定多架构,--push 直接推送)
32+ # 推送 latest 标签(无论 Node 版本是否为 latest,都推送 latest 作为默认标签)
33+ docker buildx build \
34+ --platform " ${TARGET_ARCHITECTURES} " \ # 指定多架构
35+ --build-arg NODE_VERSION=" ${NODE_VERSION} " \ # 传递 Node 版本参数
36+ -t " ${DOCKER_HUB_REPO} :latest" \ # Docker Hub latest 标签
37+ --push . # 直接推送(无需本地 tag,Buildx 会自动处理多架构镜像索引)
38+
39+ # 若 Node 版本不是 latest/NA,额外推送版本标签(如 webdev:20)
3340if [[ ${NODE_VERSION} != " latest" && ${NODE_VERSION} != " NA" ]]; then
34- # push build version
35- docker tag ${DOCKER_USERNAME} /webdev:latest ${DOCKER_USERNAME} /webdev:${NODE_VERSION}
36- docker push ${DOCKER_USERNAME} /webdev:${NODE_VERSION}
41+ docker buildx build \
42+ --platform " ${TARGET_ARCHITECTURES} " \
43+ --build-arg NODE_VERSION=" ${NODE_VERSION} " \
44+ -t " ${DOCKER_HUB_REPO} :${NODE_VERSION} " \ # 版本标签
45+ --push .
3746fi
3847
48+ # 5. 多架构构建并推送至阿里云镜像仓库(逻辑与 Docker Hub 一致)
49+ docker buildx build \
50+ --platform " ${TARGET_ARCHITECTURES} " \
51+ --build-arg NODE_VERSION=" ${NODE_VERSION} " \
52+ -t " ${ALIYUN_REPO} :latest" \
53+ --push .
3954
40- # push to aliyun docker hub
41- echo " $ALIYUN_DOCKER_PASSWORD " | docker login -u " $ALIYUN_DOCKER_USERNAME " --password-stdin registry.cn-hangzhou.aliyuncs.com
42-
43- docker tag webdev:latest registry.cn-hangzhou.aliyuncs.com/${DOCKER_USERNAME} /webdev:latest
44-
45- docker images
55+ if [[ ${NODE_VERSION} != " latest" && ${NODE_VERSION} != " NA" ]]; then
56+ docker buildx build \
57+ --platform " ${TARGET_ARCHITECTURES} " \
58+ --build-arg NODE_VERSION=" ${NODE_VERSION} " \
59+ -t " ${ALIYUN_REPO} :${NODE_VERSION} " \
60+ --push .
61+ fi
4662
47- docker push registry.cn-hangzhou.aliyuncs.com/${DOCKER_USERNAME} /webdev
63+ # 6. 验证推送结果(可选:查看仓库中的多架构镜像信息)
64+ echo " ##### Check Docker Hub multi-arch image info"
65+ docker buildx imagetools inspect " ${DOCKER_HUB_REPO} :latest"
4866
49- if [[ ${NODE_VERSION} != " latest" && ${NODE_VERSION} != " NA" ]]; then
50- # push build version
51- docker tag ${DOCKER_USERNAME} /webdev:latest registry.cn-hangzhou.aliyuncs.com/${DOCKER_USERNAME} /webdev:${NODE_VERSION}
52- docker push registry.cn-hangzhou.aliyuncs.com/${DOCKER_USERNAME} /webdev:${NODE_VERSION}
53- fi
67+ echo " ##### Check Aliyun multi-arch image info"
68+ docker buildx imagetools inspect " ${ALIYUN_REPO} :latest"
0 commit comments