使用docker buildx打包釋出多平臺映象

2022-07-10 06:01:39



個人比較喜歡影視作品,下載了大量的劇集視訊,有些檔案的命名不規範,就需要重新命名,之前是用的一款 renamer 使用者端軟體,用起來不太爽就自己做了個 bs 架構的重新命名軟體並開源在 github:open-renamer,為了方便自己和別人使用,也做成了 docker 映象釋出到了 dockerhub 中供別人使用,由於本人只有 x86 架構的裝置,因此也就是有 x86 的映象包,結果最近有人需要 arm 版的映象,所以呢就來研究下怎麼在 x86 上打 arm 的映象。

目前 docker 已經直接支援多平臺同時打包,不過需要 20 版本及以後的,同時還要開啟實驗特性。

注意:本文 docker 版本基於 20.10.5

開啟 docker 實驗特性

首先需要開啟 docker 的實驗特性,在 docker 組態檔/etc/docker/daemon.json中加入"experimental": true,如下:

{
  "registry-mirrors": [""],
  "experimental": true
}

然後執行docker version,當看到下面的內容說明開啟成功了:

安裝 buildx 外掛

首先檢查是否已經安裝了 buildx 外掛,命令:docker buildx version,看到如下內容說明已經有 buildx 了

如果沒有:

  1. 建立外掛目錄mkdir ~/.docker/cli-plugins
  2. 下載外掛到上面的目錄中wget -O ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.8.2/buildx-v0.8.2.linux-amd64.注意這一步需要選擇自己對應平臺的二進位制包
  3. 授予執行許可權chmod +x ~/.docker/cli-plugins/docker-buildx

官方安裝檔案:點選跳轉

使用 dockerx 打包映象

假設 Dockerfile 內容如下:

FROM node:lts-buster-slim
WORKDIR /app
RUN mkdir /app && echo "hello,world">/app/hello.txt
CMD ["cat", "/app/hello.txt"]

注意:當打包到多平臺時要注意 FROM 的映象要存在於你指定的平臺中,另外其中的所有操作都要能在多平臺中執行

然後建立一個構建範例。預設情況下 buildx 不支援多平臺打包

# 建立構建範例。通俗的講,就是建立用於執行構建任務的節點
docker buildx create --use --name build-node-example --driver docker-container
docker buildx ls

然後就可以開始打包了

docker buildx build -t fleyx/open-renamer:0.8 --platform linux/amd64,linux/arm64 --push .

命令解釋:

  • -- platform:指定目標平臺用","分隔
  • -- push:將輸出結果推播到遠端。預設情況下多平臺打包的映象無法通過docker images檢視

推播到遠端要先用docker login命令登入

然後到 hub.docker 檢視剛剛推播的映象就可以看到多版本支援了: