【问题标题】:How Docker selects an image's os/archDocker 如何选择镜像的 os/arch
【发布时间】:2022-01-16 20:50:43
【问题描述】:

我开始学习如何使用 Docker,但我遇到了这个问题。 当我制作“docker pull ”时,我通常从 docker hub 拉取图像。

但是映像可以有不同的版本,在操作系统和架构上有所不同。例如,python 映像具有 linux 和 windows 的版本。

我想知道如果我只是做一个“docker pull python”我会得到什么图像,以及我如何自己选择操作系统和架构。

我实际上更喜欢使用 linux 映像,因为它很轻量,而且我不想意外拉取 Windows 映像。

【问题讨论】:

  • 查看this 向下滚动并阅读有关图像变体的信息。你可以看到python:<version>-alpine 以及一些关于它的描述。如果有任何问题,请告诉我。
  • @sajjadrezaei 感谢您的参考,它促使我了解共享标签和简单标签,所以我现在更好地理解了这个问题。
  • 另外我查看了一些关于Windows和Linux容器的信息,所以我认为Docker根据Docker模式选择了镜像的操作系统(你可以在Linux和Windows容器之间切换,所以Docker根据这个获取镜像的操作系统) ,帖子的答案也让我了解 Docker 如何确定映像的架构。

标签: docker dockerfile


【解决方案1】:

我想知道如果我只是执行“docker pull python”会得到什么图像

来自“Leverage multi-CPU architecture support

Docker Hub 上的大部分 Docker 官方镜像都提供了多种架构。
例如,busybox 图像支持 amd64arm32v5arm32v6arm32v7arm64v8i386ppc64les390x
x86_64 / amd64 机器上运行此映像时,amd64 变体被拉取并运行。

因此,这取决于您执行docker pull 时使用的操作系统。


以及我如何自己选择操作系统和架构。

同一页面添加:

您还可以在 Docker Desktop 上运行针对不同架构的映像。

您可以使用 SHA 标记运行映像,并验证架构。
例如,当您在 macOS 上运行以下命令时:

docker run --rm docker.io/username/demo:latest@sha256:2b77acdfea5dc5baa489ffab2a0b4a387666d1d526490e31845eb64e3e73ed20 uname -m

aarch64

docker run --rm docker.io/username/demo:latest@sha256:723c22f366ae44e419d12706453a544ae92711ae52f510e226f6467d8228d191 uname -m

armv71

在上面的示例中,uname -m 按预期返回 aarch64 和 armv7l,即使在本机 macOS 或 Windows 开发人员机器上运行命令时也是如此

【讨论】:

    【解决方案2】:

    它基于运行 docker 的主机平台。你可以在docker info看到这个:

    $ docker info --format '{{ .OSType }}/{{ .Architecture }}'
    linux/x86_64
    

    此代码在 containerd 中,并且在 go 中查找 OS 和 Arch 略有不同:

    $ go env
    GO111MODULE=""
    GOARCH="amd64"
    ...
    GOOS="linux"
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2017-10-10
      • 2020-01-20
      • 2023-01-14
      • 1970-01-01
      • 2022-12-26
      • 2014-02-19
      相关资源
      最近更新 更多