【问题标题】:Docker & Kubernetes & architecture: understanding platform differencesDocker & Kubernetes & 架构:了解平台差异
【发布时间】:2023-01-21 19:46:22
【问题描述】:

介绍

有一个选项 --platform 用于运行 Docker 镜像,配置 platform 用于 docker-compose。

此外,几乎在 hub.docker.com 中的所有官方 Docker 镜像中,一个标签中都有一些受支持的架构。

以Ubuntu官方镜像为例:

大多数服务器(也在 Kubernetes 中)是linux/amd64

我将我的 MacBook 更新为带有他们自己的硅芯片(M1/M2...)的新 MacBook,现在 Docker Desktop 向我显示消息:

对于官方图片(你可以在没有黄色注释的情况下看到它们)它会自动下载所需的平台(我猜)。

但对于自定义创建的图像(在 nexus、工件等私人存储库中)我没有影响。是的,我可以为不同的平台构建适当的图像(比如使用 buildx)并将其推送到私有存储库,但是,在公司中,存储库由 DevOps 管理——这样做很棘手。他们说服务器架构是linux/amd64,如果我在不同的平台上开发面向web的软件(PHP等),即使版本(tag)一样——那环境也不一样,也没有保证它将在服务器上运行。

我假设这只是软件和硬件之间指令解释的差异。

我想更好地理解这个主题。网上有很多粗浅的资料,不详述。

问题

  1. Docker 镜像的“平台/架构”到底意味着什么?像核心基础知识。
  2. 您真的会为解释型编程语言获得不同的代码吗?
  3. 在我看来,如果指定了错误的平台,容器工作会非常缓慢。但是如何衡量这一点(脚本性能、与主机文件系统的交互等)

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    TLDR

    • 构建支持多种架构的多架构图像
    • 始终确保您尝试运行的图像具有兼容的架构

    1. docker 镜像的“平台/架构”到底意味着什么?像核心基础知识。链接将不胜感激。

      这意味着图像中的一些编译二进制代码包含特定架构独有的 CPU 指令。 如果您在不正确的架构上运行该映像,由于不兼容的代码需要通过模拟器运行,它会变慢,或者甚至可能根本无法运行。 一些图像是“多体系结构”的,您的 Docker 安装会选择最合适的图像体系结构来运行。

      您真的会为解释型编程语言获得不同的代码吗?

      不同的机器码,是的。但它在功能上是等价的。

      在我看来,如果指定了错误的平台,容器就会运行得很慢。但是如何衡量这一点(脚本性能、与主机文件系统的交互等)

      我建议始终确保您运行的图像适用于您机器的基础架构。

      为了科学,你可以做一个实验。 您可以构建一个旨在为两种不同架构运行简单批处理作业的映像,然后您可以尝试在您的机器上同时运行它们。比较容器完成所需的时间。

      资料来源:

    【讨论】:

    • 谢谢@Mário。你知道如何在容器运行时弄乱使用的 CPU、内存吗?
    • 我找到了这个 docs.docker.com/config/containers/runmetrics/… 但看起来它在 Mac 上不起作用
    • 问类似 (1) How to Build and Run ARM Docker Images on x86 Hosts 的问题?并更改任务,如 (2) How to Build and Run x86 Docker Images on ARM Hosts,Q(1) 可以使用 google 找到结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2013-07-12
    • 2012-08-03
    相关资源
    最近更新 更多