docker资源控制与数据卷

docker数据卷

容器和宿主机之间数据共享---------挂载卷------------容器内的目录和宿主机的目录进行挂载。实现数据文件共享。

容器的生命周期有限,一旦重启所有对容器内部文件数据修改以及保存的数据都会被初始化,为了防止数据的丢失,重要的组件一定会做数据卷。

-v 指定

同步时以宿主机为标准

[root@docker1 ~]# docker run -itd --name test1 -v /opt/test1:/opt/test2 centos:7 /bin/bash
1、前面是宿主机目录,后面是容器内的目录
2、加不加斜杠都是目录,不是文件,如果不存在,宿主机和容器会自动创建
3、以宿主机的目录为标列,同步的是宿主机目录的内容到容器内。
4、挂载之后,容器内的目录的权限默认是读写权限都有。

容器与容器之间进行数据共享

容器之间会需要共享数据,最简单的方法就是使用数据卷容器。可以提供容器内的一个目录,专门用来供其他容器进行挂载。

#容器内部挂载
[root@docker1 opt]# docker run -itd --name test1 -v /opt/test1 -v /opt/test2 centos:7 /bin/bash
9ec44446a1ed2b74d813e689d6280d656501a019a34598b59ff904fd6c6701bf
[root@docker1 opt]# docker exec -it test1 bash
[root@9ec44446a1ed /]# cd /opt
[root@9ec44446a1ed opt]# ls
test1  test2
​
[root@docker1 opt]# docker exec -it test1 bash
[root@9ec44446a1ed /]# cd /opt/test1
[root@9ec44446a1ed test1]# echo 123 > 123
[root@9ec44446a1ed test1]# cd ..
[root@9ec44446a1ed opt]# cd test2
[root@9ec44446a1ed test2]# echo 456 > 456
[root@9ec44446a1ed test2]# exit
exit
​
[root@docker1 opt]# docker run -itd --name test2 --volumes-from test1 centos:7 /bin/bash
9354e54aa7d8866bf74df72664ab130209225d653f60e398c3a06a8da9ba28f5
[root@docker1 opt]# docker exec -it test1 bash
[root@9ec44446a1ed /]# cd /opt
[root@9ec44446a1ed opt]# ls
test1  test2
[root@9ec44446a1ed opt]# cd test1
[root@9ec44446a1ed test1]# cat 123
123
[root@9ec44446a1ed test1]# cd ..
[root@9ec44446a1ed opt]# cd test2 
[root@9ec44446a1ed test2]# cat 456
456
​

容器之间互联

容器与容器之间建立一条专门的网络通道,容器之间通过这个通道互相通信。

建立通道之后,容器之间可以通过容器名进行通信,容器之间不需要暴露端口,也不依赖宿主机的ip。

在容器内部可以通过容器名直接访问另一个容器,简化容器之间的连接配置。

老版本:

[root@docker1 opt]# docker run -itd --name n1 nginx:1.22
be4d3484000e3388f7cd05a1f33741b176282f11cbbd6299cf77013637eabc7e
[root@docker1 opt]# docker run -itd --name n2 --link n1:n2 nginx:1.22
a9322bfce25c57cef21b54d6127f2b12eab6650e9805640daa2a72b89be7f2d5
[root@docker1 opt]# docker exec -it n1 bash
root@be4d3484000e:/# exit
exit
[root@docker1 opt]# docker exec -it n2 bash
root@a9322bfce25c:/# curl n1
<!DOCTYPE html>
<html>
<head>
​

新版本:

[root@docker1 ~]# cd /opt
#指定网络,我们要先创建自定义网络。
[root@docker1 opt]# docker network create --subnet=192.168.10.0/24 --opt "com.docker.network.bridge.name"="docker2" xy102
6e73db993923323fa9a57bbfe2014594fa8ecea373757ed1582d1f5fa8052758
[root@docker1 opt]# docker run -itd --name n11 --network=xy102 nginx:1.22
3c084f2cbc6bc9f62c5574ae8006606bc926a8d22cb0473867b8da2b70daf1a3
[root@docker1 opt]# docker run -itd --name n22 --network=xy102 nginx:1.22
9bc2819c7ef3989eb149464eda812616d1015f2433f5cbbcc812cc4eb65ee483
#在容器n11里测试能否通n22
[root@docker1 opt]# docker exec -it n11 bash
root@3c084f2cbc6b:/# curl n22
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
#在n22里测试能否通n11
[root@docker1 opt]# docker exec -it n22 bash
root@9bc2819c7ef3:/# curl n11
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
#查看容器与容器之间的地址映射
root@9bc2819c7ef3:/# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.10.3    9bc2819c7ef3
​

docker资源控制

docker通过cgroup来控制容器的资源配额。包括cpu、内存、磁盘三大方面。

cgroup----control groups

linux内核提供的可以限制,记录,隔离进程所使用的物理资源(cpu、内存、磁盘IO)的机制

1、cpu资源控制

进程占用cpu的时间来进行计算。

[root@docker1 opt]# cd /sys/fs/cgroup/cpu/docker/
[root@docker1 docker]# ls
3c084f2cbc6bc9f62c5574ae8006606bc926a8d22cb0473867b8da2b70daf1a3
9bc2819c7ef3989eb149464eda812616d1015f2433f5cbbcc812cc4eb65ee483
[root@docker1 docker]# cd 3c084f2cbc6bc9f62c5574ae8006606bc926a8d22cb0473867b8da2b70daf1a3
[root@docker1 3c084f2cbc6bc9f62c5574ae8006606bc926a8d22cb0473867b8da2b70daf1a3]# cat cpu.cfs_quota_us 
-1
#-1表示系统没有对该进程进行cpu限制
[root@docker1 3c084f2cbc6bc9f62c5574ae8006606bc926a8d22cb0473867b8da2b70daf1a3]# cat cpu.cfs_period_us 
100000
#10万微妙也就是100毫秒,在每个使用cpu的周期内容器可以用指定的比列使用cpu时间
#50000微妙也就是50毫秒
[root@docker1 ~]# docker run -itd --name test1 --cpu-quota 50000 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash
300f30b3b9b6d602ccaf76c02e6aeed9d61c2095012afbcca32770e324fbeb1a
[root@docker1 ~]# docker exec -it test1 bash
[root@300f30b3b9b6 /]# yum -y install epel-release
#查看cpu
[root@docker1 yum.repos.d]# top
Tasks: 218 total,   2 running, 216 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  : 45.0 us,  1.8 sy,  0.0 ni, 53.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.7 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
​
[root@docker1 ~]# docker top test1
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
#pid:容器内的进程在宿主机上的进程号
#ppid:在容器内部的进程号

2、设置cpu的资源占用比

--cpu-shares 默认值是1024,必须是1024的倍数。

#设置cpu占比
[root@docker1 yum.repos.d]# docker run -itd --name test2 --cpu-shares 512 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash
6c050b61dd04be67cc30a8a436a82e42cecc2dc2a0e7f94e3884b450791f46e1
[root@8c5bf0b1c7b7 yum.repos.d]# vi cpu.sh
#!/bin/bash
i=0
while true 
do
let i++
done
[root@8c5bf0b1c7b7 yum.repos.d]# chmod 777 cpu.sh 
#执行脚本
[root@8c5bf0b1c7b7 yum.repos.d]# ./cpu.sh 
​
#查看cpu占比
[root@docker1 yum.repos.d]# docker stats 
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT    MEM %     NET I/O        BLOCK I/O     PIDS
8c5bf0b1c7b7   test1     52.75%    1.266MiB / 7.62GiB   0.02%     165kB / 900B   0B / 47.7MB   3
6c050b61dd04   test2     105.63%   1016KiB / 7.62GiB    0.01%     75.9kB / 0B    0B / 5.12kB   3
​

3、设置容器绑定cpu

--cpuset-cpu0,1

cpu的限制和绑定cpu一般是一起使用的。

[root@docker1 opt]# docker run -itd --name test3 --cpuset-cpus 0,2 centos:7 /bin/bash
0f671b474411d4e31aa6eb5803d111d2c188afc68575b62635d32f33e72089ed
[root@docker1 opt]# docker exec -it test3 bash
[root@0f671b474411 /]# cd /opt
[root@0f671b474411 opt]# vi cpu.sh
#!/bin/bash
i=0
while true 
do
let i++
done
[root@0f671b474411 opt]# chmod 777 cpu.sh 
[root@0f671b474411 opt]# ./cpu.sh 
​
#查看cpu是否在0和2上
​

4、内存限制

[root@docker1 opt]# docker run -itd --name test4 -m 512m --memory-swap=1g centos:7 /bin/bash
363ace130bc075e2674e961cca3321c6061c6a954d2ca72a757468f3a621f779
[root@docker1 opt]# docker exec -it test4 bash
[root@363ace130bc0 /]# yum -y install epel-release
[root@363ace130bc0 /]# yum -y install stress
​

--memory=

-m 512m

-m 1g

单位是小写

也可以限制容器使用交换空间swap

--memory-swap=512m/g

-m 512m --memory-swap=1g
#内存限制的大小是1g-512m=512m。
--memory-swap=0或者不加
#容器使用swap交换分区大小是限制内存的两倍。
-m 512m --memory-swap=512m
#容器不能使用交换分区。
-m 512m --memory-swap=-1
#内存受限制,512m交换分区不再受限制,宿主机有多少swap空间,容器就咳哟用多少。

5、磁盘限制

磁盘读写速度限制

磁盘读次数限制和写次数限制

[root@docker1 ~]# docker run -itd -name test6 -device-read-bps /dev/sda:1M centos:7 /bin/bash
#容器在磁盘上每秒只能读1m
[root@docker1 ~]#docker run -itd -name test6 -device-write-bps /dev/sda:1M centos:7 /bin/bash
#容器在磁盘上每秒只能写1m
[root@docker1 opt]# docker system prune -a
#清理容器的残留,删除停止运行的容器,删除无用的数据卷和网络。

课后练习:

1、设置3个权重 256 768 2048

这三个容器绑定到cpu0

[root@docker1 opt]# docker run -itd --name test1 --cpu-shares 256 --cpuset-cpus 0 centos:7 /bin/bash
3494181b8aae49c757c0583eaccc2855acbbd4840d65b88655b7e9e75a12511f
[root@docker1 opt]# docker run -itd --name test2 --cpu-shares 768 --cpuset-cpus 0 centos:7 /bin/bash
d77c38c18dbed03113a3eb64fc26b59e1a53911bc3e960757cd1885c757ad376
[root@docker1 opt]# docker run -itd --name test3 --cpu-shares 2048 --cpuset-cpus 0 centos:7 /bin/bash
9268adc7e3e003d83afd440594d43fad91680e0575842214652fcc356468a509
[root@docker1 opt]# docker exec -it test1 bash  #分别在容器1、2、3做相同操作
[root@3494181b8aae /]# cd /opt
[root@3494181b8aae opt]# vi cpu.sh
#!/bin/bash
i=0
while true 
do
let i++
done
[root@3494181b8aae opt]# chmod 777 cpu.sh 
[root@3494181b8aae opt]# ./cpu.sh 
​

2、绑定到指定的cpu1,设置占用cpu的比重是25%,同时限制内存使用率512M

[root@docker1 opt]# docker run -itd --name test4 --cpu-quota 25000 --cpuset-cpus 1 -m 512m --memory-swap=1g centos:7 /bin/bash
88663cc5f2d2f193203a59b4cec9865c16fb7876a593e9b01b77f12a764830b4
[root@docker1 opt]# docker exec -it test4 bash
[root@88663cc5f2d2 /]# cd /opt
[root@88663cc5f2d2 opt]# vi cpu.sh
#!/bin/bash
i=0
while true 
do
let i++
done
[root@88663cc5f2d2 opt]# chmod 777 cpu.sh 
[root@88663cc5f2d2 opt]# ./cpu.sh 
​

docker stats查看占比

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

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

相关文章

【大模型系列篇】Transformers综述--邱锡鹏

论文标题&#xff1a;A Survey of Transformers 论文作者&#xff1a;Tianyang Lin, Yuxin Wang, Xiangyang Liu, Xipeng Qiu 论文链接&#xff1a;https://arxiv.org/abs/2106.04554 Transformer 在许多人工智能领域&#xff08;如自然语言处理、计算机视觉和音频处理&#…

力扣热题100_二叉树_230_二叉搜索树中第K小的元素

文章目录 题目链接解题思路解题代码 题目链接 230. 二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a…

深入学习零拷贝

在学习中遇到了一个问题就是什么是零拷贝&#xff0c;因此学习之后以此来记录一下。 零拷贝、直接I/O、异步I/O等&#xff0c;优化的目的就是为了提高系统的吞吐量&#xff0c;减少访问磁盘次数。访问磁盘的速度会比读写内存会慢十倍以上。因此就需要提高它的读写速度。 什么…

视频融合项目中的平台抉择:6大关键要素助力精准选型

随着安防监控系统行业的快速发展&#xff0c;视频融合项目逐渐成为城市治理、企业管理及智能建筑等领域的重要组成部分。视频融合平台作为视频数据整合、管理和分析的核心&#xff0c;其选择直接影响到项目的成功与否。 在当前智慧业务类项目的集成过程中&#xff0c;我们不仅…

【网络协议】网络劫持 - ARP/DNS欺骗篇

前言 网络劫持是一种网络攻击技术&#xff0c;攻击者通过拦截、篡改或重定向数据流量&#xff0c;控制用户的网络通信路径&#xff0c;干扰正常的网络服务。其方式可能包括DNS劫持、ARP欺骗和HTTP劫持等。通过这些手段&#xff0c;攻击者可以窃取敏感信息如个人身份数据和财务信…

【实现100个unity特效之20】用unity实现物品悬浮和发光像素粒子特效

最终效果 文章目录 最终效果新增飞升粒子效果光圈效果修改不同颜色完结 新增飞升粒子效果 效果 光圈效果 效果 修改不同颜色 完结 赠人玫瑰&#xff0c;手有余香&#xff01;如果文章内容对你有所帮助&#xff0c;请不要吝啬你的点赞评论和关注&#xff0c;你的每一次支持…

望获实时Linux与EtherCAT的硬实时解决方案

在追求极致实时性与可靠性的工业自动化领域&#xff0c;望获实时Linux以其卓越的实时性能和广泛的兼容性&#xff0c;正逐步成为工业控制领域的核心力量。结合EtherCAT这一高效通信协议&#xff0c;我们共同打造了一套创新的硬实时工业控制方案&#xff0c;旨在满足现代工业对快…

数学建模——评价决策类算法(层次分析法、Topsis)

一、层次分析法 概念原理 通过相互比较确定各准则对于目标的权重, 及各方案对于每一准则的权重&#xff0c;这些权重在人的思维过程中通常是定性的, 而在层次分析法中则要给出得到权重的定量方法. 将方案层对准则层的权重及准则层对目标层的权重进行综合, 最终确定方案层对目标…

6.mysql事务

MYSQL事务 1.事务简介2.事务操作2.1 方式一2.2 方式二 3.事务四大特性&#xff08;ACID&#xff09;4.并发事务问题5.事务隔离级别 1.事务简介 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有操作作为一个整体一起想系统提交或撤销操作…

不懂就问,猫咪一到夏天就疯狂掉毛?宠物毛发异味怎么处理?

相信很多新手铲屎官都有这样的疑问&#xff0c;随着气温升高&#xff0c;家里的猫孩子疯狂掉毛&#xff0c;还有愈演愈烈的趋势。不用担心&#xff0c;这是因为宠物到了换毛季。猫咪的换毛季一年两次&#xff0c;多集中在春天和秋天&#xff0c;但也有很多猫咪的掉毛期无限延长…

中小型企业可用的数据采集监控平台 为生产带来众多改变

中小型企业采用数据采集监控平台可以显著提升生产效率、优化生产流程、增强决策能力&#xff0c;并带来一系列积极的改变。 数据采集监控平台可提供从边缘感知设备到云端的数据采集、存储、分析、可视化等服务&#xff0c;实现生产工艺流程仿真、设备运行状态监控、数据报表、趋…

【无标题】Unity Asset Hunter 插件

Asset Hunter PRO是Unity的一款插件&#xff0c;用于分析工程内的资源使用情况&#xff0c;资源大小&#xff0c;分析资源依赖关系&#xff0c;可以用来清理项目中未使用的资源。尤其是项目较大时&#xff0c;删除没有使用的资源很有帮助。 对于项目UI图片修改次数过多时&…

C++ | list

前言 本篇博客讲解cSTL中的list &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&…

FMR—Feature-metric Registration论文解读

目录 一、导言 二、先导知识 1、逆组合算法 三、相关工作 1、优化算法为主的配准工作 2、基于特征的点云配准 3、端到端学习的配准 四、FMR框架 1、Encoder模块 2、Decoder分支模块 3、特征指标配准分支模块 4、损失函数 五、数据集 1、ModelNet40 2、7Scene数据…

SpringBoot快速入门(自动创建)

目录 前言 步骤 1 创建项目 2 选择生成器springBoot 3 修改后&#xff0c;如图所示 4 点击下一步 5 点击Web----SpringWeb 6 点击创建 6.1 如果发生报错如: 6.2 替换合适版本&#xff0c;等待重新加载 7 添加contronller类 7.1 添加HelloController 类 8 ​​创建…

基于JAVA的医院管理住院系统研究与实现

点击下载源码 基于JAVA的医院管理住院系统研究与实现 摘 要 医院管理住院系统是一项集多类学科为一体的系统&#xff0c;其中包含医学、信息、计算机等学科&#xff0c;广泛的应用在当今欧美等发达国家&#xff0c;给治疗患者们提供了很大的便利。假如全面实现了这一系统&…

【启明智显技术分享】工业级HMI芯片Model3A开发过程中问题记录笔记

一、Model3A芯片介绍 Model3A是启明智显针对工业、行业以及车载产品市场推出的一款高性能、低成本的工业级HMI&#xff08;Human-Machine Interface&#xff0c;人机界面&#xff09;芯片。该芯片主要应用于工业自动化、智能终端HMI、车载仪表盘、两轮车彩屏仪表、串口屏、智能…

Docker容器管理之FAQ

一、前言 某次&#xff0c;某容器服务发现无法使用了&#xff0c;查看状态为restaring状态&#xff0c;后看是云主机重启了&#xff0c;导致本地的nfs-server未自动启动&#xff0c;导致关联的集群主机&#xff0c;远程挂载点无法使用&#xff0c;影响容器服务运行。故此&#…

老师分班查询助手,新学期老师都在用!

作为一名教师&#xff0c;您是否曾经在新学期伊始&#xff0c;面对着一堆学生名单和分班结果&#xff0c;感到无从下手&#xff1f;是否曾经历过在黑板上一笔一划地写下每个学生的名字和班级&#xff0c;然后一遍又一遍地回答家长和学生的询问&#xff1f;这样的场景&#xff0…

web页面的性能测试

背景 测试大模型主要web页面的性能 使用工具 通过google自带的lighthouse测试页面的性能 各个参考指标 First Contentful Paint(FCP):测量在用户导航到页面后浏览器呈现第一段 DOM 内容所花费的时间。页面上的图像、非白色<canvas>元素和 SVG 被视为 DOM 内容&#…