docker修改容器内存大小的实现方式

bangongJIAO1@c 发布于 2025-12-18 阅读(3)
目录
  • 前言
  • 1.docker内存限制的两种方式
  • 2.方式一:-m参数限制
  • 3.方式二:修改hostconfig.json文件限制
    • 1.查找容器对应的hostconfig.json文件
    • 2.停止docker
    • 3.修改hostconfig.json文件
    • 4.启动docker
  • 补充:docker 运行指定内存
    • 总结

      前言

      最近在学习公司开发的平台业务,需要将应用部署一遍。我自己电脑内存为16g,开了一台8g内存的centos虚拟机。大部分服务都是部署在docker容器内的,在docker容器部署pulsar的时候竟然发现启动命令没有内存限制,百度了一圈也没找到可以在哪里添加内存限制。只好硬着头皮启动服务,结果电脑那叫一个卡呀,8g的内存占的满满当当的。使用top查看内存占用,发现pulsar服务占用了两三个g的内存,而且别的应用因为内存不够停掉之后,pulsar还会把剩余的内存给占用掉,这nm不是无底洞吗。于是我想了各种办法限制pulsar服务的内存占用。

      1.docker内存限制的两种方式

      docker内存限制有两种方式:

      • 创建容器时添加-m参数,单位可以是b,k,m,g
      • 如果已经存在容器,修改该容器的hostconfig.json文件

      2.方式一:-m参数限制

      创建容器时我们可以添加-m参数限制容器的内存占用。单位是b,k,m,b
      例如:

      docker run -dit --name test -m 400m -p 3306:3306 mysql
      #创建mysql的镜像实例,并限制容器占用内存大小为400m
      

      3.方式二:修改hostconfig.json文件限制

      hostconfig.hson文件是容器的配置文件,每一个容器都有一个对应的 hostconfig.json配置文件,我们在创建容器时使用的任何参数,都可以在这里配置,功能十分的强劲

      1.查找容器对应的hostconfig.json文件

      docker ps  #找到要修改的容器id,记住它,后面要根据这个id找文件夹
      find / -name hostconfig.json #全局搜索hostconfig.json文件,文件的最后一级目录就是容器id
      

      通过上面的命令,就可以找到容器对应的hostconfig.json文件了。

      2.停止docker

      在修改hostconfig.json文件前,必须要停止docker,否则修改无效

      systemctl stop docker
      

      3.修改hostconfig.json文件

      通过vi命令修改配置文件,

      docker修改容器内存大小的实现方式

      找到Memory这一项,修改内存大小。请注意:这里的单位默认为bit。最小内存限制为4m,也就是,4x1024x1024。我这里修改为700mb,也就是700x1024x1024。

      修改完成之后保存退出。

      4.启动docker

      systemctl start docker

      5.大功告成,完结撒花

      补充:docker 运行指定内存

      -m,--memory                  内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为 4M
      --memory-swap                内存+交换分区大小总限制。格式同上。必须必-m设置的大
      --memory-reservation         内存的软性限制。格式同上
      --oom-kill-disable           是否阻止 OOM killer 杀死容器,默认没设置
      --oom-score-adj              容器被 OOM killer 杀死的优先级,范围是[-1000, 1000],默认为 0
      --memory-swappiness          用于设置容器的虚拟内存控制行为。值为 0~100 之间的整数
      --kernel-memory              核心内存限制。格式同上,最小为 4M
      

      查看事例:

      [root@sannian ~]# docker run -d -m 1G --memory-swap 3G -p 9999:80  --restart=always --name gitlab twang2218/gitlab-ce-zh
      a3254078a79a084f3f3bed5f4ade3e26c7d86951cd822d95b113227d75b00097
      
      [root@sannian ~]# docker ps
      CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS                   PORTS                                   NAMES
      a3254078a79a        twang2218/gitlab-ce-zh   "/assets/wrapper"   21 minutes ago      Up 2 minutes (healthy)   22/tcp, 443/tcp, 0.0.0.0:9999->80/tcp   gitlab
      
      [root@sannian ~]# docker images
      REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
      twang2218/gitlab-ce-zh                                   latest              18da462b5ff5        3 months ago        1.61GB
      registry-vpc.cn-hangzhou.aliyuncs.com/wenty/jumpserver   latest              055f42f305f5        7 months ago        1.41GB
      registry.cn-hangzhou.aliyuncs.com/wenty/jumpserver       latest              055f42f305f5        7 months ago        1.41GB
      registry.jumpserver.org/public/jumpserver                1.0.0               055f42f305f5        7 months ago        1.41GB
      registry.jumpserver.org/public/jumpserver                latest              055f42f305f5        7 months ago        1.41GB
      
      

      总结