惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
I
InfoQ
C
Check Point Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
Last Week in AI
Last Week in AI
GbyAI
GbyAI
P
Proofpoint News Feed
量子位
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
B
Blog
T
The Blog of Author Tim Ferriss
H
Help Net Security
云风的 BLOG
云风的 BLOG

Allen Hua 的网络博客

由于 Linux 桌面没有一个好用的天气程序就写了一个跨平台的CheckitoutWeather 给 caesium-image-compressor 图片压缩程序构建了 Linux AppImage v2.8.5 最新版 debian13(debian trixie)安装了nvidia闭源驱动后从x11切换到wayland的方法 山间摩旅追风,偶遇一场绚烂晚霞 最近使用debian系统的一些心得 机械革命无界14Pro笔记本debian forky成功驱动内置扬声器和麦克风 记录 typecho 1.2.0 升级到 1.3.0 过程 开发了一款openwrt插件:文本剪贴板 解决机械革命笔记本内屏高刷240Hz闪屏问题 使用 Java 写了一个局域网端口扫描器 - Allen Hua 的网络博客 openwrt使用外置根extroot机制扩展根分区大小 - Allen Hua 的网络博客 将机场ss节点批量转换成ss字符串链接批量添加到passwall - Allen Hua 的网络博客 给机械革命钛钽plus换屏:NY2换成NZ2 - Allen Hua 的网络博客 记录一次pve宿主机和上面的debian虚机无故down机事件 - Allen Hua 的网络博客 给图床部署cdn腾讯云的edgeone并排查Cache-Control max-age 3600的问题 - Allen Hua 的网络博客 从高山草甸到徽派古村:武功山反穿与皖浙赣自驾行记 - Allen Hua 的网络博客 增程器就是充电宝?别被忽悠了 - Allen Hua 的网络博客 浦口龙虎巷扫街,记录人间真实 博客图片压缩方案更新|AVIF|WebP|MozJPEG|标准JPEG Windows 电脑使用 Obs Studio 录制各个网站视频/桌面画面教程 为typecho博客添加latex支持 新能源汽车之纯电车使用交流慢充和直流快充的充电损耗对比 2025年3月更新全国5A景区名录 2025最新查看小米/红米手机电池健康度和循环次数方法 完美解决 seafile FILE_SERVER_ROOT 配置导致的内网外网不能同时访问和上传下载的问题 纯css实现typecho博客文章文字spoiler剧透效果 我对Typecho Facile主题的一些修改,图片懒加载优化,样式定制 2024年8月我的宜昌 - 重庆 - 川西小环线自驾旅行分享 2022年打卡南京市区人防工程纳凉点 2024年带着A7C2+腾龙28-200 再次来到红山森林动物园
Docker 构建多架构镜像实战 构建 amd64 和 arm64 架构的兰空...
Allen Hua · 2022-05-01 · via Allen Hua 的网络博客
阅读量:5680

warning: 这篇文章距离上次修改已过1407天,其中的内容可能已经有所变动。

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 多架构镜像构建我这还是太皮毛了,只是一个实践,还需要系统性学习这些知识。