docker hub 上传多架构(x86 和 arm)镜像?

我打包了一个 hbase 的 docker 镜像,支持 arm 和 x86 ,市面上的基本都是支持 x86

我现在想上传到 docker hub 中,遇到了一个问题

我在 x86 的 机器上 docker build 之后,docker push 上传,docker hub 显示有 x86 的镜像了

─➤  docker push ponponon/hbase:2.4.17
The push refers to repository [docker.io/ponponon/hbase]
5cbe117ca7a7: Pushed 
5303d123946a: Pushed 
b21157a8f1f4: Pushed 
d82aed3adae2: Pushed 
5f70bf18a086: Mounted from library/kibana 
1fb8d5fc2705: Pushed 
b071800f76fa: Pushed 
e144ebbfe119: Pushed 
c294749127ef: Pushed 
14d6affed4ad: Pushed 
9f54eef41275: Mounted from library/ubuntu 
2.4.17: digest: sha256:0c66a2af5ea9ea0c2413657e4fb2cd9115039024a0ffe80508a58890af618579 size: 2630

然后我在 arm 机器上docker build 之后,docker push 上传,docker hub 显示有 arm 的镜像了,但是只有 arm 镜像了,x86 的被顶掉了?

╰─➤  docker push ponponon/hbase:2.4.17
The push refers to repository [docker.io/ponponon/hbase]
edfb34a786a7: Pushed 
272c03189843: Pushed 
0d05a4ccd76c: Pushed 
d8c93dd63834: Pushed 
5f70bf18a086: Pushed 
bdc124c7e85d: Pushed 
e8a59430d56c: Pushed 
6488763422f5: Pushed 
011514ed52e7: Pushed 
ac0b27eeb113: Pushed 
5e2386038042: Mounted from library/ubuntu 
2.4.17: digest: sha256:4644d9d652abac970b4142c890fec61fd94006d53233754e1c3566ca71ff078d size: 2630

图片.png

https://hub.docker.com/r/ponponon/hbase/tags

我本来以为,上传同名同标签的镜像,只要 arch 不一样,是不会被顶替的,但是实际上貌似不是?

我要怎么才能既上传 x86 镜像,又上传 arm 镜像?

就像 python 在 docker hub 上的镜像一样,支持多 arch?

图片.png


我需要在打包镜像 ponponon/hbase:2.4.17 ,这个镜像支持 x86 和 arm,但是 x86 和 arm 需要的 Dockerfile 不一样,怎么使用 dockerfile 构建跨平台镜像?

x86 的 Dockerfile

FROM ubuntu:focal
RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
EOF

RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y openjdk-8-jdk

RUN apt-get install -y wget
WORKDIR /root
RUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-bin.tar.gz
RUN tar xvf /root/hbase-2.4.17-bin.tar.gz


RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" | tee -a /etc/profile >/dev/null

COPY entrypoint.sh /root/

arm 的 Dockerfile

FROM ubuntu:focal
RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
EOF

RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y openjdk-8-jdk

RUN apt-get install -y wget
WORKDIR /root
RUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-bin.tar.gz
RUN tar xvf /root/hbase-2.4.17-bin.tar.gz


RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64" | tee -a /etc/profile >/dev/null

COPY entrypoint.sh /root/

上面两个 Dockerfile 有两个区别:

  • 首先 /etc/apt/sources.list 的内容不一样,amr 的是带 -ports 后缀的
  • 然后,JAVA_HOME 这个环境变量不一样,x86 的是 /usr/lib/jvm/java-8-openjdk-amd64,arm 的是 /usr/lib/jvm/java-8-openjdk-arm64
阅读 3k
2 个回答

它那个是不是 multi platform image

这个不是分别 build ,然后在分别推上去;而是直接一次 build 出来推上去的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进