- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设我正在启动大量基于相同 docker 镜像的 docker 容器。这意味着每个 docker 容器都在运行相同的应用程序。可能是应用程序足够大并且需要大量硬盘内存。
docker 是如何处理的?
所有 docker 容器是否共享 docker 镜像中定义的静态部分?
如果没有,将应用程序复制到机器上用于运行 docker 容器并为每个 docker 容器挂载此应用程序目录的某个目录是否有意义?
最佳答案
Docker 在内核级别共享资源。这意味着应用程序逻辑在运行时永远不会被复制。如果您启动记事本 1000 次,它仍然只在硬盘上存储一次,对于 docker 实例也是如此。
如果您运行同一个 docker 镜像的 100 个实例,您真正要做的就是在 100 个不同的独立时间线中保持 RAM 中同一软件的状态。主机处理器将每个容器实例的内存状态转移到控制它的软件,因此您确实消耗了运行应用程序所需的 RAM 内存的 100 倍。为软件物理存储完全相同的字节码 100 次是没有意义的,因为应用程序的这一部分始终是静态的并且永远不会改变。 (除非您编写了一些疯狂的 self 更改软件,或者您选择重建和重新部署容器的镜像)
这就是为什么容器不允许开箱即用的持久性,以及 docker 与使用虚拟硬盘的常规 VM 的不同之处。但是,这仅适用于容器内部的持久性。硬盘上的 docker 软件正在更改的文件使用 docker 卷“挂载”到容器中,因此实际上并不是 docker 环境的一部分,而只是挂载到其中。 (更多信息请访问:https://docs.docker.com/userguide/dockervolumes/)
当您考虑这一点时,您可能想问的另一个问题是 docker 如何存储它在运行时对其磁盘所做的更改。真正值得一看的是 docker 是如何让这个工作的。容器硬盘的原始状态是镜像赋予它的。它可以不写入此图像。与 docker 镜像中的内容相比,容器内部状态的变化不是写入镜像,而是由容器内部状态的变化构成。Docker 使用了一种名为“Union Filesystem”的技术,它在 docker 镜像的初始状态之上创建了一个差异层。
这个“差异”(在下图中被称为可写容器)存储在内存中,并在您删除容器时消失。 (除非您使用命令“docker commit”,但是:我不建议这样做。新 docker 镜像的状态不会在 dockerfile 中表示,并且不能轻易地从重建中重新生成)
关于memory - Docker容器和内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702233/
我有一个简单的 HATEOAS 使用 构建的提供程序 Spring 这为我提供了以下资源: { "_links" : { "self" : { "href" : "http:/
这里是 Clojure 初学者,不确定问题中的术语是否正确。 我正在使用 clj-webdriver 出租车 API 构建网络抓取工具。它需要从多个站点抓取数据。以下实际上不是项目中的代码,但我已经对
我使用pthread lib 2.8,操作系统内核是arm上的Linux 2.6.37。在我的程序中,线程 A 使用 pthread 接口(interface)将调度优先级设置为 sched_get_
我有一个大约 400MB 的二进制文件,我想将其转换为 CSV 格式。输出的 CSV 文件将约为 1GB(根据我的计算)。 我读取二进制文件并将其存储在一个结构数组中(其他处理也需要),当用户想要将其
我在编写我的专业应用程序时遇到一个串口线程问题。我有cpu消耗。当我在我的项目中添加 SerialCtrl.h(来自项目 SerialCtrl http://www.codeproject.com/A
总结:似乎 c 代码的 RAM 消耗取决于变量排序。有没有办法自动优化? 更长的版本:在这里,我粘贴了两个版本的代码,它们仅在变量排序方面有所不同。 版本 1: static unsigned lon
我有一个处理图像编辑(裁剪和调整大小)的 Windows 应用程序项目。不幸的是,这些图像处理会消耗大量内存和 CPU 资源(很容易达到 600MB 或 50% cpu),而且它只是裁剪和调整大小 2
我创建了一个实例化类 10 亿次的循环,并且非常惊讶地看到它在 0 毫秒内运行并且根据 Windows 任务管理器没有消耗 CPU 时间。 正如您从下面的代码中看到的那样,我显然没有对默认构造函数执行
我们有以下用户名验证规则: 用户名可以包含字母数字字符 用户名可以有下划线、连字符或句号 现在假设用户名是 ASCII 用户名不能以句点开头或结尾 用户名不能开始、结束或有任何空格 我们有以下相同的正
如何获取 C# 中所有进程的列表,然后获取每个进程的当前内存和 CPU 消耗? 非常感谢示例代码。 最佳答案 Process class有一个 GetProcesses 方法,可以让您枚举正在运行的进
如何从 linux 2.6.32 机器上的源代码中限制 C 程序的物理内存消耗? 我需要确定系统使用的页面替换算法的类型。 问题是,如果不限制一个进程在内存中可以拥有的页面数量,就很难分析页面错误的模
我正在编写一个 Linux 应用程序,它观察其他应用程序并跟踪资源消耗。我计划使用 Java,但编程语言对我来说并不重要。目标很重要,所以我可以切换到另一种技术或使用模块。我的应用程序将任何选定的第三
我有一个图标,旁边有一个复选框,包含在一个面板中。面板有悬停效果,点击面板时想选中框。 我想使用或阻止复选框的所有事件,仅以编程方式选择它。我希望该框在屏幕上显示为“已启用”,而“在幕后”几乎不起作用
我正在使用服务 REST,它当前有 5025 条记录,但当我使用该服务时,只出现 1,000 条记录。我可以做什么来完全消耗所有记录? 这是我的代码示例: $http({ method:
我已经搜索了几个小时但没有成功,是否可以跟踪 Blob 容器上 SAS 凭据的消耗情况? 我将向几个客户提供 SAS 凭证,并且我希望能够跟踪他们的 SAS 使用情况(操作次数、带宽使用情况...)
我创建了具有 1.75 GB RAM 的 B1 应用服务计划。我还创建了一个应用程序服务并向其部署了 docker 镜像。现在我停止了 docker 镜像,它的状态已停止,并且它是该应用程序服务计划中
与我们的合作伙伴一起为我们的客户(一家售后汽车零部件零售商)开发一个项目,他们利用 AR 和 VR 做了很多很酷的事情。我们的想法是使用 Hololens 并尝试帮助我们的客户在其大型仓库中进行物流操
这是一个简短的 Haskell 程序,可以生成 440 Hz 的声音。它使用pulseaudio作为音频后端。 import GHC.Float import Control.Arrow import
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
tab.setOnCloseRequest(e -> { if (getEditorForTextArea(getSelectedTextArea()) != null
我是一名优秀的程序员,十分优秀!