docker资源控制与数据卷

news2025/1/12 6:11:24

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.coloradmin.cn/o/2040170.html

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

相关文章

uni-app发布安卓app打包时必须在APP模块配置中选中需要的模块

最近尝试开发一个语音对话的app&#xff0c;在调试阶段没有选中“record录音”模块&#xff0c;安卓基座运行在雷电模拟器上是没有问题的&#xff0c;但是直接云打包在手机上运行就不行了&#xff0c;语音输入没有反应。 经过试验发现是manifest.json没有勾选APP模块配置中的“…

在本地电脑部署属于你的AI大模型

前言&#xff1a; 现在的ai很多&#xff0c;让我看得有些眼花缭乱&#xff0c;随着ai的发展&#xff0c;现在已经有很多ai的大模型已经支持开源&#xff0c;所以现在支持部署一个大模型在自己电脑上&#xff0c;数据私人化。 如果不知道自己是否需要或者是否合适配置可以跳到…

Unity(2022.3.38LTS) - 初步学习C#

目录 一. C#简介 二. 配置代码编辑器 三. C#基本语法 四. 创建脚本 创建C#脚本的方式 1. 在文件夹新建 2. 直接在物体组件创建 五. 例子 扩展物体旋转的方式: 一. C#简介 Unity 中使用的 C# 是一种面向对象的编程语言&#xff0c;具有强大的功能和广泛的应用。 特点…

【笔记】MSPM0G3507移植RT-Thread——MSPM0G3507与RT_Thread(二)

一.创建新工程 找到"driverlib\empty"空白工程&#xff0c;CTRLC然后CTRLV复制副本 重命名为G3507_RTT 打开KEIL工程 双击empty.syscfg&#xff0c;然后打开SYSCONFIG 我的不知道为啥没有48pin选项&#xff0c;如果你也一样&#xff0c;可以跟着我做&#xff0c;如果…

WebDeveloper:1靶机

端口扫描 靶机ip地址为192.168.153.158 目录扫描 访问80端口 拼接访问 /ipdata 发现了一个流量包 放在 wireshark 查看&#xff0c;找到 账号密码 账号&#xff1a;webdeveloper 密码&#xff1a;Te5eQg&4sBS!Yr$)wf%(DcAd 拼接 /wp-login.php 找到登录框 登录成功 找…

vue3+Element Plus功能组件封装——顶部导航(动态渲染+样式调整)

网页顶部的导航栏&#xff0c;一般由代码动态生成 菜单数据在文件内统一配置&#xff0c;方便增删改查&#xff0c;导入后可自动生成导航菜单 代码如下 1.dom部分&#xff08;简单示例&#xff09; <el-menu mode"horizontal" :default-active"currentPath…

java Spring|day1.Spring基础

框架 Core IoC容器AOP功能数据绑定类型转换等 TestingData AccessWeb Servlet 核心 IOC容器 定义 IoC&#xff08;Inversion of Control&#xff09;是控制反转的意思&#xff0c;这是一种面向对象编程的设计思想。 优点 在不采用这种思想的情况下&#xff0c;我们需要自…

51单片机-动态数码管显示

动态数码管显示就是在数码管中显示多个数字&#xff0c;利用了人眼的视觉差显示了数字&#xff0c;但是存在一个问题&#xff0c;在顺序执行显示数字和数值的设置时候&#xff0c;数码管的显示数据会出现错乱&#xff0c;因此&#xff0c;需要执行消影&#xff0c;每次在数码管…

机器学习速成第二集——监督学习之分类(理论部分)!

目录 分类算法的种类 分类问题的应用场景 模型选择与评估 结论 如何在不同数据集中选择最适合的监督学习分类算法&#xff1f; 监督学习中集成模型与单一模型相比有哪些具体的优势和劣势&#xff1f; 优势&#xff1a; 劣势&#xff1a; 在处理高维稀疏数据时&#xf…

AAAI论文截稿

标题&#xff1a;AAAI2025截稿不足36小时!抓住今年最后的机会&#xff01; 点击上方“会议之眼”关注 重磅干货&#xff0c;第一时间送达 会议之眼 快讯 AAAI&#xff08;Association for the Advancement of Artificial Intelligence&#xff09;全称国际顶级人工智能学术…

Promise 一个基于协程下的任务队列状态管理任务包 解决复杂的异步转同步问题

前言 一直都想写关于Promise的东西&#xff0c;Promise解决的问题特别多&#xff0c;而普通前端就把这东西结合ajax来做一个await request() ,如果仅仅作为这样一种东西使用那就太可惜了。 它是队列的任务包 前端同学应该是没听说过队列&#xff0c;但是大前端同学&#xff0…

Kubernetes-K8S

Kubernetes由于单词太长&#xff0c;省略掉中间8个字母简称为K8S。它介于应用服务和服务器之间。能够通过策略协调和管理多个服务&#xff0c;只需要一个YAML文件配置。定义应用的部署顺序等信息&#xff0c;自动部署应用到各个服务器&#xff0c;还可以自动扩容缩容。 架构原理…

RabbitMQ实现多线程处理接收消息

前言&#xff1a;在使用RabbitListener注解来指定消费方法的时候&#xff0c;默认情况是单线程去监听队列&#xff0c;但是这个如果在高并发的场景中会出现很多个任务&#xff0c;但是每次只消费一个消息&#xff0c;就会很缓慢。单线程处理消息容易引起消息处理缓慢&#xff0…

前程无忧 阿里227滑块 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;有相关问题请第一时间头像私信联系我删…

Qt下使用QtPdfium处理PDF文档

文章目录 前言一、使用QPdfDocument二、使用QtPdfium三、示例完整代码总结 前言 在我之前的文章中&#xff0c;有提到如何生成PDF&#xff0c;这个可以查看文末参考文章。如果要实现在Qt下进行PDF文档的处理&#xff08;读取显示&#xff09;&#xff0c;可以使用自带的PDF库以…

Unity(2022.3.38LTS) - 基础概念

目录 一. 场景 二. 游戏对象 三. 组件 四. 标签 五. 静态游戏对象 六. 保存 一. 场景 Unity 场景是游戏或应用开发中的一个重要概念。 Unity 场景的组成元素&#xff1a; 它通常包含了各种游戏对象&#xff0c;比如 3D 模型、灯光、摄像机、脚本组件、音频源等等。 作用…

串列翼无人机技术详解

串列翼无人机作为一种特殊布局的飞行器&#xff0c;其概念可追溯至早期航空探索时期。随着航空技术的不断进步&#xff0c;尤其是复合材料、先进控制算法及动力系统的革新&#xff0c;串列翼无人机逐渐从理论走向实践。这一设计初衷在于通过前后两组机翼的巧妙布局&#xff0c;…

Redis Cluster集群

redis-cluster集群 Redis Cluster是Redis官方提供的分布式解决方案。当遇到内存、并发、流量等瓶颈时&#xff0c;就可以采用Cluster架构达到负载均衡目的。 1.Redis单实例主要有单点故障&#xff0c;容量有限&#xff0c;流量压力上限的问题。 Redis单点故障&#xff0c;可以…

全开源智慧停车场微信小程序源码/智能停车系统源码/停车自助缴费系统/停车场管理收费+物业管理+物联网+自助缴费功能

源码简介&#xff1a; 智慧停车场微信小程序源码&#xff0c;全开源智能停车系统源码&#xff0c;停车自助缴费系统&#xff0c;具有停车场管理、停车收费、物业管理、物联网、自助缴费等多种功能。 这是一个全开源的智能停车系统&#xff0c;功能强大。它不仅能帮你管理停车…

如何平衡冷数据(历史库)的成本与性能?| OceanBase应用实践

随着数据量的迅猛增长&#xff0c;企业和组织在数据库管理方面遭遇的挑战愈发凸显。数据库性能逐渐下滑、存储成本节节攀升&#xff0c;以及数据运维复杂性的增加&#xff0c;这些挑战使得DBA和开发者在数据管理上面临更大的压力。 为了应对这些挑战&#xff0c;对数据生命周期…