首页 > 解决方案 > 如何在 alpine linux 中获取 docker 架构,如 amd64、arm32v7?

问题描述

由于官方 docker alpine 存储库获得了多架构支持,我如何在基础镜像中获取架构名称,尤其是在 Dockerfile 中?

https://github.com/docker-library/official-images#architectures-other-than-amd64

仅获得系统是 32 位或 64 位是不够的。我更喜欢结果与 docker 架构相同,如 arm32v7、arm64v8、amd64 等。

我的目标是构建一个 nodejs docker 镜像。对于 amd64,大部分依赖是直接可用的,而对于其他一些架构,它们需要从源代码编译,在这种情况下,需要额外的 dep,如 python、gcc/g++。我希望我在 dockerfile 中的脚本能够弄清楚,并且仅在必要时才安装这些额外的 deps。

标签: linuxdockerdockerfilealpine

解决方案


不同架构的镜像配方有自己的 Dockerfile,所以只需选择合适的来使用(希望我的问题是正确的)。

有针对各种架构的 Alpine 可用节点映像,例如:

sudo docker pull ppc64le/node:8-alpine

是 Alpine 3.8 上 PPC64LE 的 Node.js 8.12.0 映像。

澄清后编辑:

对于根据目标架构构建不同的多架构 Dockerfile,您可以在运行时解析架构名称,方法是检查结果uname -m并使用 shell 条件,例如:

RUN /bin/ash -c 'set -ex && \
    ARCH=`uname -m` && \
    if [ "$ARCH" == "x86_64" ]; then \
       echo "x86_64" && \
       apk add some-package; \
    else \
       echo "unknown arch" && \
       apk add some-other-package; \
    fi'

推荐阅读