当为我的 Ubuntu 选择 Docker 容器镜像文件时,我需要在它们之间匹配什么?

当为我的 Ubuntu 选择 Docker 容器镜像文件时,我需要在它们之间匹配什么?

当为我的 Ubuntu 选择 Docker 容器映像文件,以便它可以在我的 Ubuntu 上运行时,我需要在它们之间匹配什么?

我是否需要为 Linux 选择映像文件,但不需要为 Unix(MacOS、OpenBSD)选择映像文件?

我需要匹配他们的 Linux 发行版(Ubuntu、Centos 等)还是仅匹配 Linux 内核?

我需要匹配他们的 Linux 内核版本吗?

谢谢。

答案1

仅操作系统必须匹配。

在 Linux 上运行的 Docker 可以运行任何 Linux 容器,但不能运行任何 Windows 容器或 *BSD 容器(如果存在的话)。

在 Windows 上(本机)运行的 Docker 可以运行任何 Windows 容器,但不能运行任何 Linux 容器。

在 Windows 虚拟机管理程序上的 Linux 虚拟机中运行的 Docker 可以运行任何 Linux 容器,但不能运行任何 Windows 容器。

答案2

容器只是一个在网络和文件系统“气泡”中运行的进程。它不依赖于其主机的任何文件。因此容器镜像只需要匹配其主机的类型(Linux on Linux 等)。我在 RHEL 和 Centos 上运行基于 Debian 的容器,在 Ubuntu 上运行 Centos 容器。

容器镜像的“发行版”仅在以下情况下才相关:

  • 您在 Dockerfile 中安装更多软件(apt installyum install等...)
  • 您可以进行特定的系统级调整,其中配置文件可以位于不同的位置(例如安全证书)。
  • 您添加依赖于特定库的软件(例如基于 Alpine 的容器映像没有glibc,因此常规 Linux 应用程序需要特定编译,或者应添加 glib)
  • 您在运行的容器中进行一些手动维护/调试(docker exec...),在这种情况下,拥有您最喜欢的工具会有所帮助。

...但这主要是为了方便,而不是兼容性问题。

如果您有多个不同的映像,那么从同一个基本发行版映像派生它们可能会很有用,以便让 docker 跨映像共享公共基础(减少文件系统需求...)

理论上,容器中的应用程序可以依赖于主机中需要最低内核版本的系统调用,但在实践中这种情况非常罕见。

相关内容