V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhoudaiyu
V2EX  ›  问与答

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

  •  
  •   zhoudaiyu · 2022-09-06 07:38:00 +08:00 via iPhone · 1399 次点击
    这是一个创建于 803 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景是我们之前所有的服务器都是 X86 架构的,但是最近搞了一些试水的 aarch64 的服务器,我们已经在上面装完了 k8s ,现在的问题就是我们之前做的镜像都是 x86 的( Java 和 Python ),现在要支持 aarch64 ,并且因为一些原因镜像构建还要在 x86 的服务器上跑。Java 我感觉还可以,换一下 arm64 的 Jdk 应该就行了,但是我们 Python 是编译安装的,需要在 arm 下重新编译。docker 官方支持的跨架构的方案是 buildx ,但不知道有没有啥问题?毕竟是实验支持。请问大家有啥思路吗?
    14 条回复    2022-09-06 16:52:34 +08:00
    Jirajine
        1
    Jirajine  
       2022-09-06 07:41:22 +08:00
    可以用 https://github.com/multiarch/qemu-user-static ,然后直接基于 arm 镜像构建。
    AllenHua
        2
    AllenHua  
       2022-09-06 07:49:56 +08:00 via iPhone
    目前没发现什么坑,我构建的 amd64 和 arm64 都正常,N1 上正常运行。
    zhoudaiyu
        3
    zhoudaiyu  
    OP
       2022-09-06 07:52:23 +08:00 via iPhone
    @Jirajine 感谢您,这个我也看过,我有点和 buildx 混了,我以为 buildx 就是依赖它
    @AllenHua 您是在镜像里编译的 C 的程序吗?
    Jirajine
        4
    Jirajine  
       2022-09-06 07:56:53 +08:00
    @zhoudaiyu 应该是使用 buildx 构建多平台镜像之前也需要设置好 bin_fmt 。所以你用了这个之后可以用 buildx 构建多平台镜像也可以直接基于 arm 的镜像正常构建。
    ampedee
        5
    ampedee  
       2022-09-06 08:02:01 +08:00
    没啥问题,我们部署过好几套产品了,不放心的话 C 不是也能交叉编译吗
    zsj950618
        6
    zsj950618  
       2022-09-06 08:49:01 +08:00 via Android
    编译会很慢
    superchijinpeng
        7
    superchijinpeng  
       2022-09-06 09:13:16 +08:00
    无坑,我司全部组件以及服务都要求支持 ARM ,已稳定使用两年
    Lattez
        8
    Lattez  
       2022-09-06 09:24:25 +08:00
    我在自己 m1 上 buildx 编译 x86 的镜像,部署在服务器上没啥问题,唯一的区别是镜像大小会比普通 x86 机器 build 出来的大一些
    AllenHua
        9
    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
        10
    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
        11
    idblife  
       2022-09-06 12:13:27 +08:00
    在用 arm 机器构建 x86 镜像,感觉良好
    xh3ccc
        12
    xh3ccc  
       2022-09-06 12:21:13 +08:00 via iPhone
    我用 qemu-user binfmt 构建 aarch64 镜像与跑的容器(数据库实例),除了慢其它还好。
    zhoudaiyu
        13
    zhoudaiyu  
    OP
       2022-09-06 15:45:23 +08:00
    @xh3ccc #12 我看了一下这个 qemu 的模拟器需要内核 4.8 以上才能跑,我们的 3.10 确实装不了,不知道大佬的内核是啥版本的
    xh3ccc
        14
    xh3ccc  
       2022-09-06 16:52:34 +08:00 via iPhone
    @zhoudaiyu 源码编译的 qemu 6.1.0 版本,内核也是 3.10
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2760 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:05 · PVG 16:05 · LAX 00:05 · JFK 03:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.