↓ 快轉到主要內容
docker hub push multiple OS image with same tag
技術文章Docker

docker hub push multiple OS image with same tag

Posted by Alvin Chen on

docker hub push multiple OS image with same tag

·562 字·2 分鐘
作者
Alvin Chen
相信寫 Code 可以改變世界

參考文章

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
#

FROM node:22.0
COPY ./ /var/project
RUN apt-get update && apt-get install -y vim nano chromium
RUN apt-get install -y fonts-arphic-ukai fonts-arphic-uming fonts-ipafont-mincho fonts-ipafont-gothic fonts-unfonts-core
RUN npm i -g npm
RUN npm i -g pm2

EXPOSE 5000
ENV HOST=0.0.0.0
WORKDIR /var/project
CMD ["node", "./server.js"]

登入docker hub
#

可以透過指令

docker login

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

建立Builder
#

docker buildx create --name container --driver-opt 'image=moby/buildkit:v0.12.1-rootless' --driver=docker-container

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

Build指令
#

 docker buildx build --tag MY_IMAGE_NAME:IMAGE_TAG --platform linux/arm64,linux/amd64 --builder container --push --no-cache .

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

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

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

docker hub multi OS