使用django建设一个网站,网页版梦幻西游仙玉做什么划算,wordpress一键更新域名插件,网站备案名称目录
一.docker的资源控制
1.CPU 资源控制
1.1 资源控制工具
1.2 cgroups有四大功能
1.3 设置CPU使用率上限
1.4 进行CPU压力测试 1.5 设置50%的比例分配CPU使用时间上限 1.6 设置CPU资源占用比#xff08;设置多个容器时才有效#xff09;
1.6.1 两个容器测试cpu
2设置多个容器时才有效
1.6.1 两个容器测试cpu
2对内存使用的限制
3对磁盘IO配额控制blkio的限制
3.1 创建容器并限制写速度
二.docker数据管理
1.为何需要docker数据管理
2.数据管理类型
3.数据卷 4.数据卷容器 5.容器的互联 一.docker的资源控制
1.CPU 资源控制
1.1 资源控制工具
cgroups是一个非常强大的linux内核工具他不仅可以限制被 namespace 隔离起来的资源 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroupsControl groups实现了对资源的配额和度量。
1.2 cgroups有四大功能
●资源限制可以对任务使用的资源总额进行限制
●优先级分配通过分配的cpu时间片数量以及磁盘IO带宽大小实际上相当于控制了任务运行优先级
●资源统计可以统计系统的资源使用量如cpu时长内存用量等
●任务控制cgroup可以对任务执行挂起、恢复等操作
1.3 设置CPU使用率上限
Linux通过CFSCompletely Fair Scheduler完全公平调度器来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。
我们可以设置每个容器进程的调度周期以及在这个周期内各个容器最多能使用多少 CPU 时间。
使用 --cpu-period 即可设置调度周期使用 --cpu-quota 即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。
CFS 周期的有效范围是 1ms~1s对应的 --cpu-period 的数值范围是 1000~1000000。 周期100毫秒 而容器的 CPU 配额必须不小于 1ms即 --cpu-quota 的值必须 1000。
docker run -itd --name test5 centos:7 /bin/bash
cd /sys/fs/cgroup/cpu/docker/
ls
aca125bbcdcb17d3e30a70e9c7c20b49ef28c9556f14502a070a7fdaf1f0381a cpu.rt_period_us
[rootcentos1 docker]# cd aca125bbcdcb17d3e30a70e9c7c20b49ef28c9556f14502a070a7fdaf1f0381a
[rootcentos1 aca125bbcdcb17d3e30a70e9c7c20b49ef28c9556f14502a070a7fdaf1f0381a]# cat cpu.cfs_quota_us
-1[rootcentos1 30e305daa1fe86c98426cb67059606f3cd50944df1af9d5910802d7fc73b42c9]# cat cpu.cfs_period_us
100000
cat cpu.cfs_period_us 注解
cpu.cfs_period_uscpu分配的周期(微秒所以文件名中用 us 表示默认为100000。 cpu.cfs_quota_us表示该cgroups限制占用的时间微秒默认为-1表示不限制。 如果设为50000表示占用50000/10000050%的CPU。
1.4 进行CPU压力测试
在容器 里 进行压力测试
[rootcentos1 30e305daa1fe86c98426cb67059606f3cd50944df1af9d5910802d7fc73b42c9]# docker exec -it 30e305daa1fe /bin/bash#容器里不能 用vim 只能 用vi
vi /cpu.sh
#!/bin/bash
i0
while true
do
let i
done chmod x /cpu.sh
./cpu.sh
#从新开个终端查看CPU使用情况
#可以看到这个脚本占了很多的cpu资源
top 1.5 设置50%的比例分配CPU使用时间上限
#可以重新创建一个容器并设置限额
docker run -itd --name test7 --cpu-quota 50000 centos:7 /bin/bash
#或者进入修改
cd /sys/fs/cgroup/cpu/docker/c6683c71f9d8b49fd5732f21b0969f1b4fe31d588567d6d32f12ced906e0dde7/
echo 50000 cpu.cfs_quota_us
docker exec -it c6683c71f9d8 /bin/bash./cpu.sh
#可以看到cpu占用率接近50%cgroups对cpu的控制起了效果
top 1.6 设置CPU资源占用比设置多个容器时才有效
Docker 通过 --cpu-shares 指定 CPU 份额默认值为1024值为1024的倍数。
1.6.1 两个容器测试cpu
1创建两个容器为 c1 和 c2若只有这两个容器设置容器的权重使得c1和c2的CPU资源占比为1/3和2/3。
docker run -itd --name c1 --cpu-shares 512 centos:7
docker run -itd --name c2 --cpu-shares 1024 centos:7 2分别进入容器进行压力测试
c1;
docker exec -it eb2c65e90789 /bin/bash
vi /cpu.sh
#!/bin/bash
i0
while true
do
let i
done
chmod x /cpu.sh
./cpu.sh
另开终端
c2:
docker exec -it d32f1cdfafe2 /bin/bash
vi /cpu.sh
#!/bin/bash
i0
while true
do
let i
done
chmod x /cpu.sh
./cpu.sh 3另开终端查看容器运行状态动态更新
docker stats 1.6.2 设置容器绑定指定的CPU
1先分配虚拟机4个CPU核数
docker run -itd --name test7 --cpuset-cpus 1,3 centos:7 /bin/bash2进入容器进行压力测试
yum install -y epel-release
yum install stress -y
stress -c 4
docker exec -it 5c982ffed51c /bin/bash
vi /cpu.sh
#!/bin/bash
i0
while true
do
let i
donechmod x /cpu.sh
./cpu.sh
另开终端 3退出容器执行 top 命令再按 1 查看CPU使用情况。
2对内存使用的限制
1-m(–memory) 选项用于限制容器可以使用的最大内存 2限制可用的 swap 大小 --memory-swap 强调一下–memory-swap 是必须要与 --memory 一起使用的。
正常情况下–memory-swap 的值包含容器可用内存和可用 swap。
所以 -m 300m --memory-swap1g 的含义为容器可以使用 300M 的物理内存并且可以使用 700M1G - 300的 swap。
如果 --memory-swap 设置为 0 或者 不设置则容器可以使用的 swap 大小为 -m 值的两倍。
如果 --memory-swap 的值和 -m 值相同则容器不能使用 swap。
如果 --memory-swap 值为 -1它表示容器程序使用的内存受限而可以使用的 swap 空间使用不受
限制宿主机有多少 swap 容器就可以使用多少。
3对磁盘IO配额控制blkio的限制
–device-read-bps限制某个设备上的读速度bps数据量单位可以是kb、mb(M)或者gb。 例
docker run -itd --name test9 --device-read-bps /dev/sda:1M centos:7 /bin/bash
dd if/dev/zero oftest.out bs1M count10 oflagdirect –device-write-bps 限制某个设备上的写速度bps数据量单位可以是kb、mb(M)或者gb。 例
docker run -itd --name test11 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
dd if/dev/zero oftest.out bs1M count10 oflagdirect –device-read-iops 限制读某个设备的iops次数
–device-write-iops 限制写入某个设备的iops次数
3.1 创建容器并限制写速度
#通过dd来验证写速度
#添加oflag参数以规避掉文件系统cache
dd if/dev/zero oftest.out bs1M count10 oflagdirect 100 records in
100 records out
10485760 bytes (10 MB) copied, 10.0025 s, 1.0 MB/s#清理docker占用的磁盘空间
docker system prune -a #可以用于清理磁盘删除关闭的容器、无用的数据卷和网络停止的容器已被清理 二.docker数据管理
1.为何需要docker数据管理
因为数据写入后如果停止了容器再开启数据就会消失使用数据管理的数据卷挂载实现了数据的持久化重启数据还会存在还有一种方式容器之间共享文件即相当于有个备份也会解决停止容器后数据消失的问题。
2.数据管理类型
管理 Docker 容器中数据主要有两种方式数据卷Data Volumes和数据卷容器DataVolumes Containers
3.数据卷
数据卷是一个供容器使用的特殊目录位于容器中。可将宿主机的目录挂载到数据卷上对数据卷的修改操作立刻可见并且更新数据不会影响镜像从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于 Linux 下对目录进行的 mount 操作可以互相同步内容
#拉取CentOS 7的Docker镜像
docker pull centos:7
#使用docker run命令来创建并运行一个基于CentOS 7镜像的容器
docker run -itd centos:7 /bin/bashmkdir /var/www
#宿主机创建目录
docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
#创建容器centos7并命名为web1.将宿主机的/var/www目录挂载到容器中的/data1卷中
# -v 选项表示容器中创建数据卷
echo this is web1 /data1/a.txt
exit
#数据卷中创建内容a.txt并退出
cd /var/www/
#进入宿主机的挂载目录
cat a.txt
#验证容器中数据卷内容
echo 123abc.txt
#宿主机的挂载目录创建一个文件夹
docker start web1
docker exec -it web1 /bin/bash
#开启web1容器并进入
ls /data1
#显示data1数据卷验证其中是否有abc.txt4.数据卷容器
–volumes-from 要挂载那个容器名称/id号 #用于容器之间的挂载 如果需要在容器之间共享一些数据最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器专门提供数据卷给其他容器挂载使用。
docker run --name web3 -v /data1 -v /data2 -it centos:7 /bin/bash
#创建数据卷容器web3 并创建2个data目录
echo this is web3 /data1/abc.txt
echo This is web3 /data2/ABC.txt
#web3容器2个data下创建文件
docker run -it --volumes-from web3 --name web4 centos:7 /bin/bash
#使用 --volumes-from 来挂载 web3 容器中的数据卷到新的容器
cat /data1/abc.txt
cat /data2/ABC.txt5.容器的互联
容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说就是会在源容器和接收容器之间建立一条隧道接收容器可以看到源容器指定的信息。
docker run -itd -P --name web01 centos:7 /bin/bash
#创建并运行源容器取名web1
docker run -itd -P --name web03 --link web01:web01 centos:7 /bin/bash、
#创建并运行接收容器取名web2使用--link选项指定连接容器以实现容器互联#进入web03容器
docker exec -it web03 /bin/bash
ping 90fd4a7ad12f #查看web01的地址
docker inspect web01 #进入web03pingweb01的IP地址
ping 172.17.0.5