docker数据卷和资源控制

news2024/11/15 20:07:22

目录

数据卷

实现数据卷

宿主机和容器之间进行数据共享

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

容器互联

docker容器的资源控制

cpu

1.设置cpu资源控制(比重)

2. 设置cpu的资源占用比(权重)

3.设置容器绑定cpu

内存

1.内存限制

磁盘

1.磁盘读写速度的限制

2.磁盘的读写次数限制

清理docker的磁盘空间的命令

练习


数据卷

数据卷的目的:

1. 实现容器和宿主机之间数据共享:数据卷又叫挂载卷,就是把容器内的目录和宿主机的目录进行挂载,实现数据文件共享

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

实现数据卷

宿主机和容器之间进行数据共享

创建宿主机与容器之间的数据卷

docker run -itd --name test1 -v /opt/test1:/opt/test2 centos:7 /bin/bash

-v 指定

注意点:

1. 左边的test1是宿主机目录 ,右边的test2是容器内的目录

2. 加不加 / ,都是目录,而不是文件。如果不存在,宿主机和容器都会自动创建目录

3. 以宿主机的目录为标准,同步的是宿主机目录的内容到容器内

4. 挂载之后,容器内的目录的权限默认是读写权限都有

设置容器内的数据卷目录只读权限

docker run -itd --name test1 -v /opt/test1:/opt/test2:ro centos:7 /bin/bash

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

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

docker run -itd --name test1 -v /opt/test1 -v /opt/test2 centos:7 /bin/bash   在容器内部创建两个目录

docker run -itd --name test2 --volumes-from test1 centos:7 /bin/bash  容器与容器数据共享

容器互联

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

建立通道之后,容器之间可以通过容器名进行通信,容器之间不需要暴露端口,也不依赖宿主机的ip。在容器内部可以通过容器名直接访问另一个容器,可以简化容器之间的连接配置。

指定网络,我们要先创建自定义网络。

docker network create --subent=192.168.10.0/24 --opt "com.docker.network.bridge.name"="docker2" xy102     自定义网络

docker run -itd --name n1 --network=xy102 nginx:1.22 

docker run -itd --name n2 --network=xy102 nginx:1.22

docker exec -it n1 bash 进入容器

然后两个容器可以互相访问容器名

docker容器的资源控制

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

cgroup全称control group,它是Linux内核提供的可以限制、记录、隔离进程所使用的物理资源(cpu、内存、磁盘IO)的机制

cpu

1.设置cpu资源控制(比重)

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

查看cpu限制步骤:

首先docker ps 查看容器的container id并复制 

然后cd /sys/fs/cgroup/cpu/docker/

然后cd 把上面的container id复制过来并用tab键补齐

cd 246fb9e648f7893e5db24b5ced6a4136044bc6c8b3a7d3a6fa429e2861cd3dc1/

cat cpu.cfs_quota_us 显示-1

表示系统没有对该进程进行cpu的限制

cat cpu.cfs_period_us  显示100000微妙=100毫秒=0.1秒

在每个使用cpu的周期内,容器可以用指定的比例使用cpu时间

设置cpu资源控制步骤

设置cpu限制命令(比重,默认100000就是100%)

docker run -itd --name test1 --cpu-quota 50000 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash

然后docker exec -it test1 bash 进入容器

安装epel源 yum -y install epel-release (如果宿主机有epel需要先删掉)

注:如果要删,可以先 rm -rf *删除,然后执行docker cp /etc/yum.repos.d/Centos-7.repo test1:/etc/yum.repos.d/ 远程复制 然后再下载epel源

 安装模拟软件 yum -y install stress

模拟cpu的压力 stress -c 4 

注:这里每次模拟都需要重新都安装一遍

然后top查看  或者 docker top test1

pid:容器内的进程在宿主机上的进程号,ppid:在容器内部的进程号

2. 设置cpu的资源占用比(权重)

--cpu-shares 默认值是1024,如果要设置,必须是1024的倍数或者1024的除数

实验步骤:

docker run -itd --name test2 --cpu-shares 512 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash

然后docker exec -it test1 bash 进入容器

安装epel源 yum -y install epel-release (如果宿主机有epel需要先删掉)

注:如果要删,可以先 rm -rf *删除,然后执行docker cp /etc/yum.repos.d/Centos-7.repo test1:/etc/yum.repos.d/ 远程复制 然后再下载epel源

 安装模拟软件 yum -y install stress

模拟cpu的压力 stress -c 4 

注:这里每次模拟都需要重新都安装一遍

然后top查看  或者 docker top test1

3.设置容器绑定cpu

--cpuset-cpus 

docker run -itd --name test4 --cpuset-cpus 0,2 centos:7 /bin/bash

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

内存

1.内存限制

--memory=      简写-m 512m  或者 -m 1g

单位是小写,也可以限制容器使用交换空间swap

--memory-swap=512M/1g

命令:docker run -itd --name test5 -m 512m  --memory-swap=1g centos:7 /bin/bash

-m 512m --memory-swap=1g

内存限制是512M,交换空间限制的大小是1g-512m=512m

--memory-swap=0 或者不写

容器使用swap交换分区的大小是限制的内存值的两倍,就是1g

-m 512m --memory-swap=512m

如果两个值一样表示容器不能使用swap交换分区

-m 512m --memory-swap=1

内存还是受限制512m,但使用交换分区不再受限制,宿主机有多少swqp空间,容器就可以用多少

模拟命令:stress --vm 2 --vm-bytes 512M --vm-hang 0  模拟两个进程,分别占用内存512m一共1运行

磁盘

1.磁盘读写速度的限制

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

容器在磁盘上每秒只能读1M

这里可以用大写K、M、G 或者小写kb、mb、gb

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

容器在磁盘上每秒只能写1M

2.磁盘的读写次数限制

docker run -itd --name test5 --device-read-iops /dev/sda:100 centos:7 /bin/bash

docker run -itd --name test5 --device-write-iops /dev/sda:100 centos:7 /bin/bash

清理docker的磁盘空间的命令

docker system prune -a

清理容器的残留,删除停止运行的容器,删除无用的数据卷和网络。

练习

1.设置3个权重 256 768 2048,并且3个容器设置绑定到cpu 0

docker run -itd --name test1 --cpu-shares 512 --cpuset-cpus 0 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash

docker run -itd --name test2 --cpu-shares 768 --cpuset-cpus 0 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash

docker run -itd --name test3 --cpu-shares 2048 --cpuset-cpus 0 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash

实验结果

top查看

docker stats 查看

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

docker run -itd --name test4 --cpu-quota 25000 --cpuset-cpus 1 -m 512 --memory-swap=512m -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash

实验结果

top查看

docker stats 查看

free -h查看

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

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

相关文章

Docker搭建Minio容器

Docker搭建Minio容器 前言 在上一集我们介绍了分布式文件存储行业解决方案以及技术选型。最终我们决定选用Minio作为分布式文件存储。 那么这集我们就在Docker上搭建Minio容器即可。 Docker搭建Minio容器步骤 创建Minio文件目录 我们选择创建/minio/data目录 修改目录权…

系统编程 day11 进程(线程)3

fork函数的总结: 总结对进程学习之中的回收函数wait wait函数: 1.获取子进程的退出状态 2.回收资源------会让僵尸态的子进程销毁 注:1.wait函数本身是一个阻塞操作,会使调用者阻塞 2.父进程要获得子进程的退出状态 子进程&…

解决STM32G474单片机_HAL_UART_Transmit_IT()连续发送之问题

在使用STM32G474单片机的HAL库时,使用“在中断服务程序中发送数据”和“在中断程序中接收数据”,是一种很常用的方法,特别是RS485通讯中。首次使用,肯定会踩坑。要么出现第一个数据收不到,要么出现连续发送&#xff0c…

米联客-FPGA程序设计Verilog语法入门篇连载-02 Verilog语法_基本设计方法

软件版本:无 操作系统:WIN10 64bit 硬件平台:适用所有系列FPGA 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述 本节主要讲解Verilog的基本设…

【屏驱MCU】增加自定义分区指南

说明:本文主要给出基于该款 点屏 MCU。增加自定义分区指南 屏驱MCU系列文章 【屏显MCU】多媒体接口总结(一) 【DVP接口】0v5640的DVP接口设计分析(硬件) 【DVP接口】0v5640的DVP接口设计分析(软件&#xff…

CCF-GESP8级考试—图论算法及综合应用(最小生成树)

🍉1 最小生成树的概念 1.1 连通图 🎈 连通图用于描述图中顶点之间是否存在路径相连。一个无向图中,如果从图中的任意一个顶点出发,都可以通过边的连接到达图中的任意其他顶点,则该图被称为连通图。 连通图的性质&…

为何众多卖家都选择入驻亚马逊VC?有什么优势?——WAYLI威利跨境助力商家

众多卖家选择入驻亚马逊VC(Vendor Central),主要是因为VC平台为卖家提供了一系列显著的优势。VC使卖家与亚马逊建立直接供应关系,提升曝光率和销售机会。作为全球领先电商平台,亚马逊拥有庞大用户群和完善物流体系&…

C#窗体自定义快捷操作键的实现 - 开源研究系列文章

这次想到应用程序的窗体的快捷操作键的使用的问题。 上次发布过一个快捷键的例子(https://www.cnblogs.com/lzhdim/p/18342051),区别在于它是操作系统全局注册的热键,如果其它应用程序注册了对应的热键,那就会失效。此例子是对某个窗体里的按…

AI驱动人才社区革新:智能化探索与实践

一、引言:AI赋能人才新生态 在21世纪的数字化浪潮中,人工智能(AI)技术以其强大的数据处理能力、学习优化算法及创新应用模式,正深刻地改变着各行各业的面貌,人才管理领域亦不例外。传统的人才社区&#xf…

yolo中的iou是什么意思

在YOLO(You Only Look Once)算法中,IoU 是“Intersection over Union”的缩写,中文可以理解为“交并比”。IoU 是一个用于衡量两个边界框(bounding box)重叠程度的指标。具体来说,IoU 是通过计算…

CUDA-MODE 第二课: PMPP 书的第1-3章

我的课程笔记,欢迎关注:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode 第二课: PMPP 书的第1-3章 这节课非常基础,讲的都是基本概念和初级的注意事项,有CUDA基础的朋友可以不用花时间看。 PMPP …

C#语言基础速成Day06

“心之官则思,思则得之,不思则不得也。” 目录 前言文章有误敬请斧正 不胜感恩!||Day06 一、C#属性访问器、方法参数属性访问器(Property Accessors)方法参数(Method Parameters)综合示例 二、C…

小红书种草推广丨爆品层出不穷,品牌还能怎么「造新」?

当品牌已经被大众熟知,要如何在茫茫消费市场中脱颖而出,再度吸引用户的目光? 当品牌陷入增长困境,要如何再造爆品,打造增长的第二曲线,延长品牌的生命周期? …… 就这个大家关心的这些问题&…

三菱定位控制(一)

下面小编开始开始总结学习定位控制,以Q系列三菱PLC来展开学习,希望对读者或者小白有所帮助!!! 一 三菱PLC定位模块 为什么需要学习定位模块(三菱FXCPU能实现一个伺服电机的控制,多个要买定位模…

结构化输出及其使用方法

在 LLM 应用程序中构建稳健性和确定性 图片来自作者 欢迎来到雲闪世界。OpenAI最近宣布其最新的gpt-4o-2024–08–06模型支持结构化输出。与大型语言模型 (LLM) 相关的结构化输出并不是什么新鲜事——开发人员要么使用各种快速工程技术,要么使用第三方工具。 在本文…

异质性空间自回归模型 (HSAR)及 Stata 具体操作步骤

目录 一、引言 二、文献综述 三、理论原理 四、实证模型 五、稳健性检验 六、程序代码及解释 七、代码运行结果 一、引言 在空间计量经济学中,异质性空间自回归模型(Heterogeneous Spatial Autoregressive Model,HSAR)是一种…

深度优化Nginx负载均衡策略,携手Keepalived打造高可用服务架构新纪元

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…

什么是数据仓库ODS层?为什么需要ODS层?

在大数据时代,数据仓库的重要性不言而喻。它不仅是企业数据存储与管理的核心,更是数据分析与决策支持的重要基础。而在数据仓库的各个层次中,ODS层(Operational Data Store,操作型数据存储)作为关键一环&am…

NVDLA专题4:具体模块介绍——Convolution DMA

概述 Convolution DMA Module的定义在NV_NVDLA_cmda.v中&#xff0c;其module的定义如下&#xff1a; module NV_NVDLA_cdma (cdma_dat2cvif_rd_req_ready //|< i,cdma_dat2mcif_rd_req_ready //|< i,cdma_wt2cvif_rd_req_ready //|< i,cdma_wt2mcif_rd_r…

【Nacos】docker部署nacos服务

docker部署nacos服务 1.直接执行命令2.如果网络出现问题 1.直接执行命令 docker run -e JVM_XMS256m -e JVM_XMX256m --env MODEstandalone \ --name mynacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 \ docker.io/nacos/nacos-server:v2.1.12.如果网络出现问题 执行如下命…