文章目錄
將 Docker Multi-arch image 搬移至另個 registry 以 Nexus Repository 為例
這個需求也是因為團隊 Nexus Repository server 的用量太高,造成服務中斷,進而影響到 CI/CD 流程,團隊的開發進度也多少受到影響,所以決定啟用多個 Nexus Repository server 以分散 server 的 loading,所以我們需要將原本的套件上傳到新的 Nexus Repository server,這篇筆記將會紀錄如何在 Nexus Repository 的 Docker Registry 下載與上傳 Docker Multi-arch image。
因為之前筆記 將 Docker image 搬移至另個 registry 以 Nexus Repository 為例 沒有處理到 Multi-arch 的狀況,導致團隊在 macOS 上開發時遇到了問題
基本環境說明
- macOS Sequoia 15.0.1 (Apple M2 Pro)
- OrbStack 1.7.5 (18165)
container images
- sonatype/nexus3:3.73.0
使用 docker-compose 來建立 Nexus Repository
- 8081 是 ui port
- 8082 是 connector for docker port
docker registry 設定請參考之前筆記 使用 Nexus Repository 建立 Docker Registry
搬移 Docker image:使用 docker buildx imagetools
從 Nexus 取得所有 image 與 tag 並 push 到新的 registry
- bash 內容
使用方式
語法
bash migrate-docker.sh -s=http://{source username}:{source password}@{source domain}:{source port}/ -d=http://{target username}:{target password}@{target domain}:{target port}/
範例
bash migrate-docker.sh -s=http://admin:pass.123@localhost:8082/ -d=http://admin:pass.123@localhost:8085/
錯誤重試 (非必要)
- bash 內容
使用方式
bash retry.sh
心得
與 將 Docker image 搬移至另個 registry 以 Nexus Repository 為例 相較,使用 docker buildx imagetools 明顯在執行速度上差很多
我觀察了一下 docker buildx imagetools 的執行過程,原則上也是 pull image、tag image、push image,但因為要是 multi-arch image,所以 pull tag push 都會執行多次,加上為了要支援 multi-arch image,還要額外處理 manifest,所以執行速度上會比較慢
另外,不清楚是 Nexus 在 docker buildx 的轟炸下比較容易出現異常,還是 docker buildx 穩定度不足,實際使用上 push 出現錯誤的機率比較高,所以我有寫了一個 retry.sh 來處理這個問題
完整程式碼請參考 GitHub:yowko/nexus-migrate
參考資料
文章作者 Yowko Tsai
上次更新 2024-10-18
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。