CentOS Docker形象的目的是什么?

CentOS Docker形象的目的是什么?,docker,Docker,从我所读到和听到的关于Docker的所有内容来看,Docker的全部目的是封装一个应用程序,使其能够在任何机器上运行。它通过将所需的环境(工具/依赖项)包装到docker映像中来实现这一点。容器是图像的一个实例。docker容器中没有运行操作系统 现在,如果这都是真的,那么为什么会存在这样的情况:?我以为docker映像只是用于应用程序,而不是整个操作系统 每当我实例化该图像时,我都会得到一个容器,当连接到该容器时,它似乎是一个正常工作的CentOS shell 你可以自己做,看看我的意思:

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

现在,如果这都是真的,那么为什么会存在这样的情况:?我以为docker映像只是用于应用程序,而不是整个操作系统

每当我实例化该图像时,我都会得到一个容器,当连接到该容器时,它似乎是一个正常工作的CentOS shell

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

  • Dockerfile内容:
    来自centos:centos7
  • 构建映像:
    docker Build centos img.
  • 运行容器:
    docker运行-ti centos img
  • 要分离:
    ctrl+p、ctrl+q
  • 重新连接:
    docker-attach
这看起来和感觉上都像一个虚拟机

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

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

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


这个centOS docker映像是否只是一个起点,我应该以此为基础构建(即,放入我的应用程序),以便它只是我的应用程序的主机?我越是阅读和挖掘Dockerfile的例子,我就越相信这一假设是正确的


我真正想做的是:

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



我的一些理解可能是不正确的,或者我可能建议使用Docker的方式不是为了使用它。如果是这样,请随意指出。谢谢

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

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

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

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

最好的容器实践是,尝试将目标定位在更接近“零”的位置,而不是更接近于(例如,
centos
)。从根本上说,操作系统是一个庞大的代码空间,而您的应用程序可能不需要这些代码。虽然所有这些额外的功能都可用可能很好,但这意味着您必须维护(并保护)多余的(!)代码,这意味着您的图像也必须拖动所有这些内容

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

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

见:

  • (完全披露:我是谷歌人)

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

一个例子可能是作为AMI部署到AWS中的应用程序;这对于在Mac或Windows机器上复制是非常重要的,而且直接安装到Linux主机是不干净的(说得委婉一点),可能成本高昂,并且不适合脱机使用来启动更多云托管实例


Docker最大的优点之一是,如果需要的话,它能够运行最少的系统,或者可以安装完整的操作系统,即使这不是最佳的。它在这个容量上肯定有它的用途。

“与虚拟机的作用完全一样”——除了如果有人管理内核级漏洞,他们会闯入您的主机,而不需要找出如何逃离虚拟机本身。安全模型delta是非常重要的,类似地,在很多地方,您需要将容器设置为“特权”,以便能够提供所有功能;将Docker容器称为特权容器会使逃逸到外部世界无足轻重。然而,理想的虚拟机是安全的,即使攻击者在其内部加载恶意内核模块。也就是说,这个问题在这里是离题的(上面建议的复制链接也是如此,这就是它关闭的原因)。