生成自适应架构docker镜像

前期准备

首先在工作目录下准备好不同架构的文件以及Dockerfile,这里以bfban举例子

二进制文件:

bfban-linux-amd64
bfban-linux-arm
bfban-linux-arm64

Dockerfile文件内容
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
# 使用 Alpine Linux 作为基础镜像
FROM alpine:latest

# 安装运行所需的依赖项(你可以根据需要安装其他包)
RUN apk update && apk add --no-cache \
bash \
curl \
wget \
ca-certificates \
&& rm -rf /var/cache/apk/*


# 设置变量分别是系统和架构
ARG TARGETOS

ARG TARGETARCH

# 将本地的 bfban 文件复制到容器中
COPY bfban-${TARGETOS}-${TARGETARCH} /usr/local/bin/bfban

# 设置文件权限
RUN chmod +x /usr/local/bin/bfban

# 启动命令
CMD ["/usr/local/bin/bfban"]

登录dockerhub以及编译进行推送

输入docker login登录你的账号,确认登陆后执行以下命令:
docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t 你的docker hub ID/你的镜像名字(不用加标签) . --push
执行以后应该会推送到 docker.io/你的ID/镜像名字,且默认会生成xxx:latest的标签

如果失败

默认情况下会自动拉取编译容器,如果编译失败可手动拉取,如下:

配置docker的实验功能

vim /etc/docker/config.json
添加内容

1
2
3
{
"experimental": "enabled"
}

重启docker,systemctl daemon-reload systemctl restart docker
运行docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

使用buildx 功能 新建 builder 实例

由于 Docker 默认的 builder 实例不支持同时指定多个 --platform,我们必须首先创建一个新的 builder 实例。
docker buildx create --name mybuilder --driver docker-container
使用新创建好的builder实例
docker buildx use mybuilder
安装模拟器(用于多平台镜像构建)
docker run --rm --privileged tonistiigi/binfmt:latest --install all
再次在工作目录下执行编译并推送
docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t 你的docker hub ID/你的镜像名字(不用加标签) . --push


生成自适应架构docker镜像
https://hexo.psorai.eu.org/2024/12/25/生成自适应架构docker镜像/
Author
Sora
Posted on
December 25, 2024
Licensed under