当为我的 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 install
、yum install
等...) - 您可以进行特定的系统级调整,其中配置文件可以位于不同的位置(例如安全证书)。
- 您添加依赖于特定库的软件(例如基于 Alpine 的容器映像没有
glibc
,因此常规 Linux 应用程序需要特定编译,或者应添加 glib) - 您在运行的容器中进行一些手动维护/调试(
docker exec...
),在这种情况下,拥有您最喜欢的工具会有所帮助。
...但这主要是为了方便,而不是兼容性问题。
如果您有多个不同的映像,那么从同一个基本发行版映像派生它们可能会很有用,以便让 docker 跨映像共享公共基础(减少文件系统需求...)
理论上,容器中的应用程序可以依赖于主机中需要最低内核版本的系统调用,但在实践中这种情况非常罕见。