当前位置: 首页 > 知识库问答 >
问题:

CentOS Docker映像的用途是什么?[副本]

彭畅
2023-03-14

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

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

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

你可以自己动手看看我的意思:

  • DockerFile内容:来自CentOS:CentOS7
  • 生成映像:Docker build centos-img。
  • 运行容器:Docker run-ti Centos-img
  • 要分离:Ctrl+P,Ctrl+Q
  • 要重新附加:Docker attach

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

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

这到底是什么?我是否可以将CentOS docker映像当作虚拟机使用?有什么限制?

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

这个centOS docker映像仅仅是一个开始的地方,我应该在它的基础上构建(即,将我的应用程序放入其中),以便它仅仅作为我的应用程序的主机发挥作用吗?我越多地阅读和挖掘Dockerfile示例,我就越相信这是假设是正确的。

我真正想做的是:

我有一堆小的应用程序/服务,它们作为一个系统一起运行,组成一个大的应用程序。我当前在centOS计算机上运行此系统。我希望能够轻松地运行这个大型应用程序的多个实例,每个实例都在自己的环境中/而不是互相踩脚。通过使用CentOS docker映像+所有需要的小应用程序/服务来实现这一点,是否可以生成大应用程序映像?有了这个映像,我可以旋转多个容器,每个容器运行一个大型应用程序的单独实例?这对Docker来说是一件合理的/可实现的事情吗?

我的一些理解可能是不正确的,或者我可能是在建议使用Docker的方式,而不是本意使用它。如果是这样,尽管指出来。谢谢!

共有2个答案

阎宝
2023-03-14

CentOS(和其他完整的OS发行版)在Docker中的一个常见用法是,当开发人员需要在本地运行完整的系统以进行开发/测试/调试,但在Docker生产中没有运行该系统时。在VM中甚至在裸机上运行不适合docker的单片应用程序并不少见。

一个例子可能是作为AMI部署到AWS中的应用程序;在Mac或Windows机器上复制这是非常重要的,直接安装到Linux主机上是不干净的(说得委婉一点),可能成本高得让人望而却步,并且不适合离线使用以旋转更多云托管的实例。

Docker最大的优势之一是它能够运行最小的系统(如果需要的话)或完整的操作系统安装,即使这被认为不是最优的。它在这方面肯定有用处。

陆烨烁
2023-03-14

这是一个多层面的问题,我不太可能用这个答复来公正地回答它,但我会试着回答你的核心问题。我建议您阅读现有的许多涉及容器基础知识的文章。

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

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

在另一个极端,完整的Linux操作系统映像,包括centOS。这些都是成熟的操作系统映像,为用户和应用程序提供了与在“裸机”或虚拟机上运行这样的操作系统基本相同的体验。

一个很好的容器实践是尽量接近“scratch”,而不是接近例如centos。从根本上说,OS是一个巨大的代码空间,而应用程序可能并不需要这些代码。虽然拥有所有这些额外功能可能很好,但这意味着您必须维护(并保护)多余的(!)代码,这意味着您的图像也必须拖动所有这些内容。

您的应用程序不太可能在scratch上运行,因为它们可能依赖于其他应用程序和共享库。如果你已经对这些依赖有了很好的想法,你应该从像“Scratch”这样的图像开始,加入你的应用程序所需要的内容。

如果您查看web上的Dockerfiles,您会看到许多最好的示例从一个较小的基本图像开始,添加必要的包,最后添加相关的二进制文件。

  • Apache
  • Python 3.7
  • 戈朗1.12
  • busybox

参见:

  • 微型容器--微型、便携式Docker容器
  • “无发行版”Docker映像(完整披露:我是谷歌用户)

赫特!

 类似资料:
  • 问题内容: 我不了解Java的这一功能。我知道它使编码更容易,有时看起来更整洁,但这的实际用途是什么?相反,我觉得最好显示警告,因为将来任何人在修改代码之前都可以引用它们。这@SuppressWarnings是否提高了编译效率,还是根据任何编码标准? 问题答案: 其他答案已经解释了很多用例,但是我想强调一点, 有时您绝对需要使用它来克服语言本身的局限性,在这些情况下,使用绝对是合法的。 在其他情况

  • 问题内容: java中有什么用? 请解释一下。 问题答案: 可能这个例子会帮助您。

  • 本文向大家介绍sinon.js的用途是什么?,包括了sinon.js的用途是什么?的使用技巧和注意事项,需要的朋友参考一下 SinonJS提供独立的测试间谍,存根和模拟。这是一个我们可以用来创建用于单元测试的对象模拟的库。 间谍-可以用来追踪执行情况的伪造函数。 存根-函数替换,我们可以从中返回所需的内容或使我们的函数以适合我们测试多个场景的方式工作。 嘲笑-假方法 所有这些对象都有助于对我们的代

  • 我试图理解何时应该使用stdio函数。 例如,如果我对有效的执行或,并得到一个短计数,并且为真,我该怎么办? 从我到目前为止所读到的,和是健壮的,并且会阻止和/或重试(如果有锁和/或中断可能发生在较低级别的函数中),所以使用<代码>clearerr()因为或错误将是如此灾难性,以至于没有必要尝试恢复。 另外,只告诉我有错误,而不是错误是什么。

  • 我明白了VM和容器之间的巨大区别。但这让我对Ubuntu容器如何存在感到困惑。这对我来说很矛盾,因为Ubuntu是一个操作系统。 https://hub.docker.com/_/ubuntu 这不是一个完整的来宾OS吗?那么是什么使它成为VM上的容器呢?还是容器和VM之间的界限模糊了? 我试着在谷歌上搜索这个,但我找到的结果只是经典的VM vs容器的答案,这不是我真正想问的,我不认为。 编辑-我

  • Docker和虚拟机的映像有什么区别吗?除了图像格式,我在任何地方都找不到任何信息。请评论像图像大小,实例创建时间,捕获时间等。谢谢!