參考文章
https://github.com/docker/buildx/issues/1986
https://stackoverflow.com/questions/73812700/docker-error-internal-load-metadata-for-docker-io
大致上的步驟如下#
- 準備好要build的Dockerfile
- 事先登入docker hub
- 透過內建的docker buildx來處理
- 建立一個builder
- 使用docker buildx 一次build多個平台image 並且推到docker hub上
注意事項#
- 首先,確認一下docker hub desktop中的 設定 > docker engine ,feature.buildkit設定為false,如果build中有出現錯誤請查閱這個設定
- 注意建立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了

