天津品牌网站制作,手机网站布局技术,关于网站建设的博客,建筑公司宣传册设计样本目录
一、理论
1.资源控制
2.Docker数据管理
二、实验
1.Docker资源控制
2.Docker数据管理
三、问题
1.docker容器故障导致大量日志集满#xff0c;造成磁盘空间满
2、当日志占满之后如何处理
四、总结 一、理论
1.资源控制
(1) CPU 资源控制 cgroups#xff0…目录
一、理论
1.资源控制
2.Docker数据管理
二、实验
1.Docker资源控制
2.Docker数据管理
三、问题
1.docker容器故障导致大量日志集满造成磁盘空间满
2、当日志占满之后如何处理
四、总结 一、理论
1.资源控制
(1) CPU 资源控制 cgroups是一个非常强大的linux内核工具他不仅可以限制被 namespace 隔离起来的资源 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups Control groups 实现了对资源的配额和度量。
(2)cgroups四大功能
●资源限制可以对任务使用的资源总额进行限制●优先级分配通过分配的cpu时间片数量以及磁盘IO带宽大小实际上相当于控制了任务运行优先级●资源统计可以统计系统的资源使用量如cpu时长内存用量等●任务控制cgroup可以对任务执行挂起、恢复等操作
(3) 设置CPU使用率上限 Linux 通过 CFSCompletely Fair Scheduler完全公平调度器来调度各个进程对 CPU 的使用。CFS 默认的调度周期是 100ms。10万微秒 我们可以设置每个容器进程的调度周期以及在这个周期内各个容器最多能使用多少 CPU 时间。 使用 --cpu-period 即可设置调度周期使用 --cpu-quota 即可设置在每个周期内容器能使用的 CPU 时间。两者可以配合使用。 CFS 周期的有效范围是 1ms~1s对应的 --cpu-period 的数值范围是 1000~100000。 而容器的 CPU 配额必须不小于 1ms即 --cpu-quota 的值必须 1000。
启用一台容器:
docker run -itd --name test1 centos:7 /bin/bashcpu.cfs_period_uscpu分配的周期(微秒所以文件名中用 us 表示默认为100000。
cpu.cfs_quota_us表示该control group限制占用的时间微秒默认为-1表示不限制。 如果设为50000表示占用50000/10000050%的CPU。
①进行CPU压力测试
编写一个脚本
docker exec -it 3ed82355f811 /bin/bash
vim /cpu.sh
#!/bin/bash
i0
while true
do
let i
done
运行
chmod x /cpu.sh
./cpu.sh
exit
②设置50%的比例分配CPU使用时间上限
docker run -itd --name test2 --cpu-quota 50000 centos:7 /bin/bash #可以重新创建一个容器并设置限额
或者
cd /sys/fs/cgroup/cpu/docker/3ed82355f81151c4568aaa6e7bc60ba6984201c119125360924bf7dfd6eaa42b/
echo 50000 cpu.cfs_quota_us
docker exec -it 3ed82355f811 /bin/bash
./cpu.sh
exit
(4) 设置CPU资源占用比设置多个容器时才有效
Docker 通过--cpu-shares 指定 CPU 份额默认值为1024值为1024的倍数。
例 创建两个容器为 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
分别进入容器进行压力测试
yum install -y epel-release
yum install stress -y
stress -c 4
(5)设置容器绑定指定的CPU
先分配虚拟机4个CPU核数
创建容器
docker run -itd --name cc1 --cpuset-cpus 1,3 centos:7 /bin/bash进入容器进行压力测试
yum install -y epel-release
yum install stress -y
stress -c 4
exit
退出容器执行 top 命令再按 1 查看CPU使用情况
(6) 对磁盘IO配额控制blkio的限制
--device-read-bps限制某个设备上的读速度bps数据量单位可以是kb、mb(M)或者gb。
例
docker run -itd --name test4 --device-read-bps /dev/sda:1M centos:7 /bin/bash
--device-write-bps 限制某个设备上的写速度bps数据量单位可以是kb、mb(M)或者gb。
例
docker run -itd --name test5 --device-write-bps /dev/sda:1M centos:7 /bin/bash
--device-read-iops 限制读某个设备的iops次数 --device-write-iops 限制写入某个设备的iops次数
创建容器并限制写速度
docker run -it --name cc3 --device-write-bps /dev/sda:1mb centos:7 /bin/bash通过dd来验证写速度
dd if/dev/zero oftest.out bs1M count10 oflagdirect #添加oflag参数以规避掉文件系统cache2.Docker数据管理
1数据卷 数据卷是一个供容器使用的特殊目录位于容器中。可将宿主机的目录挂载到数据卷上对数据卷的修改操作立刻可见并且更新数据不会影响镜像从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。
例
先下载一个镜像
docker pull centos:7宿主机目录/var/www挂载到容器中的/data1。
注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在Docker会自动创建相应的路径。
docker run -V /var/www:/data1 --name web1 -it centos:7 /bin/bash
#-v选项可以在容器内创建数据卷ls
echo this is cc1 /data1/abc.txt
exit#返回宿主机进行查看
cat /var/www/abc.txt
2数据卷容器
如果需要在容器之间共享一些数据最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器专门提供数据卷给其他容器挂载使用。
例
创建一个容器作为数据卷容器
docker run --name web2 -v /data1 -v /data2 -it centos:7 /bin/bash
echo this is web2 /data1/abc.txt
echo THIS IS WEB2 /data2/ABC.txt
使用 --volumes-from来挂载web2容器中的数据卷到新的容器
docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
cat /data1 /abc.txt
cat /data2/ABC.txt
3端口映射
在启动容器的时候如果不指定对应的端口在容器外是无法通过网络来访问容器内的服务。端口映射机制将容器内的服务提供给外部网络访问实质上就是将宿主机的端口映射到容器中使得外部网络访问宿主机的端口便可访问容器内的服务。
docker run -d --name test1 -P nginx
#随机映射端口( 从32768开始)
docker run -d --name test2 -p 43000:80 nginx
#指定映射端口 4容器互联使用centos镜像
容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说就是会在源容器和接收容器之间建立一条隧道接收容器可以看到源容器指定的信息
例
docker run -itd -P --name xx1 centos:7 /bin/bash创建并运行接收容器取名xx2使用--1ink选项指定连接容器以实现容器互联
docker run -itd -P --name xx2 --link xx1:xx2 centos:7 /bin/bash进xx2容器ping xxl
docker exec -it xx2 bash二、实验
1.Docker资源控制
1设置CPU使用率上限 进行CPU压力测试
编写一个脚本 查看脚本占用CPU资源 设置50%的比例分配CPU使用时间上限 可以看到CPU占用率接近50%cgroups对CPU的控制起了效果 2设置CPU资源占用比设置多个容器时才有效
创建两个容器为 c1 和 c2若只有这两个容器设置容器的权重使得c1和c2的CPU资源占比为1/3和2/3。 分别进入容器进行压力测试
容器c1 容器c2 查看容器运行状态动态更新
CPU总和是400%。因为虚拟机使用的是4核而且C1和C2的CPU使用百分比约为12 3设置容器绑定指定的CPU
已分配虚拟机4个CPU核数 创建容器
只允许cc1容器使用第2个和第4个CPU 进入容器 安装依赖包 安装压力测试工具 进行压力测试 执行 top 命令 再按 1 查看CPU使用情况只有第2个和第4个CPU被使用 4对磁盘IO配额控制blkio的限制
创建容器并限制写速度
可以看到写的速度被限制了 清理docker占用的磁盘空间:
用于清理磁盘删除关闭的容器、无用的数据卷和网络 2.Docker数据管理
(1) 数据卷
先下载一个镜像 宿主机目录/var/www挂载到容器中的/data1。
注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在Docker会自动创建相应的路径。
文件内容一样 2数据卷容器
创建一个容器作为数据卷容器 使用 --volumes-from来挂载web2容器中的数据卷到新的容器 是在上一个容器创建的文件说明挂载成功 3端口映射 在启动容器的时候如果不指定对应的端口在容器外是无法通过网络来访问容器内的服务。端口映射机制将容器内的服务提供给外部网络访问实质上就是将宿主机的端口映射到容器中使得外部网络访问宿主机的端口便可访问容器内的服务。 (4) 容器互联使用centos镜像
容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说就是会在源容器和接收容器之间建立一条隧道接收容器可以看到源容器指定的信息
创建并运行源容器取名xx1 创建并运行接收容器取名xx2使用--1ink选项指定连接容器以实现容器互联 进xx2容器ping xxl 三、问题
1.docker容器故障导致大量日志集满造成磁盘空间满
1解决方案 清除日志
#!/bin/bash
logs$ (find /var/lib/docker/containers/ -name *-json.log*)
for log in $logs
do
cat /dev/null $log
done
2、当日志占满之后如何处理
###设置docker日志文件数量及每个日志大小vim /etc/docker/daemon.json
{
registry-mirrors: [http://f613ce8f.m.daocloud.io]
log-driver: json-file, #我的一日志格式
log-opts: { max-size : 500m, max-file : 3} 日志的参数最大500M 我最大容器中有三个日志文件 每个日志文件大小是500M
}
修改完需要重新加载 systemctl daemon-reload 四、总结
清理docker占用的磁盘空间:
docker system prune -a #可以用于清理磁盘删除关闭的容器、无用的数据卷和网络