arm64 镜像在斐讯 N1 (ARMv8) 上测试通过。

本文主要参考文章 https://juejin.cn/post/7056010773495021605https://yeasy.gitbook.io/docker_practice/buildx/multi-arch-images

期间也遇到一些问题,但是不会详细记录下来了。在此只是记录主要步骤,并构建 amd64 和 arm64 架构的兰空图床镜像。

由于 N1 的性能羸弱,所以我在腾讯云南京的一台 debian11 (amd64) 机器上构建,速度快得多。

前往 GitHub Release 页面获取 buildx binary file: https://github.com/docker/buildx/releases/latest ,写文本的时候最新版是 v0.8.2 https://github.com/docker/buildx/releases/tag/v0.8.2

下载 https://github.com/docker/buildx/releases/download/v0.8.2/buildx-v0.8.2.linux-amd64 binary file

$ pwd
/home/dk/temp

# 下载 binary file
# wget https://github.com/docker/buildx/releases/download/v0.8.2/buildx-v0.8.2.linux-amd64

# 创建 cli-plugins 文件夹
# mkdir -p /root/.docker/cli-plugins/

# 将下载的 binary file 移动到这里并重命名
# mv /home/dk/temp/buildx-v0.8.2.linux-amd64 /root/.docker/cli-plugins/docker-buildx

# 修改相关权限
# chown root:root /root/.docker/cli-plugins/docker-buildx && chmod +x /root/.docker/cli-plugins/docker-buildx

修改 /root/.docker/config.json 文件,添加 "experimental": "enabled" 打开实验性配置。注意 json 文件的语法,上面的英文逗号不能落

{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "xxxxx"
        }
    },
    "experimental": "enabled"
}

重启 docker

# systemctl restart docker

查看 buildx 版本: $ docker buildx version

返回了 github.com/docker/buildx v0.8.1-docker 5fac64c2c49dae1320f2b51f1a899ca451935554,说明插件正确安装。

由于我使用的腾讯云 debian 主机,所以创建如下 builder

# docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master-tencent

查看当前有哪些 builder: # docker buildx ls

$ sudo docker buildx ls
NAME/NODE       DRIVER/ENDPOINT             STATUS  PLATFORMS
mybuilder-cn *  docker-container                    
  mybuilder-cn0 unix:///var/run/docker.sock stopped 
default         docker                              
  default       default                     running linux/amd64, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/arm/v7, linux/arm/v6

mybuilder-cn0 STATUS 是 stopped 是因为我暂时不需要这个 builder 了,把容器停掉了。

现在准备好上一篇文章兰空图床 v2.0.4 程序源代码,以及 000-default.conf Dockerfile entrypoint.sh 三个文件。

在当前路径下开始构建多架构镜像,使用 --platform=linux/arm64,linux/amd64 参数构建 arm64 和 amd64 两种架构镜像。

# docker buildx build -t lsky-pro:2.0.4 --platform=linux/arm64,linux/amd64 .

提示
No output specified for docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load

使用 --push 参数推送到 docker hub

# docker buildx build --push -t dko0/lsky-pro:2.0.4 --platform=linux/arm64,linux/amd64 .

注意镜像的名称以及 tag 需要填写成这种格式 namespace/image_name:tag_name,所以我的是 dko0/lsky-pro:2.0.4,再推一个 latest

# docker buildx build --push -t dko0/lsky-pro:latest --platform=linux/arm64,linux/amd64 .

![20220501152943](https://pic.dogimg.com/2022/05/01/626e36ed1918b.png)

非常抱歉,图裂了,没有备份

在 amd64 的 Linux 机器和 N1 上测试均通过。欢迎大家使用这个镜像: https://hub.docker.com/r/dko0/lsky-pro

docker 多架构镜像构建我这还是太皮毛了,只是一个实践,还需要系统性学习这些知识。