個人比較喜歡影視作品,下載了大量的劇集視訊,有些檔案的命名不規範,就需要重新命名,之前是用的一款 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 了
如果沒有:
- 建立外掛目錄
mkdir ~/.docker/cli-plugins
- 下載外掛到上面的目錄中
wget -O ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.8.2/buildx-v0.8.2.linux-amd64
.注意這一步需要選擇自己對應平臺的二進位制包 - 授予執行許可權
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 檢視剛剛推送的映象就可以看到多版本支援了: