使用 docker buildx 构建多平台镜像
Mr.Lee 2026-04-22 16:03:18 LinuxDocker
在开发过程中, 没次新开一个项目, 都要复制一遍之前的Docker镜像的配置. 太麻烦了. 就想做一个自己的Java镜像
基于ubuntu:22.04做自定义处理
- 增加
JDK的环境变量 - 修改默认时区为: 东八区
FROM ubuntu:22.04
LABEL maintainer="striveonger@163.com"
LABEL version="1.0.0"
ENV JAVA_HOME=/opt/java
ENV PATH=$JAVA_HOME/bin:$PATH
COPY Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
我电脑的CPU平台是: Arm64 , 但是我想要同时构建两个平台的镜像.
方案一:
docker build --platform linux/amd64 -t striveonger/ubuntu:22.04-amd64 --push .
docker build --platform linux/arm64 -t striveonger/ubuntu:22.04-arm64 --push .
1
2
2
指定平台构建, 不够优雅...不是我想要的..
方案二:
# 1. 创建并启用 多平台构建器
docker buildx create --name multi-platform-builder \
--platform linux/amd64,linux/arm64 \
--driver docker-container \
--driver-opt network=host \
--driver-opt env.HTTP_PROXY="http://127.0.0.1:7890" \
--driver-opt env.HTTPS_PROXY="http://127.0.0.1:7890" \
--use
# 2. 启动当前的构建器
docker buildx inspect --bootstrap
# 3. 为防止连接超时, 提前准备好"梯子"
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
# 4. 开始多平台构建, 并推送到 Docker-Hub
docker buildx build --platform linux/amd64,linux/arm64 -t striveonger/ubuntu:22.04 --push .
# 5. 关掉代理配置
unset all_proxy
unset http_proxy
unset https_proxy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
多平台构建, 并推送到 Docker-Hub的过程日志
[+] Building 15.3s (14/14) FINISHED docker-container:multi-platform-builder
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 252B 0.0s
=> [linux/arm64 internal] load metadata for docker.io/library/ubuntu:22.04 5.2s
=> [linux/amd64 internal] load metadata for docker.io/library/ubuntu:22.04 5.2s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [linux/arm64 1/3] FROM docker.io/library/ubuntu:22.04@sha256:962f6cadeae0ea6284001009daa4cc9a8c37e75d1f5191cf0eb83fe565b63dd7 0.0s
=> => resolve docker.io/library/ubuntu:22.04@sha256:962f6cadeae0ea6284001009daa4cc9a8c37e75d1f5191cf0eb83fe565b63dd7 0.0s
=> [linux/amd64 1/3] FROM docker.io/library/ubuntu:22.04@sha256:962f6cadeae0ea6284001009daa4cc9a8c37e75d1f5191cf0eb83fe565b63dd7 0.0s
=> => resolve docker.io/library/ubuntu:22.04@sha256:962f6cadeae0ea6284001009daa4cc9a8c37e75d1f5191cf0eb83fe565b63dd7 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 59B 0.0s
=> CACHED [linux/amd64 2/3] COPY Asia/Shanghai /etc/localtime 0.0s
=> CACHED [linux/amd64 3/3] RUN echo 'Asia/Shanghai' > /etc/timezone 0.0s
=> CACHED [linux/arm64 2/3] COPY Asia/Shanghai /etc/localtime 0.0s
=> CACHED [linux/arm64 3/3] RUN echo 'Asia/Shanghai' > /etc/timezone 0.0s
=> exporting to image 9.8s
=> => exporting layers 0.0s
=> => exporting manifest sha256:20281e333d6217d87b39ddde099d28269211e4cc607115cd411006276740f304 0.0s
=> => exporting config sha256:7fa143fcb19483fb38d8048ef786ef806b070a7eeb3283fc4be6ae33080205b4 0.0s
=> => exporting attestation manifest sha256:248b9a3b8c01d7b37cb215e44877b7adea34b1cac2cc716ed9d47b0bb992644b 0.0s
=> => exporting manifest sha256:2c0c9259fd6ac49bc8ccdcbe8d703d5050870d47c1bd34cb35578422d256191c 0.0s
=> => exporting config sha256:0cce0959188eb0c01723c0d20ad17676ba823fd3634f67130037edf2af479d01 0.0s
=> => exporting attestation manifest sha256:782b10471be9baf0d7d05e8d4552350290a70b0a5018354f3afb39ea9394aff4 0.0s
=> => exporting manifest list sha256:42424316e421f7f1750a71298f4f996dc9940f4c0f3856e834719214ce186512 0.0s
=> => pushing layers 4.5s
=> => pushing manifest for docker.io/striveonger/ubuntu:22.04@sha256:42424316e421f7f1750a71298f4f996dc9940f4c0f3856e834719214ce186512 5.3s
=> [auth] striveonger/ubuntu:pull,push token for registry-1.docker.io 0.0s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
不同平台下, 就可以使用相同的测试脚本了.
docker run --rm -v /opt/containerd/java/:/opt/java/ striveonger/ubuntu:22.04 /bin/bash -c "date & java --version"
1
如是:
