首页 > 解决方案 > CentOS Docker 映像的目的是什么?

问题描述

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

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

每当我实例化该映像时,我都会得到一个容器,当附加到它时,它似乎是一个正常运行的 CentOS shell。

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

这真的看起来和感觉就像一个虚拟机。

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

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

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


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


我真正想做的是:

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


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

标签: docker

解决方案


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

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

调用了最简单的 Linux 容器映像scratch,它是空的,因此有效地为您提供了 Linux 内核。

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

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

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

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

看:


推荐阅读