docker 网络及如何资源(CPU/内存/磁盘)控制

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

docker网络模式

Host

容器与宿主机共享网络namespace,即容器和宿主机使用同一个IP、端口范围(容器与宿主机或其他使用host模式的容器不能用同一个端口)、路由、iptables规则等网络资源

设置此模式
docker run --network=host

Container

和指定已存在的容器共享网络namespace,即这两个容器使用同一个IP、端口范围(容器与指定的容器不能用同一个端口)、路由、iptables规则等网络资源。

设置此模式
docker run --network=container:容器名|容器ID

None

每个容器都有独立的网络namespace,但是容器没有自己的eth0网卡、IP、端口等网络资源,只有lo网卡

设置此模式
docker run --network=none

Bridge

docker默认网络模式,使用此模式下的每个容器都有独立的网络命名空间(namespace),即每个容器都有独立的IP、端口范围(每个容器可以用同一个端口)、路由、iptables规则等网络信息

设置此模式
docker run [--network=bridge](可不指定,默认的)

自定义网络

可以自己定义创建一个网段、网桥、网络模式,从而可自定义容器的IP来创建容器

创建自定义网络:

docker network create --subnet 自定义网段 --opt"com.docker.network.bridge.name"="自定义网桥名"  自定义网络模式名
​
docker run --network 自定义网络模式名 --ip 自定义容器IP

查看docker网络列表

docker network ls    或  docker network list    

资源控制

Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。 cgroup 资源限制(限制容器进程对CPU、内存、磁盘IO等资源的最大使用量)

1、CPU资源控制

cd /sys/fs/cgroup/cpu/docker/容器id
cat cpu.cfs_quota_us  
表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制。 如果设为50000,表示占用50000/100000=50%的CPU。
​
cat cpu.cfs_period_us 
cpu分配的周期(微秒,所以文件名中用 us 表示),默认为100000。

1)设置单个容器进程能够使用的CPU使用率上限

进行CPU压力测试

docker run -itd --name test5 centos:7 /bin/bash
docker ps -a #查看对应的容器id
docker exec -it 容器id /bin/bash
​
vi /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
​
chmod +x /cpu.sh
./cpu.sh
​
top   #可以看到这个脚本占了很多的cpu资源
 
cd /sys/fs/cgroup/cpu/docker/容器id
echo 50000 > cpu.cfs_quota_us 
​
docker exec -it 容器id /bin/bash
./cpu.sh
​
top   #可以看到cpu占用率接近50%,cgroups对cpu的控制起了效果
针对新建的容器
docker run --cpu-period 单个CPU调度周期时间(1000~1000000) --cpu--quota 容器进程能够使用的最大CPU时间(>=1000)
针对已存在的容器
修改/sys/fs/cgroup/cpu/docker/容器id/目录下的cat cpu.cfs_quota_uscat cpu.cfs_period_us文件的值docker run -itd --name test5 centos:7 /bin/bash
docker ps -a
cd/sys/fs/cgroup/cpu/docker/容器id
cpu.cfs_quota_us
cpu.cfs_period_us

2)设置多个容器的CPU占用份额

(只能在多个容器同时运行且CPU资源紧张时生效)

docker run --cpu-shares 容器进程最大占用CPU的份额(值为1024的倍数)

#创建两个容器为 c1 和 c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为1/3和2/3。
docker run -itd --name c1 --cpu-shares 1024 centos:7 /bin/bash
docker run -itd --name c2 --cpu-shares 2048 centos:7 /bin/bash
​
#分别进入容器,进行压力测试
docker exec -it c1 bash
docker exec -it c2 bash 
yum install -y epel-release
yum install -y stress
stress -c 4             #产生四个进程,每个进程都反复不停的计算随机数的平方根
​
#查看容器运行状态(动态更新)
docker stats

可以看到在 CPU 进行时间片分配的时候,容器 c2 比容器 c1 多一倍的机会获得 CPU 的时间片。 但分配的结果取决于当时主机和其他容器的运行状态, 实际上也无法保证容器 c1 一定能获得 CPU 时间片。比如容器 c1 的进程一直是空闲的,那么容器 c2 是可以获取比容器 c1 更多的 CPU 时间片的。极端情况下,例如主机上只运行了一个容器,即使它的 CPU 份额只有 50,它也可以独占整个主机的 CPU 资源。

Cgroups 只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的 CPU 份额来确定有多少 CPU 资源分配给它,资源分配结果取决于同时运行的其他容器的 CPU 分配和容器中进程运行情况。

3)设置容器绑定指定的CPU

docker run --cpuset-cpus CPUID1[,CPUID2,....]
​
#先分配虚拟机4个CPU核数
docker run -itd --name test7 --cpuset-cpus 1,3 centos:7 /bin/bash绑定cpu1和3
​
#进入容器,进行压力测试
yum install -y epel-release
yum install stress -y
stress -c 4
​
#退出容器,执行 top 命令再按 1 查看CPU使用情况。

2、内存限制

设置容器能够使用的内存和swap的值

-m(--memory=) 选项用于限制容器可以使用的最大内存docker run -itd --name wx -m 512m centos:7 bash

docker run -m 内存大小 --memory-swap 内存和swap的总值
限制可用的 swap 大小, --memory-swap
强调一下,--memory-swap 是必须要与 --memory 一起使用的。内存设置0或者不设置,表示swap为内存的两倍内存设置-1,表示不限制swap的值,宿主机有多少,容器就可使用多少内存设置与-m一样的值,表示不适用swap

3、磁盘IO限制

docker run --device-read-bps 磁盘设备文件路径:速率 #限制容器在某个磁盘上读的速度--device-write-bps 磁盘设备文件路径:速率 #限制容器在某个磁盘上写的速度--device-read-iops 磁盘设备文件路径:次数 #限制容器在某个磁盘上读的次数--device-write-iops 磁盘设备文件路径:次数 #限制容器在某个磁盘上写的速度

 清除已停止的容器、没用到的镜像和网络、缓存

docker清空docker system prune -a先查看目前所有的镜像和容器docker ps -a docker images

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第140期 为什么有人无脑吹分布式(20240126)

数据库管理140期 2024-01-26 第140期 为什么有人无脑吹分布式(20240126)1 环境2 场景3 首席补刀总结 第140期 为什么有人无脑吹分布式(20240126) 作者:胖头鱼的鱼缸(尹海文) Oracle ACE Associa…

mac安装telnet命令

1、安装brew 在mac终端执行命令: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 报错: curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercon…

C++ 设计模式之解释器模式

【声明】本题目来源于卡码网(卡码网KamaCoder) 【提示:如果不想看文字介绍,可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是解释器模式(第22种设计模式) 解释器模式(Interpreter…

CodeGPT

GitCode - 开发者的代码家园 gitcode.com/ inscode.csdn.net/liujiaping/java_1706242128563/edit?openFileMain.java&editTypelite marketplace.visualstudio.com/items?itemNameCSDN.csdn-codegpt&spm1018.2226.3001.9836&extra%5Butm_source%5Dvip_chatgpt_c…

【算法】用JAVA代码实现LRU 【缓存】【LRU】

LRU(Least Recently Used)是一种常见的缓存淘汰策略,用于在缓存空间不足时确定哪些数据应该被淘汰。其基本原则是淘汰最近最少被访问的数据。 工作原理: 最近使用优先: LRU算法基于这样的思想:最近被使用的数据很可能在短时间内还会被使用,因此保留这些数据有助于提高缓…

linux bash shell的getopt以及函数用法小记

getopt 长选项 短选项 可选参数whilecaseifbasename函数变量shiftread 实现功能描述: 1. 实现可选参数传入 -c 或 --clearBuild。 2. 用shell脚本来实现选择,make时是否clean。 3. 可以打印用法帮助 和 作者信息。 #!/bin/bash# sh函数定义 *******…

vue3 实现上传图片裁剪

在线的例子以及代码,请点击访问链接

实力上榜!安全狗入选《CCSIP 2023中国网络安全行业业全景册(第六版)》多个细项

1月24日,Freebuf发布了《CCSIP 2023中国网络安全行业业全景册(第六版)》。 作为国内云原生安全领导厂商,安全狗也入选多个细分领域。 厦门服云信息科技有限公司(品牌名:安全狗)创办于2013年&…

学习gin框架知识的小注意点

Gin框架的初始化 有些项目中 初始化gin框架写的是: r : gin.New() r.Use(logger.GinLogger(), logger.GinRecovery(true)) 而不是r : gin.Default() 为什么呢? 点击进入Default源码发现其实他也是new两个中间件,(Logger&…

【并发编程】锁死的问题——如何解决?以及如何避免?

目录 1.如何解决 一、死锁的定义和原因 1.1 定义 1.2 原因 二、常见的死锁场景 2.1 线程间相互等待资源 2.2 嵌套锁的循环等待 2.3 对资源的有序请求 三、死锁排查的方法 3.1 使用jstack命令 3.2 使用jconsole 3.3 使用VisualVM 四、常见的解决方案 4.1 避免嵌套锁…

深入研究C语言数组:高级技巧和性能优化的探索

在前文中,我们介绍了C语言数组的基本概念、多维数组的使用以及作为函数参数的传递方式。本文将进一步探索C语言数组的高级用法和性能优化技巧,帮助读者更深入地理解和运用数组。 动态数组 C语言中,数组的大小在创建时就被确定了&#xff0c…

STK姿态分析(一)矢量组件

文章目录 内容简介一、卫星矢量二、卫星坐标平面三、卫星姿态球面 – 内容简介 接下来一系列文章将进行STK目标(卫星、导弹、火箭、飞机、船舶)姿态分析的仿真。本篇将使用矢量(vector)组件对卫星姿态、传感器指向等进行3D可视化…

注册表学习——注册表结构

简介:注册表是由很多项和值构成的。 HEKY_USERS(HKU) 主要保存默认用户及当前登录用户配置信息。 .DEFAULT 该项是针对未来创建的新用户所保存的默认配置项。 S-1-5-18等项 这些项叫作安全标识符(SID)用来表示Windows操…

Maven 跳过test 进行 package

在使用Maven构建项目时,如果你想要跳过测试阶段(test phase)并直接打包(package),你可以在命令行中使用特定的Maven命令选项。以下是一些常用的命令和选项: 1. 使用-DskipTests选项&#xff1a…

Linux(linux版本 centos 7) 下安装 oracle 19c详细教程(新手小白易上手)

一、安装前准备 1、下载预安装包 wget http://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm预安装包下载成功 2、下载oracle安装包 下载地址如下 https://www.oracle.com/cn/database/technologies…

渲染与创造之美:互为表里的艺术

在五彩斑斓的艺术世界中,渲染与创造是两股不可或缺的力量。它们之间的关系,恰如弓与箭,互为表里,共同塑造出无数令人叹为观止的视觉景象。创造之美是指通过创新思维和创造力,将想象具象化为现实,创造出新的…

spring-aop的介绍和使用

目录 1:为什么我会使用这个框架 2:那怎么快速入手属于自己的spring-aop呢(或者说怎么在自己项目调用spring-aop这个框架呢) 1->环境(自己去建一个maven项目) 2->导入spring-aop框架包&#xff08…

Python全自动性能无人机

Python全自动性能无人机研发开发的重要性可以从以下几个方面进行阐述: 编程语言的灵活性:Python是一种高级编程语言,具有简单易学的特点,能够快速地实现想法并进行快速原型设计。这种灵活性使得Python成为开发无人机控制系统的理想…

Linux命令-apachectl命令(Apache服务器前端控制工具)

apachectl命令 是Apache的Web服务器前端控制工具,用以启动、关闭和重新启动Web服务器进程。 语法 apachectl (参数)参数 configtest:检查设置文件中的语法是否正确;fullstatus:显示服务器完整的状态信息;graceful&a…

引领未来:云原生在产品、架构与商业模式中的创新与应用

文章目录 一、云原生产品创新二、云原生架构设计三、云原生商业模式变革《云原生落地 产品、架构与商业模式》适读人群编辑推荐内容简介目录 随着云计算技术的不断发展,云原生已经成为企业数字化转型的重要方向。接下来将从产品、架构和商业模式三个方面&#xff0c…