linux - 如何在 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。
解决方案
不同架构的镜像配方有自己的 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'
推荐阅读
- python - 熊猫时间序列分类问题
- kotlin - 错误:找不到符号导入 com.gourav.news.databinding.ActivityDetailBindingImpl;
- firebase - 设置默认 Firebase 文档语言
- javascript - 如何删除ajax帖子上部分视图元素的名称前缀?
- python-3.x - Python Selenium Webdriver:没有这样的元素或元素不可见或 InvalidSelectorException
- c++ - 可变参数 std::tuple 的复制赋值运算符
- botframework - 使用 LuisDialog 向 QnA Maker 添加丰富的卡片
- python-3.x - 如何使用 google.cloud.speech_v1p1beta1 获取整个成绩单?
- python - 如何在目录中的每个文件上迭代函数
- java - 在java中向数组添加新元素