CentOS Docker 镜像的用途是什么?

gia*_*t91 6 docker

从我读到和听说过的有关 Docker 的所有内容来看,它的全部意义就是封装应用程序,以便它可以在任何计算机上运行。它通过将所需的环境(工具/依赖项)包装到 docker 镜像中来实现这一点。容器是图像的一个实例。Docker 容器中没有运行操作系统。

现在,如果这都是真的,那么为什么会存在这个:CentOS 官方 docker 镜像?我认为 docker 镜像仅适用于应用程序,而不是整个操作系统。

每当我实例化该映像时,我都会得到一个容器,当连接到该容器时,它看起来像是一个正在运行的 CentOS shell。

你可以自己做一下看看我的意思:

  • Dockerfile 内容:FROM centos:centos7
  • 构建图像:docker build centos-img .
  • 运行容器:docker run -ti centos-img
  • 分离:ctrl+p, ctrl+q
  • 重新连接:docker attach <container id>

这看起来和感觉起来确实像一个虚拟机。

如果我运行cat /etc/os-release它甚至会说我正在运行 CentOS。

这到底是什么?我可以像使用虚拟机一样使用 CentOS docker 映像吗?有什么限制?

(然而,令我困惑的是docker containers != VMs,通过探索,我创建了一个看起来和感觉都像虚拟机的 docker 镜像。如果我可以运行一个与虚拟机完全一样的轻量级 docker 镜像,为什么我还想再次运行虚拟机呢? ?)


这个 centOS docker 镜像只是一个起点,我应该构建它(即放入我的应用程序),以便它只是作为我的应用程序的主机?我阅读和深入研究 Dockerfile 示例越多,我就越相信这个假设是正确的。


我真正想做的事情:

我有一堆小型应用程序/服务,它们一起作为一个系统运行,构成一个大型应用程序。我目前在 centOS 机器上运行这个系统。我希望能够轻松运行这个大型应用程序的多个实例,每个实例都在自己的环境中/而不需要踩到彼此的脚趾。是否可以通过使用 a 来做到这一点centOS docker image + all of the small applications/services needed,从而产生 a large application image?有了这个图像,我可以启动多个容器,每个容器运行大型应用程序的一个单独实例?这对于 Docker 来说是合理/可实现的吗?


我的一些理解可能是不正确的,或者我可能建议以一种不应该使用的方式使用 Docker。如果是这样,请随时指出。谢谢!

Daz*_*kin 2

这是一个多方面的问题,我不太可能通过这个答复来公正地回答您的问题,但我会尽力回答您的核心问题。我建议您阅读许多涵盖容器基础知识的文章。

从根本上来说,容器共享内核(通常是 Linux)而不是操作系统(CentOS、Debian、Ubuntu 等)。

最简单的 Linux 容器映像被调用scratch,它是空的,因此实际上只为您提供 Linux 内核。

在另一个极端,完整的 Linux 操作系统映像包括CentOS. 这些是成熟的操作系统映像,为用户和应用程序提供了与在“裸机”或虚拟机上运行此类操作系统大致相当的体验。

尝试以更接近“scratch”为目标,而不是以更接近“eg”为目标,这是良好的容器实践centos。从根本上来说,操作系统是一大堆代码,其中大部分代码您的应用程序可能不需要。虽然拥有所有这些额外的功能可能很好,但这意味着您必须维护(并保护)多余的(!)代码,并且意味着您的图像也必须拖动所有这些内容。

您的应用程序不太可能运行,scratch因为它们可能依赖于其他应用程序和共享库。如果您已经对这些依赖项有了很好的了解,那么您应该从“scratch”之类的图像开始,并添加您的应用程序所需的内容。

如果您查看网络上的 Dockerfile,您会发现许多最佳示例都是从较小的基础映像开始,添加必要的包,最后添加相关的二进制文件。

看:

哈!