如果 Docker 不封装操作系统,那么 Docker Ubuntu 镜像里面有什么?

Ben*_*Ben 7 docker

我正在使用 Docker 启动一个新的 Django 项目。我对 Ubuntu Docker 镜像的存在感到困惑,它在许多教程中都提到过,并且是 Docker Repo 中最受欢迎的镜像之一。

我认为 Docker 是一个构建在操作系统之上的容器化系统,那么为什么会有 Ubuntu Docker 镜像呢?也许关于何时/谁使用它的常见使用场景会有所帮助。

Mat*_*att 12

使用 Linux 发行版,您通常会得到:

  • 加载内核的引导加载程序
  • 管理系统并加载 init 系统的内核
  • 一个init设置和运行其他一切的系统
  • 其他一切

Docker 本身取代了大部分系统init
Docker 镜像取代了“其他一切”,它仍然是任何普通发行版的很大一部分。

Ubuntu 映像包含使用 Ubuntu 构建工具编译的最小 Ubuntu 二进制文件和共享库,用于运行 shell、执行一些正常的 linuxy 操作并使用包apt管理器。

Centos 映像对 Centos 二进制文件、共享库和 yum包管理器执行相同的操作。ETC。

Docker 镜像不需要是完整的发行版。您可以在容器中运行单个静态编译的二进制文件,并且只需要映像中的该二进制文件,不需要其他任何东西。

busybox映像是从单个静态二进制文件构建基本正常的 Linux 环境的一个很好的例子

内核

所有容器共享一个主机内核。使用内核 cgroup 和命名空间将容器与系统的其余部分分开。对于容器中运行的任何东西来说,这似乎是它自己的系统。

所有版本的 Linux 并不使用完全相同的内核,但内核接口在很大程度上兼容,这允许 Docker 镜像的可移植性。Docker 本身需要 3.10+ 内核才能运行,这缩小了内核可能性的范围。

可能有一些深奥的软件需要编译一些深奥的内核功能,而这些软件不能在不同的 Docker 主机上运行。这种情况非常罕见,而且通常是可以识别的,因为它通常需要自定义内核编译或内核模块才能使所述软件首先工作。