Docker 限制容器对内存的使用详解

 更新时间:2017年08月04日 09:36:24   作者:CloudMan  
这篇文章主要介绍了Docker 限制容器对内存的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一个 docker host 上会运行若干容器,每个容器都需要 CPU、内存和 IO 资源。对于 KVM,VMware 等虚拟化技术,用户可以控制分配多少 CPU、内存资源给每个虚拟机。对于容器,Docker 也提供了类似的机制避免某个容器因占用太多资源而影响其他容器乃至整个 host 的性能。

内存限额

与操作系统类似,容器可使用的内存包括两部分:物理内存和 swap。 Docker 通过下面两组参数来控制容器内存的使用量。

1、 -m--memory:设置内存的使用限额,例如 100M, 2G。

2、 --memory-swap:设置内存+swap的使用限额。

当我们执行如下命令:

docker run -m 200M --memory-swap=300M ubuntu

其含义是允许该容器最多使用 200M 的内存和 100M 的 swap。默认情况下,上面两组参数为 -1,即对容器内存和 swap 的使用没有限制。

下面我们将使用 progrium/stress 镜像来学习如何为容器分配内存。该镜像可用于对容器执行压力测试。执行如下命令:

docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M

--vm 1:启动 1 个内存工作线程。

--vm-bytes 280M:每个线程分配 280M 内存。

运行结果如下:

因为 280M 在可分配的范围(300M)内,所以工作线程能够正常工作,其过程是:

  1. 分配 280M 内存。
  2. 释放 280M 内存。
  3. 再分配 280M 内存。
  4. 再释放 280M 内存。
  5. 一直循环......

如果让工作线程分配的内存超过 300M,结果如下:

分配的内存超过限额,stress 线程报错,容器退出。

如果在启动容器时只指定-m而不指定--memory-swap,那么--memory-swap默认为-m的两倍,比如:

docker run -it -m 200M ubuntu

容器最多使用 200M 物理内存和 200M swap。

内存限额就讨论到这里,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Docker网段和内网网段ip冲突导致无法访问网络的两种解决方法

    Docker网段和内网网段ip冲突导致无法访问网络的两种解决方法

    本文主要介绍了Docker网段和内网网段冲突导致无法访问网络的两种解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 使用Docker搭建Django,Nginx,R,Python部署环境的方法

    使用Docker搭建Django,Nginx,R,Python部署环境的方法

    本篇文章主要介绍了使用Docker搭建Django,Nginx,R,Python部署环境的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Docker同时安装MySQL和MariaDB的方法步骤

    Docker同时安装MySQL和MariaDB的方法步骤

    这篇文章主要介绍了Docker同时安装MySQL和MariaDB的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 教你使用Portainer管理多台Docker容器环境的方法

    教你使用Portainer管理多台Docker容器环境的方法

    这篇文章主要介绍了Portainer管理多台Docker容器环境,本文给大家介绍的非常详细,包括环境准备及管理docker的详细过程,需要的朋友可以参考下
    2021-11-11
  • Jenkins Docker静态agent节点的构建过程

    Jenkins Docker静态agent节点的构建过程

    这篇文章主要介绍了Jenkins Docker静态agent节点的构建,静态节点就是通过java -jar这条命令去启动起来就可以了,本文通过图文实例相结合给大家介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • Docker私有仓库的搭建和界面化管理详解

    Docker私有仓库的搭建和界面化管理详解

    这篇文章主要给大家介绍了关于Docker私有仓库的搭建和界面化管理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Docker具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • Docker镜像制作详解介绍

    Docker镜像制作详解介绍

    这篇文章主要介绍了 Docker镜像制作详解介绍的相关资料,需要的朋友可以参考下
    2016-10-10
  • 替换docker容器中的一个文件的实现

    替换docker容器中的一个文件的实现

    在某些情况下,我们可能确实需要更新容器内的文件,本文主要介绍了替换docker容器中的一个文件的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • docker实现MySQL数据同步的方法

    docker实现MySQL数据同步的方法

    docker的一大好处是在本地可以很方便快速的搭建负载均衡,主从同步等需要多主机的环境,本文主要介绍了docker实现MySQL数据同步的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • SpringCloud与Docker的集成原理解析

    SpringCloud与Docker的集成原理解析

    Docker的核心原理是通过将应用程序及其所有依赖项封装到独立的容器中,实现了跨平台、一致性和可移植性,这篇文章主要介绍了SpringCloud-Docker原理解析,需要的朋友可以参考下
    2024-02-02

最新评论