最近我在使用开源统计Umami过程中,发现CPU和内存经常占满,导致其它服务都不能正常使用。Umami我使用的docker-compose进行部署,于是打算使用docker-compose限制下容器的CPU和内存使用来解决这个问题。

吐槽

于是我就去搜索相关文档寻找限制容器资源使用率的方法,给我的感觉是Docker官方在设计docker-compose的时候有点混乱。

  1. 首先是docker-compose的版本分1.x2.x不同版本特性不一样
  2. docker-compose.yaml里面的version又分多个版本(1.x-3.x),不同的版本特性不一样
  3. 官方似乎没有明确的文档指名各版本的区别,而且升级版本的速度还贼快

docker-compose限制CPU和内存

我直接贴出Umami的完整docker-compose.yaml内容:

---
version: '3'
services:
umami:
image: docker.umami.dev/umami-software/umami:mysql-latest
deploy:
resources:
limits:
cpus: '0.50'
memory: 500M
reservations:
cpus: '0.25'
memory: 200M
ports:
- "3000:3000"
environment:
DATABASE_URL: mysql://umami:xxx@127.0.0.1:3306/umami
DATABASE_TYPE: mysql
HASH_SALT: replace-me-with-a-random-string
restart: always
network_mode: "host"

限制指令为deploy.resources.limits这部分,注意节点位置,上面这部分限制的含义是:

Umami服务的CPU使用被限制在最多50%的CPU能力,内存使用被限制在最多500MB。同时,这个服务至少需要25%的CPU和200MB的内存。

我们启动的时候命令需要发生一些变化,否则不会生效:

#原本的启动命令为
docker-compse up -d
# 需要添加一个参数--compatibility表示以兼容模式来运行
docker-compose --compatibility up -d

这里的关键在于添加--compatibility参数以兼容模式来运行,否则限制不会生效。

验证

通过上述方法限制容器CPU和内存后,再继续使用命令:docker stats查看容器资源使用情况:

可以看到umami这个容器被成功限制为500MB内存。

总结

  1. docker-compose的版本设计非常混乱,且没找到明确的官方特性对比说明
  2. docker-compose.yaml限制内存需要添加deploy.resources.limits节点
  3. docker-compose命令启动的时候需要添加--compatibility参数以兼容模式来运行,否则限制不会生效

如何在Docker Compose中限制容器的CPU和内存使用?的更多相关文章

  1. ubuntu系统中查看本机cpu和内存信息的命令和用法

    https://zhidao.baidu.com/question/192966322.html 写出ubuntu linux系统中查看本机cpu和内存信息的命令和用法,以及如何解读这些命令 ubun ...

  2. Docker Compose—简化复杂容器应用的利器

    Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...

  3. Docker | Compose创建mysql容器

    本文通过Docker Compose来创建mysql容器 在linux服务器上创建文件,用于管理容器 mkdir docker-mysql cd docker-mysql vim docker-com ...

  4. docker compose设置不同容器间通信

    docker compose新启动了一个容器,这个时候怎么去连接到其他容器呢,去容器里面ping发现不通.一般来说是因为和其他容器没有在一个网络环境里面.首先用命令查看一下当前存在哪些网络环境. 使用 ...

  5. docker containerd中的容器操作

    containerd的中的各种操作都是通过Task来进行的,因此对于容器的create, start, delete等等操作其实都是一个个的Task而已. Task的数据结构如下所示: type Ta ...

  6. linux中Java项目占用cpu、内存过高时的排查经历

    一.使用top命令查看占用高资源的java项目的进程ID(pid): top 二.查看该进程中的线程所占用资源的情况:top -Hp pid 三.查看该线程对应的16进制:printf %x 1112 ...

  7. Docker学习笔记之使用 Docker Compose 管理容器

    0x00 概述 通过之前的介绍,我们已经基本掌握了构建.运行容器的方法,但这还远远不够,由于 Docker 采用轻量级容器的设计,每个容器一般只运行一个软件,而目前绝大多数应用系统都绝不是一个软件所能 ...

  8. Docker 三剑客之 Docker Compose

    Docker Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,开源地址:https://github.com/docker/compose Dock ...

  9. 009.Docker Compose部署及基础使用

    一 Docker Compose概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用单个命令,您可以从配 ...

  10. Docker学习笔记之编写 Docker Compose 项目

    0x00 概述 通过阅读之前的小节,相信大家对 Docker 在开发中的应用已经有了一定的了解.作为一款实用的软件,我们必须回归到实践中来,这样才能更好地理解 Docker 的实用逻辑和背后的原理.在 ...

随机推荐

  1. 使用VSCode调试C#时,Console.ReadLine()弹出命令框调试

    原文链接:https://blog.csdn.net/qq_29503199/article/details/88351498   要在调试时读取输入,可以在 launch.json 中使用配置中的 ...

  2. 文件上传 upload-labs Pass-18 条件竞争

    Pass-18 条件竞争 审计源码 $is_upload = false; $msg = null; if(isset($_POST['submit'])){ $ext_arr = array('jp ...

  3. 记录一次线上gitlab11.x升级gitlab14.x版本操作

    前言:gitlab11升级到14还是有挺多需要注意的坑,也算是做一次积累吧,升级前后,gitalb的WEB界面也变化了很多,升级过程需要注意的地方我放到最后说明,挺关键的 一.首先需要下载好要升级的包 ...

  4. Spring--事务案例的实现

    案例实现(主要是想用Spring实现一下MyBatis的相关内容) JDBCConfig.java MyBatisConfig.java SpringConfig.java accountDao.ja ...

  5. mybatis-plus 开发环境在控制台打印日志

    参考博客:https://blog.csdn.net/qq_32929057/article/details/109291919 # 注意在生产环境注释掉 mubatis-plus: configur ...

  6. el与data的两种写法

    el的两种写法 Vue初始化(被创建)后会判断有无el 有el:创建Vue实例对象的时候配置el属性 无el:通过vm.$mount('#root')指定el的值 data的两种写法 对象式:data ...

  7. 2022年8月学科能力综合测试(TACA)试题解答 Mathemaitca练习

    目录 试题地址 1 4 5 10 13 你让我猜我肯定这么猜 试题地址 https://k.sina.com.cn/article_2897328623_acb1b9ef019011qen.html ...

  8. DVWA-SQL Injection(SQL注入)

    SQL Injection,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的.结构,从而达到执行恶意SQL语句的目的. LOW: 代码审计: SQL Injection Source vuln ...

  9. CAS 6.x + Delegated Authentication SAML2.0 配置记录

    最近领导派了一个活儿, 需要把我们CAS系统的身份识别交给甲方的系统, 甲方的系统是SAML2.0的协议. 由于之前对SAML2.0协议了解不多,折腾了不少时间,在这里记录一下.以后忘掉还可以看看. ...

  10. Java面试——Nginx

    一. 二.Nginx 的优点 [1]速度更快:这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应:另一方面,在高峰期(如有数以万计的并发请求),Nginx 可以比其他 Web服务器更快地 ...