docker 的资源控制和数据管理

Docker数据管理、网络通信、资源控制、docker swarm集群配置与使用 Doker数据管理 容器的数据管理操作可以方便查看容器内产生的数据或者将多个容器中的数据实现共享。管理Docker容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volumes Containers)。 一、数据卷(学习课本上是自行创建my-vol,这里实际运用一下,具体大家可以网上搜一下教程) 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目... 阅读详情

目录

一、docker 的资源控制

1、CPU资源控制

1.1 设置cpu 使用率上限

1.2  进行CPU 压力测试

1.3 设置cpu 使用时间上限

1.4 设置cpu 资源占比(多个容器时才有效)

1.5 指定容器绑定cpu

2、对内存使用的限制

3、对磁盘IO 配置控制的限制

二、数据管理

1、数据卷

2、数据卷容器

3、容器互联(使用centos 镜像)


一、docker 的资源控制

1、CPU资源控制

cgroups ,是一个非常强大的 Linux 内核工具,他不仅可以限制被 namespace 隔离起来的资源,还可以为资源设置权重,计算使用量,操控进程启停等等。

所有cgroups (Control groups) 实现了对资源的配额和度量。

cgroups 有四大功能

  • 资源限制: 可以对任务使用的资源总额进行限制
  • 优先级分配:通过分配的 cpu 时间片数据以及磁盘IO 带宽大小,实际上相当于控制了任务运行优先级
  • 资源统计:可以统计系统的资源使用量,如cpu 时长,内存使用等
  • 任务控制: cgroup 可以对任务执行挂起,恢复等操作

1.1 设置cpu 使用率上限

Linux 通过CFS(Complete Fair Scheduler,完全公平调度器) 来调度各个进程对cpu的使用。CFS默认的调度器周期100ms,我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间.

使用 --cpu-period 即可设置调度周期,使用--cpu-quota 即可设置在每个周期内容器能使用的cpu 时间。两者可以配合使用。而容器的CPU 配额必须不小于 1ms ,即 --cpu-quota 的额度必须 >=1000.

[root@host103 ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND   CREATED          STATUS          PORTS     NAMES
ed597b354adf   centos:7   "bash"    21 seconds ago   Up 19 seconds             test1
[root@host103 ~]# cd \
/sys/fs/cgroup/cpu/docker/ed597b354adf3d4cfd1b572cedb5d106077bcf62a31df44bc8aac3aa3deb5d1b/

[root@host103 ed597.....]# cat cpu.cfs_quota_us 
-1
[root@host103 ed597.....]# cat cpu.cfs_period_us 
100000

cpu.cfs_quota_us: 表示 cgroups 限制占用时间(微秒)默认为 -1 ,表示不限制

cpu.cfs_period_us: cpu 分配的周期(微秒,所以文件中用 us 表示),默认为 100000

如果设置为 50000 ,表示占用 50000/100000= 50% cpu

1.2  进行CPU 压力测试

[root@host103 ~]# docker exec  -it test1 /bin/bash
[root@ed597b354adf /]# vi  cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

[root@ed597b354adf /]# chmod  +x /cpu.sh
[root@ed597b354adf /]# ./cpu.sh

1.3 设置cpu 使用时间上限

[root@host103 ~]# cd /sys/fs/cgroup/cpu/docker/ed59...../
[root@host103 ed59.....]# echo 50000 > cpu.cfs_quota_us 
[root@host103 ed59.....]# top  

1.4 设置cpu 资源占比(多个容器时才有效)

docker 通过 --cpu-shares 指定CPU 份额,默认值为1024 ,值为1024 的倍数。

#先停止和删除之前容器
[root@host103 ~]# docker kill $(docker ps -aq)
[root@host103 ~]# docker rm  $(docker ps -aq)

#创建两个容器为c1 ,c2 若只有这两个容器,设置容器的权重,使得c1和c2的cpu资源占比为 1/3和2/3 
[root@host103 ~]# docker run -itd --name c1 --cpu-shares 1024  centos:7
47fa6089f568e616cba8cf05bf22279bd7ff0602cf31d4d685e3a37d4bd27d85
[root@host103 ~]# 
[root@host103 ~]# docker run -itd --name c2 --cpu-shares 2048  centos:7
25d0d2229f4ea05b5a290fd0a96f364b071826700826378b596e5cdf38f5e72c

#分别进入容器,进行压力测试
[root@host103 ~]# docker  exec -it c1 bash
[root@47fa6089f568 /]# yum -y install epel-release
[root@47fa6089f568 /]# yum -y install stress
#产生4个进程,每个进程都反复不听的精算随机数的平方根
[root@47fa6089f568 /]# stress -c 4

[root@host103 ~]# docker exec -it c2 bash
[root@25d0d2229f4e /]# yum -y install epel-release 
[root@25d0d2229f4e /]# yum -y install stress
#产生4个进程,每个进程都反复不听的精算随机数的平方根
[root@25d0d2229f4e /]# stress -c 4

#查看容器运行状态(动态更新)
[root@host103 ~]# docker stats
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O         PIDS
25d0d2229f4e   c2        260.34%   137.2MiB / 1.938GiB   6.92%     27.8MB / 484kB   25.3MB / 25.3MB   7
47fa6089f568   c1        140.19%   111.8MiB / 1.938GiB   5.63%     27.5MB / 416kB   58.1MB / 25.3MB   7

1.5 指定容器绑定cpu

#配置容器使用编号为 1,3 的CPU(cpu编号从0开始)
[root@host103 ~]# docker run -itd --name test3  --cpuset-cpus 1,3 centos:7 bash
90666bf2833d3b93bbcc043c66b5dff3f76ca43057aaacd3867d3d47f7e2d640

#进入容器,进行压力测试
[root@host103 ~]# docker exec  -it test3 bash
[root@90666bf2833d /]# yum -y install epel-release
[root@90666bf2833d /]# yum -y install stress
[root@90666bf2833d /]# stress -c 4

#先使用top 命令,在按下1 ,查看CPU的使用情况
[root@host103 ~]# top 

2、对内存使用的限制

-m (--memory=) 选项用于限制容器可以使用的最大内存

--memory-swap 和 --memory 一起使用可以限制swap 的大小。

正常情况下,--memory-swap 的值包含容器的可用内存和可用swap。

所以,-m 300m --memory-swap=1g 的含义为: 容器可以使用300M的物理内存,并且可以使用 700M(1G-300M)的swap

  • 如果 --memory-swap 设置为0或者 不设置,则容器可以使用swap 大小为 -m 值的两倍
  • 如果 --memory-swap 的值和 -m 值相同,则容器不能使用 swap
  • 如果 --memory-swap 的值为 -1 ,它表示容器程序使用的内存受限,而可以使用的swap空间不受限制(宿主机有多少swap,容器就可以使用多少)

3、对磁盘IO 配置控制的限制

--device-read-bps: 限制某个设备上的读速度 bps(数据量),单位可以是kb,mb(M)或者gb。

eg: docker run -itd --name test --device-read-bps /dev/sda:1M centos:7 /bin/bash

--device-write-bps: 限制某个设备上的写速度(数据量),单位可以是kb,mb(M)或者gb。

eg: docker run -itd --name test --device-write-bps /dev/sda:1M centos:7 /bin/bash

--device-read-iops : 限制读某个设备的iops(次数)

--device-write-iops: 限制写入某个设备iops(次数)

#创建容器,并限制写速度
[root@host103 ~]# docker run -it  --name test4 --device-write-bps /dev/sda:1mb centos:7 bash

#通过dd来验证写速度
[root@98dbd982b24c /]# dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 10.0035 s, 1.0 MB/s

二、数据管理

管理Docker 容器中数据主要有两种方式:数据卷(Data Volumes) 和数据卷容器(DataVolumes Containers)。

1、数据卷

数据卷是一个供容器使用的特殊目录,位于容器中,可将书主机的目录挂载到数据卷上,对数据卷的修改操作立即可见 ,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷使用类似于Linux下对目录进行的mount操作。

#当前宿主机没有/var/www目录
[root@host103 ~]# ls /var/www
ls: 无法访问/var/www: 没有那个文件或目录

#宿主机目录/var/www 挂载到容器中/data1.
#注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker 会自动创建相应的路径.
#-v 选项可以在容器内创建数据卷
[root@host103 ~]# docker run -v /var/www:/data1 --name web1 -it centos:7 bash
#docker 容器里有了 data1目录
[root@d66def26bb22 /]# ls 
anaconda-post.log  data1  etc   lib    media  opt   root  sbin  sys  usr
bin                dev    home  lib64  mnt    proc  run   srv   tmp  var
[root@d66def26bb22 /]# echo "this is web 1" >> /data1/web1.txt
[root@d66def26bb22 /]# exit
exit

#宿主机有了/var/www,并且该目录下有了web1.txt,且有内容
[root@host103 ~]# cat /var/www/web1.txt 
this is web 1

2、数据卷容器

如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用

#创建一个容器作为数据卷容器
[root@host103 ~]# docker run --name web2 -v /data1 -v /data2 -it centos:7  bash
[root@63ec486d5683 /]# ls                 
anaconda-post.log  bin  data1  data2  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@63ec486d5683 /]# echo "this is web2 data1" > /data1/abc.txt
[root@63ec486d5683 /]# 
[root@63ec486d5683 /]# echo "this is web2 data2" > /data2/ABC.txt
[root@63ec486d5683 /]# 
[root@63ec486d5683 /]# cat /data1/abc.txt 
this is web2 data1
[root@63ec486d5683 /]# cat /data2/ABC.txt 
this is web2 data2


#使用 --volumes-from 挂载web2 容器中的数据卷到新容器
[root@host103 ~]# docker run -it  --volumes-from web2 --name web3 centos:7 bash
[root@bdbbd457daea /]# ls
anaconda-post.log  bin  data1  data2  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@bdbbd457daea /]# ls data1 data2
data1:
abc.txt

data2:
ABC.txt
[root@bdbbd457daea /]# cat data1/abc.txt 
this is web2 data1
[root@bdbbd457daea /]# cat data2/ABC.txt 
this is web2 data

3、容器互联(使用centos 镜像)

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收器之间建立一条隧道,接收容器可以看到源容器指定的信息

#创建并运行容器,取名为web4
[root@host103 ~]# docker run -itd -P --name web4 centos:7 bash
bc1caf5b2f441c834e70eb3307dab72bdb597568e1af6070f2b45f1cf8d9196e
[root@host103 ~]# 

#创建并运行容器,取名为web5. --link 容器名:连接的别名
[root@host103 ~]# docker run -itd --name web5 --link web4:WEB4 centos:7 bash
107f5c583c1db9c456c47952081a084efd66de762a905f471776dd65949bb892
[root@host103 ~]# 

#进入容器,ping 容器名,ping 别名,都可以ping通
[root@host103 ~]# docker exec -it web5 bash
[root@107f5c583c1d /]# ping web4
[root@107f5c583c1d /]# ping WEB4

后端架构师必知必会系列:服务容器与资源调度 作者:禅与计算机程序设计艺术 1.简介 “云计算”一词被炒得火热,从“虚拟化”、“自动化”到“API 网关”,甚至还有“无服务器”(Serverless),但这只是云计算技术的皮毛,真正让云计算落地的,是“云编排”,即通过编排工具将各种基础设施组件(如数据库、消息队列、缓存等)按照预先规划好的逻辑拼装, 阅读详情

相关推荐

应用容器集群管理及调度系统设计方案

作者:禅与计算机程序设计艺术 1.简介 云计算、大数据、容器化技术已经成为IT行业的热门话题。容器化技术能够很好地实现资源的节约、利用率的提升以及开发、测试、部署等环节的自动化。但同时带来的一个问题就是如何更加高效地对容器进行管理、调度、分配资源。因此,基于容器的分布式应用集群管理及调度系统的设计,在本

AI天才研究院 2051

Docker 容器编排与调度的最佳实践

1.背景介绍 Docker 是一种轻量级的虚拟化容器技术,它可以将应用程序及其依赖项打包成一个可移植的镜像,并在任何支持 Docker 的平台上运行。随着微服务架构的普及,Docker 容器化技术已经成为现代软件开发和部署的核心技术。 容器编排与调度是 Docker 技术的核心功能之一,它可以自动化地管理和调度容器,以实现高效的资源利用和高可用性。在大规模分布式系统中,容器编排与调度可以帮助开...

AI天才研究院 666

VirtualBox增强功能安装全指南:从下载到配置复制粘贴功能

本文详细介绍了VirtualBox增强功能的完整安装与配置流程,重点解决了虚拟机与主机间复制粘贴、文件拖放等核心协作难题。通过分步指南和故障排查,帮助用户在不同操作系统(如Windows、Linux)中实现无缝集成,提升虚拟化工作效率与体验。

weixin_29206669的博客 419

【基于容器的部署、扩展和管理】3.7 资源调度和优化

总而言之,云原生资源调度和优化是为了实现高可用性、高性能和低成本的应用程序而设计的一系列技术手段,包括自动化资源调度、弹性伸缩、资源利用率优化、多集群管理和服务网格等。这些技术手段可以帮助企业更好地适应云计算环境下的需求,提高应用程序的可靠性、性能和灵活性。然后,它将为该 Deployment 添加资源限制并将更新后的 Deployment 应用到集群中。云原生应用的资源调度和优化是确保应用高可用性、高性能和低成本的关键。

热爱技术,享受生活 2万+

ESP32+micro-ROS机器人开发实战:轻量级ROS2嵌入式集成

ROS2是现代机器人软件栈的核心框架,其基于DDS的分布式通信与QoS保障能力为多节点协同提供基础支撑;而micro-ROS作为专为微控制器优化的ROS2兼容中间件,解决了资源受限设备(如ESP32)接入ROS2生态的关键难题。其通过分层架构将DDS通信下沉至上位机Agent,使MCU仅需运行轻量Client,大幅降低内存开销(实测<180KB)并保留标准ROS2接口语义。该方案广泛应用于教育机器人、移动底盘、传感器节点等嵌入式场景,尤其适合基于ESP-IDF开发的Wi-Fi/BLE物联网机器人系统。本文以

weixin_29025501的博客 400

使用3sigma原则去除数据表中的极端值

本文使用3sigma解决数据表中出现的极端值问题,其中包括基本原理、使用原则(检验方法)、代码展示这3个部分

qq_51397866的博客 4380

docker---资源控制

怎么对容器使用cpu进行限制:容器占用cpu的时间容器占用cpu的权重容器绑定cpu容器的宿主机的内存使用限制:-mswap:必须和限制内存一块使用-m 512m磁盘I/O(了解即可)清理docker占用的磁盘空间:会删除已经停止的容器,删除所有未被使用的网桥设备、删除所有未被使用的镜像,删除创建容器时的缓存以及无用的数据卷。

qq_61843057的博客 877

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

docker的资源控制及docker数据管理

cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。所以 cgroups(Control groups)实现了对资源的配额和度量。

m0_71493671的博客 535

R_柱状图(加误差线,显著性差异)

先放最终效果图 结果图 # bar_plot 2021/01/19 # 导入所需的包 library(ggplot2) library(ggthemr) library(ggsignif) library(tidyverse) library(dplyr) library(ggpubr) library(devEMF) # 导入并处理数据,需要两张表,一个是原始汇总表格,另外一些是每一...

wt141643的博客 2万+

大疆前端开发面试题及参考答案(4万字长文)

在前端项目中,难点和性能优化的挑战无处不在。比如在处理复杂交互界面时,实现流畅的动画效果和实时反馈就是一大难点。当界面中有大量元素需要同时进行交互和动态更新,像电商平台的商品筛选和排序功能,不仅要保证操作的即时响应,还要确保界面在各种设备和网络环境下的稳定性,这就需要对事件处理、DOM 操作和数据更新机制有深入理解。在性能优化方面,首屏加载速度是常见的难点。当页面包含大量图片、脚本和样式文件时,如何合理地进行资源压缩、合并与缓存,以减少加载时间,是需要精心考虑的。

大模型大数据攻城狮的专栏 1155

【Docker2】Docker网络模式、数据管理和资源控制

Docker网络模式、数据管理和资源控制

m0_71593537的博客 1142

Claude Code 100个真实案例 - 用AI搭建LangChain多工具Agent(自主搜索+查询)

本案例展示如何使用 Claude Code 搭建一个 LangChain 多工具 Agent 系统。Agent 能够自主决定调用搜索引擎、数据库查询、天气查询、计算器等工具,像人类助手一样拆解问题并逐步解决。

yueyeguzhuo的专栏 559

docker的资源控制及数据管理

cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。所以 cgroups(Control groups)实现了对资源的配额和度量。

weixin_58580419的博客 506

YOLOv12改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度(二次改进A2C2f)

本文记录的是利用改进检测精度,详细说明了优化原因,注意事项等。原论文在红外小目标检测任务中,小目标在多次下采样操作中容易丢失关键信息。通过替代编码器和解码器基本组件中的传统卷积操作,更好地保留小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch si

Limiiiing的博客 1888

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[云原生1.]Docker数据管理与Cgroups资源控制管理

Cgroup 是的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 CPU、内存、磁盘 IO 等等) 的机制,被 LXC、docker 等很多项目用于实现进程资源控制。Cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构<?font>,I/O 或内存的分配控制等具体的资源管理是通过该功能来实现的。时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。

m0_74170357的博客 1318

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

docker资源控制和数据管理

docker资源控制和数据管理

FASTg的博客 198

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Docker 数据管理、容器互联、网络与资源控制

bridgedocker的默认网络模式。使用此模式的每个容器都有独立的网络命名空间namespace,即每个容器都有独立的IP、端口范围(每个容器可以用同一个端口)、路由、iptables规则等网络资源。命令:docker run [--network=bridge] ....host容器与宿主机共享网络namespace,即容器和宿主机使用同一个IP、端口范围(容器与宿主机或其它使用host模式的容器不能用同一个端口)、路由、iptables规则等网络资源。

lcy913的博客 1411

Docker容器:docker的资源控制及docker数据管理

本文主要对docker容器资源的控制,包括docker的cpu控制、docker的I/O读写控制、docker的内存+swap使用上限控制及测试;docker数据管理包括,数据卷挂载方式、docker容器之间的共享配置

Katie_ff的博客 1273

docker 的资源控制和数据管理

docker 的资源控制,数据管理,容器互联 目录一: docker 的资源控制1.1 CPU资源控制1.1.1 设置cpu 使用率上限1.1.2 进行CPU 压力测试1.1.3 设置cpu 使用时间上限1.1.4 设置cpu 资源占比(多个容器时才有效)1.1.5 指定容器绑定cpu1.2 对内存使用的限制1.3 对磁盘IO 配置控制的限制二: 数据管理2.1 数据卷2.2 数据卷容器2....

知己一语的博客 333

Docker深入探索:网络与资源控制、数据管理与容器互联以及镜像生成

在当今快速发展的云计算时代,Docker作为容器化技术的领航者,凭借其轻量级、可移植的特性,已经成为软件开发与部署的重要工具

hy199707的博客 1515

【Docker二】docker网络模式、网络通信、数据管理、资源控制

1、docker网络模式的的概念 2、docker网络通信 3、docker资管共享 4、docker数据管理 5、docker的资源控制

koeda1的博客 863

Docker数据管理、网络通信以及资源控制

Docker的安装及镜像、容器的基本操作详见博客https://blog.51cto.com/11134648/2160257下面介绍Docker数据管理、网络通信以及资源控制的方法,详细如下: Doker数据管理 容器的数据管理操作可以方便查看容器内产生的数据或者将多个容器中的数据实现共享。管理Docker容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Vol...

weixin_34342992的博客 110

Docker系列之 资源控制和数据管理

docker资源控制及数据管理

weixin_52269501的博客 208

Docker容器与虚拟化技术:Docker资源控制、数据管理

docker system prune -a #可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络。

cronaldo91的博客 920
上一篇: docker网络模式
下一篇: consul 自动发现与自动注册
lin琳.
博客等级 码龄6年 222粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值