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

linux - Docker同样的镜像,为什么容器占有内存不一样?

吴鸿彩
2023-10-26

有个问题,我在本地虚拟机和云服务器 使用docker 启动同一个镜像,但本地和远程容器的内存占用差别很大

我确保使用的都是同一个镜像

这个是本地的linux中容器内存占用情况 1.4G
d5edc57f9304277dddee01232700013.png

这是远程的服务器容器内存占用情况,远程的这个容器应用并没有其他操作,跟本地相比整整多出快1个G,表示有点不理解 这是为什么 有没有大佬解释下
8b1d139369aee15caced7bf5e5a3cd5.png

共有2个答案

张亦
2023-10-26

内存占用会随着使用的场景增加的,这不是docker问题。

你不信你在线上重新启动一个gitlab镜像(确保不要提交任何代码仓库)和你本地的做对比。

杨昊
2023-10-26

这个问题涉及到Docker容器内存占用的多个因素。以下是可能导致容器内存占用不同的几个原因:

  1. 基础镜像的影响:虽然你确保了使用的都是同一个镜像,但需要检查一下这个镜像本身是否含有一些基础的操作系统或者应用软件,这些可能会占用一定的内存。
  2. 操作系统和硬件资源:你的本地环境和云服务器环境可能存在操作系统和硬件资源(如CPU、内存、磁盘等)的差异。这些差异可能导致容器在两个环境中运行时内存占用不同。
  3. 容器内部应用:虽然你说远程的容器应用并没有其他操作,但需要确认一下是否真的没有任何其他应用在运行。应用的行为、数量以及它们对内存的使用都会影响容器的内存占用。
  4. 容器配置:Docker容器的内存限制和资源分配可以通过docker run命令行参数进行配置。如果两个容器的配置不同,比如内存限制设置不同,那么可能会导致内存占用不同。
  5. 操作系统和Docker版本:不同的操作系统和Docker版本在处理容器时的性能和内存管理可能会有差异,这也会导致容器内存占用不同。
  6. 其他运行时参数:例如,你启动容器时使用的--memory-swapp、--memory-swap等参数可能会影响容器的内存占用。

因此,虽然看起来是同样的镜像,但由于上述多种原因,容器在两个不同环境中的内存占用可能会有所不同。如果你希望进一步了解具体原因,可以尝试查看容器内部的进程情况,或者对比两个环境的基础配置等。

 类似资料:
  • 「Allen 谈 Docker 系列」 DaoCloud 正在启动 Docker 技术系列文章,每周都会为大家推送一期真材实料的精选 Docker 文章。主讲人为 DaoCloud 核心开发团队成员 Allen(孙宏亮),他是 InfoQ 「Docker 源码分析」专栏作者,已出版《Docker 源码分析》一书。Allen 接触 Docker 近两年,爱钻研系统实现原理,及 Linux 操作系统。

  • https://hub.docker.com/_/python/tags?page=1&name=3.10-bullseye 上面是 docker hub 中,python:3.10-bullseye 的 digest 信息 下面是刚刚执行 docker pull python:3.10-bullseye 输出的 digest 信息 可以看到,本地拉取的 Digest 是 e917e3e93525

  • 问题内容: 我创建了两个列表和,但是每个列表都有不同的创建方法: 但是输出使我感到惊讶: 使用列表推导创建的列表在内存中更大,但是在Python中这两个列表相同。 这是为什么?这是CPython内部的东西,还是其他解释? 问题答案: 在编写时,Python知道它将需要一个正好包含10个对象的列表,因此它会精确地分配该对象。 当您使用列表推导时,Python不知道它需要多少。因此,随着元素的添加,列

  • 如何从coreos iso映像生成docker base映像?我尝试将iso映像转换为tar文件,但失败了。docker导入。。。只是为了。tar存档文件?谢谢

  • 我从Fedora通过Dockerfile制作了一个简单的图像(最初为320 MB)。 添加了Nano(这个1MB大小的微小编辑器),图像的大小上升到了530MB。我在上面添加了Git(大约30 MB),然后我的图像大小的sky-rockets达到了830 MB。 这不是疯了吗? 我已经尝试导出和导入容器来删除历史/中间图像。这一努力节省了25 MB,现在我的图像大小是804 MB。我也尝试在一个上

  • 通过前面的介绍,我们知道了Docker 镜像是多个基于 UnionFS 的镜像层依次挂载的结果,而容器的文件系统则是在以只读方式挂载镜像后增加的一个可读可写的文件系统复合而成。 Docker 中为我们提供了将容器中的这个可读可写的环境持久化为一个镜像层的方法,即docker commit。 docker commit将容器修改的内容保存为镜像,我们可以把它理解为提交容器的更改。 1.生成变更后的镜