Docker如何选择镜像的操作系统和架构

8

我开始学习如何使用Docker,并有以下问题。

当我执行“docker pull <镜像名称>”时,通常会从Docker Hub上拉取镜像。

但是,镜像可以具有不同版本,这些版本在操作系统和架构方面有所不同。例如,Python镜像具有带有Linux和Windows的版本。

python image tags

我想知道如果只执行“docker pull python”,我将得到哪个镜像,以及如何自己选择操作系统和架构。

实际上,我更喜欢使用Linux镜像,因为它轻巧,我不想意外地拉取Windows镜像。


1
请查看这个链接,向下滚动并阅读有关Image Variants的内容。您可以看到python:<version>-alpine以及对其的一些描述。如果有任何问题,请告诉我。 - sajjad rezaei
@sajjadrezaei 谢谢你提供的参考,它促使我学习了共享和简单标签,现在我更好地理解了这个问题。 - iggi
我还查了一些关于Windows和Linux容器的信息,所以我认为Docker根据Docker模式选择镜像的操作系统(您可以在Linux和Windows容器之间切换,因此Docker根据此获取镜像的操作系统),此外,帖子的回答让我明白了Docker如何确定镜像的架构。 - iggi
2个回答

1
我想知道如果我只是做一个“docker pull python”,会得到什么样的镜像。

来自“利用多CPU架构支持”的文档

Docker Hub上大多数官方镜像都提供各种架构。例如,busybox镜像支持amd64、arm32v5、arm32v6、arm32v7、arm64v8、i386、ppc64le和s390x等架构。当在x86_64 / amd64机器上运行此镜像时,将拉取并运行amd64变体。

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


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

同一页上补充道:

You can also run images targeted for a different architecture on Docker Desktop.

You can run the images using the SHA tag, and verify the architecture.
For example, when you run the following on a 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

In the above example, uname -m returns aarch64 and armv7l as expected, even when running the commands on a native macOS or Windows developer machine


您也可以在docker run命令中使用--platform linux/amd64标志来选择架构。 - krzychu

1
它基于运行docker的主机平台。您可以在docker info中看到这一点:
$ docker info --format '{{ .OSType }}/{{ .Architecture }}'
linux/x86_64

这个代码可以在containerd中找到,而且在Go语言中查找操作系统和架构的方式略有不同:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接