Striveonger

vuePress-theme-reco Mr.Lee    2015 - 2026
Striveonger Striveonger
主页
分类
  • 笔记
  • 文章
  • 工具
  • 读书/工具
标签
时间轴
简历
author-avatar

Mr.Lee

277

Article

147

Tag

主页
分类
  • 笔记
  • 文章
  • 工具
  • 读书/工具
标签
时间轴
简历

使用 docker buildx 构建多平台镜像

vuePress-theme-reco Mr.Lee    2015 - 2026

使用 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

我电脑的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

指定平台构建, 不够优雅...不是我想要的..

方案二:


# 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

多平台构建, 并推送到 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

不同平台下, 就可以使用相同的测试脚本了.

docker run --rm -v /opt/containerd/java/:/opt/java/ striveonger/ubuntu:22.04 /bin/bash -c "date & java --version"
1

如是:

image-20260422141015061