如何在x86機器上構建arm/openpower多架構容器鏡像

? ? ? ? Docker Image是容器運行的基礎,它是依賴于操作系統(tǒng)的。不同CPU架構的Docker Image需要在相應CPU架構的機器上去構建,這樣在一定程度上加大了開發(fā)的復雜度,那么有沒有辦法能夠在x86機器上模擬其他架構CPU的指令來構建Docker Image呢?我們可以使用qemu-user-static.

? ? ? ? qemu-user-static,是 QEMU 虛擬機的用戶態(tài)實現。它可以直接在 amd64 系統(tǒng)上運行 OpenPOWER、ARM、MIPS 等架構的 Linux 程序,將指令動態(tài)翻譯成 x86 指令.這樣 不同CPU架構的 系統(tǒng)環(huán)境中的進程與主系統(tǒng)的進程一一對應,資源分配靈活,并且易于腳本自動化。需要注意的就是,當 OpenPOWER、 ARM、MIPS 等架構的進程嘗試運行其它進程時,qemu-user-static 并不會接管新建的進程。如果新的進程仍然是 ARM 架構,那么 Linux 內核就無法運行它。因此,需要開啟 Linux 內核的 binfmt 功能,該功能可以讓 Linux 內核在檢測到OpenPOWER、 ARM、MIPS 等架構的程序時,自動調用 qemu-user-static。開啟該功能,并且注冊 qemu-user-static 虛擬機后,運行 OpenPOWER程序就和運行 x86 程序一樣,對用戶來說毫無差別。 我們可以在x86機器上構建其他CPU架構的鏡像的時候,在Dockerfile里分別加入相應架構 qemu-__QEMU_ARCH__-static 這種文件 ,比如我們創(chuàng)建OpenPOWER的ppc64le的鏡像的時候,我們可以運行COPY qemu-ppc64le-static這個文件。

? ? ? ? 我們介紹一個工具可以在x86機器上創(chuàng)建多架構容器鏡像,工具下載地址https://github.com/HaoHHCui/docker-multiarch-builder

下面我們就演示一個在x86機器上同時創(chuàng)建x86和OpenPOWER的ppc64le架構的docker image。

1? 下載工具,然后運行

$ sudo ./run-once.sh

2? 創(chuàng)建工程

$ mkdir /usr/src/my-new-docker-project

$ ./init-repo.sh /usr/src/my-new-docker-project

3 進入工程 配置build.config文件

cd /usr/src/my-new-docker-project

build.config配置示例:

REPO="haocui"?

IMAGE_NAME="myapp"

IMAGE_VERSION="latest"

DOCKER_CLI_PATH="/usr/src/docker-mutiarch-builder/cli/build"

TARGET_ARCHES="amd64 ppc64le"

4 運行build.sh腳本

運行腳本以后,工具自動會創(chuàng)建haocui/myapp:ppc64le-latest和haocui/myapp:amd64-latest兩個鏡像,然后會創(chuàng)建一個manifests list 叫haocui/myapp:latest并提交到我們指定的鏡像庫中。

5 我們在不同架構的CPU機器上只要運行docker pull haocui/myapp:latest ,自動會下載到對應的x86或者ppc64le的鏡像。用戶感覺不到CPU架構的差異.

6驗證

在x86和openpower機器上分別運行docker run? haocui/myapp:latest? arch

openpower機器返回ppc64le,x86機器返回x86_64

參考 https://lobradov.github.io/Building-docker-multiarch-images/#same-dockerfile-template

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容