docker hub push multiple OS image with same tag

參考文章

https://medium.com/@life-is-short-so-enjoy-it/docker-how-to-build-and-push-multi-arch-docker-images-to-docker-hub-64dea4931df9

https://github.com/docker/buildx/issues/1986

https://stackoverflow.com/questions/73812700/docker-error-internal-load-metadata-for-docker-io

大致上的步驟如下

  1. 準備好要build的Dockerfile
  2. 事先登入docker hub
  3. 透過內建的docker buildx來處理
  4. 建立一個builder
  5. 使用docker buildx 一次build多個平台image 並且推到docker hub上

注意事項

  1. 首先,確認一下docker hub desktop中的 設定 > docker engine ,feature.buildkit設定為false,如果build中有出現錯誤請查閱這個設定
  2. 注意建立builder的driver,下面會提到

準備Dockerfile

登入docker hub

可以透過指令

也可以透過docker desktop介面先登入

建立Builder

其中,如果沒有加入–driver-opt參數,不指定用rootless的image很奇怪的Dockerfile中的apt-get指令會出現錯誤

Build指令

其中,–platform 可以依照你要的平台來指定,當然必須要是來源的image就已經支援的平台,這邊舉例build arm64與amd64兩個版本

–builder 指定我們剛剛建立的builder name

最後,我們就會在docker hub上面看到兩個不同OS的image了

docker hub multi OS