用 buildx 在 X86 的服务器上构建 aarch64 的 Docker 镜像会有啥坑吗?

2022-09-06 07:38:00 +08:00
 zhoudaiyu
背景是我们之前所有的服务器都是 X86 架构的,但是最近搞了一些试水的 aarch64 的服务器,我们已经在上面装完了 k8s ,现在的问题就是我们之前做的镜像都是 x86 的( Java 和 Python ),现在要支持 aarch64 ,并且因为一些原因镜像构建还要在 x86 的服务器上跑。Java 我感觉还可以,换一下 arm64 的 Jdk 应该就行了,但是我们 Python 是编译安装的,需要在 arm 下重新编译。docker 官方支持的跨架构的方案是 buildx ,但不知道有没有啥问题?毕竟是实验支持。请问大家有啥思路吗?
1211 次点击
所在节点    问与答
14 条回复
Jirajine
2022-09-06 07:41:22 +08:00
可以用 https://github.com/multiarch/qemu-user-static ,然后直接基于 arm 镜像构建。
AllenHua
2022-09-06 07:49:56 +08:00
目前没发现什么坑,我构建的 amd64 和 arm64 都正常,N1 上正常运行。
zhoudaiyu
2022-09-06 07:52:23 +08:00
@Jirajine 感谢您,这个我也看过,我有点和 buildx 混了,我以为 buildx 就是依赖它
@AllenHua 您是在镜像里编译的 C 的程序吗?
Jirajine
2022-09-06 07:56:53 +08:00
@zhoudaiyu 应该是使用 buildx 构建多平台镜像之前也需要设置好 bin_fmt 。所以你用了这个之后可以用 buildx 构建多平台镜像也可以直接基于 arm 的镜像正常构建。
ampedee
2022-09-06 08:02:01 +08:00
没啥问题,我们部署过好几套产品了,不放心的话 C 不是也能交叉编译吗
zsj950618
2022-09-06 08:49:01 +08:00
编译会很慢
superchijinpeng
2022-09-06 09:13:16 +08:00
无坑,我司全部组件以及服务都要求支持 ARM ,已稳定使用两年
Lattez
2022-09-06 09:24:25 +08:00
我在自己 m1 上 buildx 编译 x86 的镜像,部署在服务器上没啥问题,唯一的区别是镜像大小会比普通 x86 机器 build 出来的大一些
AllenHua
2022-09-06 09:26:17 +08:00
@zhoudaiyu #3 PHP 和 NodeJS 都稳定的很,Java 也有,没有人报告问题。

https://hub.docker.com/r/dko0/lsky-pro https://hub.docker.com/r/dko0/squoosh
novolunt
2022-09-06 11:47:57 +08:00
java/python 都是依赖 sdk 的,严格意义讲不算完全编译模式,也就是跟 cpu 弱相关,无非是 java 得统一用 open jdk
docker buildx build --platform=linux/amd64,linux/arm64 .
idblife
2022-09-06 12:13:27 +08:00
在用 arm 机器构建 x86 镜像,感觉良好
xh3ccc
2022-09-06 12:21:13 +08:00
我用 qemu-user binfmt 构建 aarch64 镜像与跑的容器(数据库实例),除了慢其它还好。
zhoudaiyu
2022-09-06 15:45:23 +08:00
@xh3ccc #12 我看了一下这个 qemu 的模拟器需要内核 4.8 以上才能跑,我们的 3.10 确实装不了,不知道大佬的内核是啥版本的
xh3ccc
2022-09-06 16:52:34 +08:00
@zhoudaiyu 源码编译的 qemu 6.1.0 版本,内核也是 3.10

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/877960

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX