简介
随着国产化适配的推进,我们可能经常需要将某个程序跑在不同的 CPU 架构上,比如让某些软件跑在麒麟、欧拉、龙蜥操作系统之上。但是想要跨平台构建 Docker 镜像可不是一件轻松的活,要么到不同 CPU 架构的系统上全部构建一遍,要么就得在当前系统上通过虚拟化技术模拟不同的 CPU 架构,最后可能还要想办法合并镜像,费力不讨好。
不过值得庆幸的是,Docker 19.03 引入了一个新的实验性插件,该插件使得跨平台构建 Docker 镜像比以往更加容易了。在介绍这个新特性之前,我们先来了解一下跨 CPU 架构构建程序的基础知识。
一.跨 CPU 架构编译程序的方法
方法一:直接在目标硬件上编译
如果我们能够访问目标 CPU 架构的系统,并且该操作系统支持运行构建所需的各种工具,那么我们可以直接在目标系统上编译程序。
以构建 Docker 镜像为例,我们可以在一测麒麟linux 服务器(arm架构)环境安装 Docker,然后通过 Dockerfile 直接构建 arm 平台的镜像。
如果无法访问目标 CPU 架构的系统该怎么办?通常一测arm服务器环境资源比较紧张,有没有办法通过某种方式直接在当前x86架构服务器基于bclinux系统来构建目标 CPU 架构的程序呢?请看下文其他方法。
方法二:模拟目标硬件
还记得我们小时候玩过的街机游戏吗?如果现在我们想重新体验以前玩过的街机游戏该怎么办?这时候就需要用到模拟器(Emulator)了。借助模拟器,我们可以让时光倒流,体验经典游戏的乐趣。
模拟器除了可以用来玩游戏之外,还可以用来跨 CPU 架构构建程序。最常用的模拟器是开源的 QEMU,QEMU 支持许多常见的 CPU 架构,包括 ARM、Power-PC 和 RISC-V 等。通过模拟一个完整的操作系统,可以创建通用的 ARM 虚拟机,该虚拟机可以引导 Linux,设置开发环境,也可以在虚拟机内编译程序。
然而