Skip to content

Commit cb3fe4a

Browse files
committed
feat(ci): Add cache arch in dockerfiles
1 parent eb36e5c commit cb3fe4a

File tree

4 files changed

+35
-17
lines changed

4 files changed

+35
-17
lines changed

backend/magic-gateway/Dockerfile

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ ARG GOLANG_VERSION=1.24
33
ARG DOCKERHUB_LIBRARY_IMAGE_PREFIX=public.ecr.aws/docker/library/
44
FROM ${DOCKERHUB_LIBRARY_IMAGE_PREFIX}golang:${GOLANG_VERSION}-alpine AS builder
55

6+
ARG TARGETARCH
7+
68
ARG GOPROXY=https://goproxy.cn,direct
79
ARG GOLANG_VERSION=1.24
810

@@ -12,17 +14,19 @@ ENV GOPROXY=${GOPROXY}
1214
WORKDIR /app
1315

1416
COPY go.mod go.sum ./
15-
RUN --mount=type=cache,id=go-mod-${GOLANG_VERSION}-alpine,target=/go/pkg/mod \
17+
RUN --mount=type=cache,id=go-mod-${GOLANG_VERSION}-alpine-${TARGETARCH},target=/go/pkg/mod \
1618
go mod download
1719

1820
COPY . .
19-
RUN --mount=type=cache,id=go-mod-${GOLANG_VERSION}-alpine,target=/go/pkg/mod \
20-
--mount=type=cache,id=go-build-${GOLANG_VERSION}-alpine,target=/root/.cache/go-build \
21+
RUN --mount=type=cache,id=go-mod-${GOLANG_VERSION}-alpine-${TARGETARCH},target=/go/pkg/mod \
22+
--mount=type=cache,id=go-build-${GOLANG_VERSION}-alpine-${TARGETARCH},target=/root/.cache/go-build \
2123
CGO_ENABLED=0 GOOS=linux go build -o api-gateway .
2224

2325
ARG DOCKERHUB_LIBRARY_IMAGE_PREFIX=public.ecr.aws/docker/library/
2426
FROM ${DOCKERHUB_LIBRARY_IMAGE_PREFIX}alpine:latest
2527

28+
ARG TARGETARCH
29+
2630
WORKDIR /app
2731

2832
# 从builder阶段复制编译好的二进制文件
@@ -31,9 +35,10 @@ COPY --from=builder /app/api-gateway /app/
3135
# setup timezone
3236
ARG APK_MIRROR=mirrors.aliyun.com
3337
ARG TZ=Asia/Shanghai
34-
RUN --mount=type=cache,id=alpine-${ALPINE_VERSION},target=/var/cache/apk \
38+
RUN --mount=type=cache,id=alpine-apk-latest-${TARGETARCH},target=/var/cache/apk \
3539
# setup apk mirror
3640
sed -i.bak "s/dl-cdn.alpinelinux.org/${APK_MIRROR}/g" /etc/apk/repositories && \
41+
apk update && \
3742
apk add tzdata && \
3843
ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
3944
echo "${TZ}" > /etc/timezone && \

backend/sandbox-components/Dockerfile

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ ARG GOLANG_VERSION=1.24
44
ARG ALPINE_VERSION=latest
55
FROM ${DOCKERHUB_LIBRARY_IMAGE_PREFIX}golang:${GOLANG_VERSION}-alpine AS builder
66

7+
ARG TARGETARCH
78
ARG CI_COMMIT_SHA=""
89
ARG CI_COMMIT_TAG=""
910
ARG CI_COMMIT_BRANCH=""
@@ -17,20 +18,21 @@ ENV GOPROXY=${GOPROXY}
1718
WORKDIR /app
1819

1920
ARG APK_MIRROR=mirrors.aliyun.com
20-
RUN --mount=type=cache,id=golang-${GOLANG_VERSION}-apk,target=/var/cache/apk \
21+
RUN --mount=type=cache,id=golang-apk-${GOLANG_VERSION}-alpine-${TARGETARCH},target=/var/cache/apk \
2122
# setup apk mirror
2223
sed -i.bak "s/dl-cdn.alpinelinux.org/${APK_MIRROR}/g" /etc/apk/repositories && \
24+
apk update && \
2325
apk add \
2426
make \
2527
bash
2628

2729
COPY go.mod go.sum ./
28-
RUN --mount=type=cache,id=go-mod-${GOLANG_VERSION}-alpine,target=/go/pkg/mod \
30+
RUN --mount=type=cache,id=go-mod-${GOLANG_VERSION}-alpine-${TARGETARCH},target=/go/pkg/mod \
2931
go mod download
3032

3133
COPY . .
32-
RUN --mount=type=cache,id=go-mod-${GOLANG_VERSION}-alpine,target=/go/pkg/mod \
33-
--mount=type=cache,id=go-build-${GOLANG_VERSION}-alpine,target=/root/.cache/go-build \
34+
RUN --mount=type=cache,id=go-mod-${GOLANG_VERSION}-alpine-${TARGETARCH},target=/go/pkg/mod \
35+
--mount=type=cache,id=go-build-${GOLANG_VERSION}-alpine-${TARGETARCH},target=/root/.cache/go-build \
3436
export CGO_ENABLED=0 ; \
3537
make VERSION=${CI_COMMIT_TAG:-unknown} all
3638

@@ -47,9 +49,10 @@ LABEL org.opencontainers.image.source="https://github.com/dtyq/sandbox-component
4749
ARG APK_MIRROR=mirrors.aliyun.com
4850
ARG TZ=Asia/Shanghai
4951
ARG ALPINE_VERSION=latest
50-
RUN --mount=type=cache,id=alpine-${ALPINE_VERSION},target=/var/cache/apk \
52+
RUN --mount=type=cache,id=alpine-apk-${ALPINE_VERSION}-${TARGETARCH},target=/var/cache/apk \
5153
# setup apk mirror
5254
sed -i.bak "s/dl-cdn.alpinelinux.org/${APK_MIRROR}/g" /etc/apk/repositories && \
55+
apk update && \
5356
apk add \
5457
ca-certificates \
5558
tzdata \

frontend/magic-web/Dockerfile

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,33 @@ ARG NODE_IMAGE=${DOCKERHUB_LIBRARY_IMAGE_PREFIX}node:${NODE_VERSION}-alpine
77
# build
88
FROM ${NODE_IMAGE} AS builder
99

10+
ARG TARGETARCH
11+
1012
WORKDIR /app
1113

1214
COPY package.json ./
1315
COPY patches ./patches
1416
COPY plugins ./plugins
1517

1618
ARG NPM_REGISTRY=https://registry.npmmirror.com
17-
RUN --mount=type=cache,id=node-${NODE_VERSION}-npm,target=/root/.npm \
18-
--mount=type=cache,id=node-${NODE_VERSION}-npm-compile-cache,target=/tmp/node-compile-cache \
19+
RUN --mount=type=cache,id=node-npm-${NODE_VERSION}-alpine-${TARGETARCH},target=/root/.npm \
20+
--mount=type=cache,id=node-npm-compile-cache-${NODE_VERSION}-alpine-${TARGETARCH},target=/tmp/node-compile-cache \
1921
npm config set registry "${NPM_REGISTRY}" && \
2022
npm install pnpm --location=global && \
2123
npm install patch-package -g && \
2224
pnpm install
2325

2426
COPY . .
2527

26-
RUN --mount=type=cache,id=node-${NODE_VERSION}-npm,target=/root/.npm \
27-
--mount=type=cache,id=node-${NODE_VERSION}-npm-compile-cache,target=/tmp/node-compile-cache \
28+
RUN --mount=type=cache,id=node-npm-${NODE_VERSION}-alpine-${TARGETARCH},target=/root/.npm \
29+
--mount=type=cache,id=node-npm-compile-cache-${NODE_VERSION}-alpine-${TARGETARCH},target=/tmp/node-compile-cache \
2830
pnpm build:opensource
2931

3032
# deploy
3133
FROM ${NODE_IMAGE} AS runner
3234

35+
ARG TARGETARCH
36+
3337
# 在 runner 阶段重新定义环境变量
3438
ARG CI_COMMIT_SHA=
3539
ARG CI_COMMIT_TAG=
@@ -47,8 +51,8 @@ COPY server/package.json ./
4751

4852
ARG NODE_VERSION=22
4953
ARG NPM_REGISTRY=https://registry.npmmirror.com
50-
RUN --mount=type=cache,id=node-${NODE_VERSION}-npm,target=/root/.npm \
51-
--mount=type=cache,id=node-${NODE_VERSION}-npm-compile-cache,target=/tmp/node-compile-cache \
54+
RUN --mount=type=cache,id=node-npm-${NODE_VERSION}-alpine-${TARGETARCH},target=/root/.npm \
55+
--mount=type=cache,id=node-npm-compile-cache-${NODE_VERSION}-alpine-${TARGETARCH},target=/tmp/node-compile-cache \
5256
npm config set registry "${NPM_REGISTRY}" && \
5357
npm install && \
5458
# restore npm registry

thirdparty/playwright-mod/Dockerfile

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,30 @@
22
ARG PLAYWRIGHT_VERSION=v1.57.0-noble
33
FROM mcr.microsoft.com/playwright:${PLAYWRIGHT_VERSION}
44

5+
ARG TARGETARCH
6+
57
LABEL org.opencontainers.image.description="装了tini作为init,装了字体,其他没做什么,理论上可以用官方镜像替代"
68

79
COPY setup_font.py /tmp
810

911
# install tini and setup font
1012
ARG UBUNTU_APT_MIRROR=mirrors.aliyun.com
1113
ARG UBUNTU_SECURITY_APT_MIRROR=mirrors.aliyun.com
12-
RUN --mount=type=cache,target=/var/cache/apt \
14+
RUN --mount=type=cache,id=ubuntu-apt-playwright-mod-${PLAYWRIGHT_VERSION}-${TARGETARCH},target=/var/cache/apt \
1315
# setup apt mirror follow deb-822 format
1416
sed -i.bak "s|archive.ubuntu.com|${UBUNTU_APT_MIRROR}|g" /etc/apt/sources.list.d/ubuntu.sources && \
1517
sed -i "s|security.ubuntu.com|${UBUNTU_SECURITY_APT_MIRROR}|g" /etc/apt/sources.list.d/ubuntu.sources && \
18+
# ubuntu的docker会自动删除下载的包 导致缓存失效 因此修改一下
19+
mv /etc/apt/apt.conf.d/docker-clean /tmp/docker-clean.bak && \
1620
apt-get update && \
1721
apt-get install \
1822
tini && \
1923
python3 /tmp/setup_font.py && \
2024
rm /tmp/setup_font.py && \
2125
# restore apt repositories
22-
mv /etc/apt/sources.list.d/ubuntu.sources.bak /etc/apt/sources.list.d/ubuntu.sources
26+
mv /etc/apt/sources.list.d/ubuntu.sources.bak /etc/apt/sources.list.d/ubuntu.sources && \
27+
# restore docker-clean
28+
mv /tmp/docker-clean.bak /etc/apt/apt.conf.d/docker-clean
2329

2430
ENTRYPOINT [ "tini", "--" ]
2531
CMD [ "/bin/bash" ]

0 commit comments

Comments
 (0)