Docker网络及CPU资源控制

news2025/1/18 7:36:50

一、实现原理

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。

1.1 创建nginx映射端口

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

docker run -d --name test1 -P nginx                    #随机映射端口(从32768开始)

docker run -d --name test2 -p 8080:80 nginx        #指定映射端口

1.2 查看容器的输出和日志信息

docker logs 容器的ID/名称

二、 Docker 的网络模式

(1)Host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

(2)Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

(3)None:该模式关闭了容器的网络功能。

(4)Bridge:默认为该模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptables nat 表配置与宿主机通信。

(5)自定义网络  

2.1 查看docker网络列表 

 

2.2 指定网络模式

使用docker run创建Docker容器时,可以用 --net 或 --network 选项指定容器的网络模式

host模式:使用 --net=host 指定。

none模式:使用 --net=none 指定。

container模式:使用 --net=container:NAME_or_ID 指定。

bridge模式:使用 --net=bridge 指定,默认设置,可省略。

补充

2.3 网络模式详解

2.3.1 host模式

容器使用宿主机的网络直接公开服务。这意味着日过你在容器中运行一个web服务,那么它就直接绑定到主机的网络接口上,而不是通过docker进行任何网络转发。

与宿主机共享网络名称空间。

docker run -d --name shibin --network host nginx:web

docker inspect shibin

 

2.3.2 container模式

这种模式允许容器去共享另一个容器网络命名空间,这说明两个容器可以相同的网络接口和IP地址,他们共享的是同一网络命名空间。

多个容器之间共享一个net work namespace(命名空间)。

 docker run -itd --name shibint2 centos7:test /bin/bash

 docker inspect -f '{{.State.Pid}}' de7721becc0d    #查看容器进程号

ls -l /proc/85243/ns           #查看容器的进程、网络、文件系统等命名空间编号

docker run -itd --name shibint3 --net=container:de7721becc0d centos7:test /bin/bash

docker inspect -f '{{.State.Pid}}' d190ef61d70f

ls -l /proc/85407/ns

2.3.3 none模式

此网络模式表示将容器拥有自己的网路命名空间,但不会进行任何网络配置,这实际给了用户完全的自主权来给自己配置容器的网络。

自闭空间。

docker run -itd --name shibint4 --network=none centos7:test /bin/bash

docker inspect 6ca926071acf

docker inspect shibint4 | grep NetworkMode

2.3.4 bridge模式

每个新创建的容器都将该网络分配一个IP地址,此网络模式允许所有docker容器之间以及docker宿主机之间进行互相通信。

默认模式,通过VETH对连接容器docker0网桥,网桥分配给容器IP,同时docker0作为局域网内容器的网关,最后与宿主机网卡进行通讯。

brctl show

iptables -t nat -vnL

(1)当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

(2)从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。

(3)Docker将 veth pair 设备的一端放在新创建的容器中,并命名为 eth0(容器的网卡),另一端放在主机中, 以 * 这样类似的名字命名,并将这个网络设备加入到 docker0 网桥中。可以通过 brctl show 命令查看。veth

(4)使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL 查看。

2.3.5 自定义网络(user-defined network)

docker允许用户创建自己的定义的网络,用户可以定义的网络范围、子网、路由 等参数这种类型网络使用用户可以更好地对容器网络进行控住和隔离(生产业务需求;注:根据甲方指定或领导指定)。

根据业务需求指定静态IP地址。

(1)创建自定义网络

docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1"  mynetwork

docker network ls

docker run -itd --name shibint5 --network mynetwork --ip 172.18.0.10 centos7:test /bin/bash

docker inspect aba32d42eac6

 ​​

三、CPU资源控制

3.1 cgroups概念

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

3.2 cgroups四大功能

(1)资源限制:可以对任务使用的资源总额进行限制。

(2)优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级。

(3)资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等。

(4)任务控制:cgroup可以对任务执行挂起、恢复等操作。

3.3 设置CPU使用率上限

Linux通过CFS(Completely Fair Scheduler,完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。

使用 --cpu-period 即可设置调度周期,使用 --cpu-quota 即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。CFS 周期的有效范围是 1ms~1s,对应的 --cpu-period 的数值范围是 1000~1000000。 周期100毫秒,而容器的 CPU 配额必须不小于 1ms,即 --cpu-quota 的值必须 >= 1000。

docker run -itd --name shinbint6 centos7:test /bin/bash
cd /sys/fs/cgroup/cpu/docker/d9114eb9452bc8bfd58f0bfc923814bdd59e57f10ec087945f923be8db8fe690
cat cpu.cfs_quota_us
cat cpu.cfs_period_us

注意:cpu.cfs_quota_us:表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制。 如果设为50000,表示占用50000/100000=50%的CPU。cpu.cfs_period_us:cpu分配的周期(微秒,所以文件名中用 us 表示),默认为100000。

3.4 进行CPU压力测试

docker exec -it d9114eb9452b /bin/bash
yum install -y vim
vim /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

chmod +x /cpu.sh
./cpu.sh

3.5 设置50%的比例分配CPU使用时间上限

docker run -itd --name shibint7 --cpu-quota 50000 centos7:test /bin/bash
或
cd /sys/fs/cgroup/cpu/docker/43699328bb88d20059af3e70b503c982c7781f0e70c4c467f47d2634abd01554
echo 50000 > cpu.cfs_quota_us

docker exec -it 43699328bb88 /bin/bash
yum install -y vim
vim /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
chmod +x /cpu.sh
./cpu.sh

3.6 设置CPU资源占用比(设置多个容器时才有效)

docker run -itd --name test01 --cpu-shares 512 centos:7    
docker run -itd --name test02 --cpu-shares 1024 centos:7

3.7 分别进入容器,进行压力测试

docker exec -it test01 /bin/bash
docker exec -it test02 /bin/bash

yum install -y epel-release
yum install -y stress
stress -c 4       #产生四个进程,每个进程都反复不停的计算随机数的平方根
docker stats #查看容器运行状态(动态更新)

3.8 设置容器绑定指定的CPU

(1) 先分配虚拟机4个CPU核数

docker run -itd --name test666 --cpuset-cpus 1,3 centos:7 /bin/bash

(2) 进入容器,进行压力测试

yum install -y epel-release
yum install stress -y
stress -c 4

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

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

相关文章

JVM常见的垃圾回收器

1、回收方法区: 方法区回收价值很低,主要回收废弃的常量和无用的类。 方法区中的存储: 方法区中存储的是加载的类的信息,常量,静态变量,即时编译后的代码等数据,所以回收的对象也就是这些内…

Qt笔记-解决子控制大小获取不正确(width和height)需要重制窗体后,才能获得正确的值

在Qt中,子控件的宽度和高度在构造后并不准确,而只有在调整窗口大小后才正确,这可能是因为子控件的布局或者约束尚未完全计算和应用。 为了解决这个问题,可以使用QTimer来延迟获取子控件的宽度和高度,以确保在布局和约…

Footprint Analytics 与 GalaChain 达成战略合作

​ Footprint Analytics 宣布与 GalaChain 达成战略合作。GalaChain 是 Gala 旗下的 Layer 1 区块链。此次合作标志着双方在游戏(包括 Gala Games) 、娱乐和金融等多个行业的区块链生态系统革新方面迈出了重要的一步。 GalaChain 致力于满足企业级项目的广泛需求&…

【网安小白成长之路】8.sql注入操作

🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 🔞 《网安小白成长之路(我要变成大佬😎!!)》真实小白学习历程,手把手带你一起从入门到入狱🚭 &…

基于ssm微信小程序的4S店客户管理系统

采用技术 基于ssm微信小程序的4S店客户管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员端 管理员登录 管理员首页 用户管理 门店管理 …

Java技术学习|消息队列|初级RabbitMQ

学习材料声明 黑马RabbitMQ快速入门教程,快速掌握rabbitmq、springAMQP消息中间件 是非常初级的学习,听说后续的高级课程会涉及到微服务之类的,所以等学完微服务再回来学。还有redis的高级部分也涉及了微服务,所以也都暂时停止学…

Pick-a-Pic:An open dataset of user preferences for text-to-image generation

1.introduction 1.创建了一个 数据集,每个示例包括一个提示,两个生成的图像以及一个指向首选图像的标签,或者在没有一个图像明显优于另一个时标记为平局。由真实用户创建,包括50w个示例。 2.利用真实用户偏好,训练一个评分函数,使用人类偏好数据和类似于instructGPT奖励…

我花了2元,15分钟,零基础入门了Llama3的微调。

Llama3在最新测评上已经可以接近闭源的GPT4,我们很快就可以拥有属于自己的“GPT4”了!于是,我昨天第一时间体验了Llama3的微调,成本不高,大概花了2元。 为了方便大家体验微调,我把需要的系统环境打包成了社…

递归、搜索与回溯算法:综合练习

例题一 解法: 算法思路: ⾸先,我们在第⼀⾏放置第⼀个皇后,然后遍历棋盘的第⼆⾏,在可⾏的位置放置第⼆个皇后,然后再遍历第三⾏,在可⾏的位置放置第三个皇后,以此类推&#xff0c…

鸿蒙OpenHarmony【集成三方SDK】 (基于Hi3861开发板)

OpenHarmony致力于打造一套更加开放完善的IoT生态系统,为此OpenHarmony规划了一组目录,用于将各厂商的SDK集成到OpenHarmony中。本文档基于Hi3861开发板,向平台开发者介绍将SDK集成到OpenHarmony的方法。 规划目录结构 三方SDK通常由静态库…

2024年4月最新注册香港苹果账号(Apple ID)并解决支付的教程

大陆的Apple ID仅仅能下载国内的一些APP,其实海外也有非常之多好用又好玩的APP需要大家来挖掘!发现这些海外优质APP就得需要一个海外苹果账号。这就是我今天为什么要写这篇文章的初衷! 注册香港Apple ID教程 1、首先到http://appleid.apple.com里注册一个国内的Ap…

ROS2 命令行工具---常用命令整理

本文主要介绍 ROS2 机器人操作系统的一些常用命令行工具及其使用方法,使用这些命令可以使机器人编程和调试变得更加简便。 在实际应用过程中,我们会经常用到命令行操作来辅助调试,更进一步的可以使用GUI工具辅助调试。 一、创建工作空间 跟…

数据结构——第7章 查找

1 线性表的查找 数据元素和顺序表的定义 typedef struct{KeyType key;InfoType otherinfo; }ElemType; typedef struct{ElemType *R;int length; }SSTable; 1.1 顺序查找 int Search_Seq(SSTable ST,KeyType key){ST.R[0].keykey;for(int iST.length;ST.R[i].key!key;i--);…

SQLAlchemy的使用

SQLAlchemy中filter函数的使用 https://blog.csdn.net/m0_67093160/article/details/133318889 创建临时字段 select id , CONCAT(‘内容’) AS fullname from example_table; Pandas数据类型转换_pandas转换数据类型 https://blog.csdn.net/qq_41404557/article/details/125…

用wps自带工具给图片做标注

在wps中,选中wps中的图片,右键选择【编辑】进入图片编辑器,在选项卡面板右侧选择【标注】工具,再选择【添加文本】工具,即可直接在图片上输入文字,标注完成后选择【覆盖原图】就完成标注任务。

【3200字干货】2024跨境电商5大市场:选品风向深度剖析

以下是针对马来西亚、新加坡、泰国、菲律宾和台湾这5个东南亚跨境电商市场的选品市场分析: 一、马来西亚 市场特点:马来西亚是东南亚第三大经济体,拥有年轻的消费群体和对跨境购物的偏好。网购消费力强,易上手爆单,跨…

tableau基础学习——添加标靶图、甘特图、瀑布图

标靶图 添加参考线 添加参考分布 甘特图 创建新的字段 如设置延迟天数****计划交货日期-实际交货日期 为正代表提前交货,负则代表延迟交货 步骤:创建——计算新字段 把延迟天数放在颜色、大小里面就可以 瀑布图 两个表按照地区连接 先做个条形图&…

Python构建学生信息管理系统:网站路由补充和首次运行

在之前的内容中,我们已经完成了学生信息管理系统(Student Information Management System, SIMS)的需求分析、环境搭建、数据库创建、项目结构的初始化,以及运行。正常做下来的朋友,会发现项目运行后输入http://127.0.…

vscode在json文件中添加注释

1.在设置中输入关联文件,点击添加项; 2.

ClickHouse 24.3 版本发布说明

本文字数:10774;估计阅读时间:27 分钟 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 北半球迎来春天,也是 ClickHouse 发布新版本的时候了。 发布概要 本次ClickHouse 24.3版本包含了1…