【 Container】使用 Buildx 建構多重系統架構的 Docker 映像檔
內容
- 學習目標
- 前置準備作業
- 流程
- 於 ARM CPU 的電腦來建立 Docker Image 並上傳 Image 到 Docker Hub
- 於 x86 CPU 的 Ubuntu 電腦執行 Docker Image
學習目標
- 如何使用
Buildx
建構多重系統架構
的Docker 映像檔
前置準備作業
- 已建立 Docker Hub 帳號並能正常登入
- 準備一台 ARM CPU 的電腦來建立 Docker Image,本範例使用 Apple MacBook ( M1 Max ) 為例並完成 Docker Engine 安裝
- 準備一台 x86 CPU 的 Ubuntu 電腦來執行 Docker Image 使用,本範例使用 Azure x86 Ubuntu VM 為例
- 已於 ARM CPU 的電腦端安裝 IDE,本範例使用 Visual Studio Code
流程
- ① 於 Apple MacBook 的 ARM 環境建置多重系統架構的 Busybox 之 Docker Image
- ② 將多重系統架構的 Busybox 之 Docker Image 上傳到 Docker Hub
- ③ 於 Apple MacBook 的 ARM 環境從 Docker Hub 下載多重系統架構的 Busybox 之 Docker Image
- ④ 於 Apple MacBook 的 ARM 環境執行多重系統架構的 Busybox 之 Docker Image
- ⑤ 於 x86 Ubuntu 環境從 Docker Hub 下載多重系統架構的 Busybox 之 Docker Image
- ⑥ 於 x86 Ubuntu 環境執行多重系統架構的 Busybox 之 Docker Image
於 ARM CPU 的電腦來建立 Docker Image 並上傳 Image 到 Docker Hub
Step 1. 請建立 Dockerfile 檔案,其內容如下:
- 本範例使用 Busybox 為例
Step 2. 確認目前的 builder
- 於終端機輸入下方指令:
sudo docker buildx ls
Step 3. 建立新的 builder 並切換過去
- 於終端機輸入下方指令:
sudo docker buildx create --name multiarch --use
Step 4. 確認狀態
- 於終端機輸入下方指令:
sudo docker buildx ls --builder multiarch
Step 5. 檢查目前的 builder
- 於終端機輸入下方指令:
sudo docker buildx inspect --bootstrap
Step 6. 建立支援 amd64
與 arm64
的 Docker Image
並且推送至 Docker Hub
- 於終端機輸入下方指令:
- 請修改下方指令中「DOCKER-HUB-USER-NAME」為 Docker Hub 所使用的登入名稱
sudo docker buildx build . --platform linux/amd64,linux/arm64 --push -t DOCKER-HUB-USER-NAME/multi-platform-busybox:v1
Step 7. 於 Docker Hub 確認是否有上傳成功
Step 8. 從 Docker Hub 下載 Image 並於 ARM 電腦執行
- 於終端機輸入下方指令:
- 請修改下方指令中「DOCKER-HUB-USER-NAME」為 Docker Hub 所使用的登入名稱
sudo docker pull DOCKER-HUB-USER-NAME/multi-platform-busybox:v1
Step 9. 驗證在 ARM 環境中所 Build 的 Docker Image 是否能正常於 ARM 環境執行
- 於終端機輸入下方指令:
- 請修改下方指令中「DOCKER-HUB-USER-NAME」為 Docker Hub 所使用的登入名稱
sudo docker run --rm DOCKER-HUB-USER-NAME/multi-platform-busybox:v1 date
於 x86 CPU 的 Ubuntu 電腦執行 Docker Image
Step 1. 安裝 Docker Engine
- 於終端機輸入下方指令以下載安裝 Shell Script
wget https://raw.githubusercontent.com/ArcherHuang/Docker-Python-Flask/main/Script/install-docker.sh
- 於終端機輸入下方指令以改變權限
chmod 777 install-docker.sh
- 於終端機輸入下方指令以改變權限
sudo ./install-docker.sh
- 於終端機輸入下方指令以確認安裝結果
sudo docker images
Step 2. 從 Docker Hub 下載 Image 並於 X86 電腦執行
- 於終端機輸入下方指令:
- 請修改下方指令中「DOCKER-HUB-USER-NAME」為 Docker Hub 所使用的登入名稱
sudo docker pull DOCKER-HUB-USER-NAME/multi-platform-busybox:v1
Step 3. 驗證在 ARM 環境中所 Build 的 Docker Image 是否能正常於 x86 環境執行
- 於終端機輸入下方指令:
- 請修改下方指令中「DOCKER-HUB-USER-NAME」為 Docker Hub 所使用的登入名稱
sudo docker run --rm DOCKER-HUB-USER-NAME/multi-platform-busybox:v1 date
Reference
- https://docs.docker.com/build/building/multi-platform/
- https://docs.docker.com/engine/reference/commandline/buildx_use/