从我读到和听说过的有关 Docker 的所有内容来看,它的全部意义就是封装应用程序,以便它可以在任何计算机上运行。它通过将所需的环境(工具/依赖项)包装到 docker 镜像中来实现这一点。容器是图像的一个实例。Docker 容器中没有运行操作系统。
现在,如果这都是真的,那么为什么会存在这个:CentOS 官方 docker 镜像?我认为 docker 镜像仅适用于应用程序,而不是整个操作系统。
每当我实例化该映像时,我都会得到一个容器,当连接到该容器时,它看起来像是一个正在运行的 CentOS shell。
你可以自己做一下看看我的意思:
FROM centos:centos7docker build centos-img .docker run -ti centos-imgctrl+p, ctrl+qdocker 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。如果是这样,请随时指出。谢谢!
这是一个多方面的问题,我不太可能通过这个答复来公正地回答您的问题,但我会尽力回答您的核心问题。我建议您阅读许多涵盖容器基础知识的文章。
从根本上来说,容器共享内核(通常是 Linux)而不是操作系统(CentOS、Debian、Ubuntu 等)。
最简单的 Linux 容器映像被调用scratch,它是空的,因此实际上只为您提供 Linux 内核。
在另一个极端,完整的 Linux 操作系统映像包括CentOS. 这些是成熟的操作系统映像,为用户和应用程序提供了与在“裸机”或虚拟机上运行此类操作系统大致相当的体验。
尝试以更接近“scratch”为目标,而不是以更接近“eg”为目标,这是良好的容器实践centos。从根本上来说,操作系统是一大堆代码,其中大部分代码您的应用程序可能不需要。虽然拥有所有这些额外的功能可能很好,但这意味着您必须维护(并保护)多余的(!)代码,并且意味着您的图像也必须拖动所有这些内容。
您的应用程序不太可能运行,scratch因为它们可能依赖于其他应用程序和共享库。如果您已经对这些依赖项有了很好的了解,那么您应该从“scratch”之类的图像开始,并添加您的应用程序所需的内容。
如果您查看网络上的 Dockerfile,您会发现许多最佳示例都是从较小的基础映像开始,添加必要的包,最后添加相关的二进制文件。
看:
哈!
| 归档时间: |
|
| 查看次数: |
3211 次 |
| 最近记录: |