docker network ls #查看docker网络信息
[root@192 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
2e0728405ba4 bridge bridge local
e0ce1ddab7c2 host host local
c5cf962b5b57 none null local
docker0 虚拟容器网关 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
none:该模式关闭了容器的网络功能
host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
bridge:(最常见的模式,也是默认的network网络形式)此模式会为每一个容器分配、设置IP等,并将容器连接到一个 docker0 虚拟网桥以及Iptables nat(iptables做了一个nat地址转换)表配置与宿主机通信。
Container:创建的容器不是创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围
以上都是不用动手的,真正需要配置的是自定义网络
docker run -itd --name test1 --network bridge --ip 172.17.0.100 centos:7 /bin/bash
[root@192 ~]# docker run -itd --name test1 --network bridge --ip 172.17.0.100 centos:7 /bin/bash
......省略内容
docker: Error response from daemon: user specified IP address is supported on user defined networks only.
会发现使用bridge无法支持自定义IP
自定义网络固定IP(类似创建一个子网段)
docker network create --subnet=172.18.0.0/16 mynetwork
docker run -itd --name test2 --network mynetwork --ip 172.18.0.10 centos:7 /bin/bash
[root@192 ~]# docker run -itd --name test2 --network mynetwork --ip 172.18.0.10 centos:7 /bin/bash
5ee683954f3e38cd904bc74e4f69082c00b95d87e6b69de55123d92fac4af28b
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ee683954f3e centos:7 "/bin/bash" 7 seconds ago Up 5 seconds test2
[root@192 ~]# docker exec -it 5ee683954f3e /bin/bash
[root@5ee683954f3e /]#
进入容器,要想使用 ifconfig 命令查询IP,安装 net-tools 工具
yum -y install net-tools
进入docker目录查看cpu资源目录
cd /sys/fs/cgroup/cpu/docker/
[root@192 ~]# cd /sys/fs/cgroup/cpu/
[root@192 cpu]# cd docker/
[root@192 docker]# ls
5ee683954f3e38cd904bc74e4f69082c00b95d87e6b69de55123d92fac4af28b #镜像(container)ID
……省略内容
[root@192 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ee683954f3e centos:7 "/bin/bash" 2 hours ago Up 2 hours test2
进入镜像查看cpu.cfs_quota_us文件数值
[root@192 docker]# cd 5ee683954f3e38cd904bc74e4f69082c00b95d87e6b69de55123d92fac4af28b
[root@192 5ee683954f3e38cd904bc74e4f69082c00b95d87e6b69de55123d92fac4af28b]# ls
cgroup.clone_children cpuacct.stat cpu.cfs_period_us cpu.rt_runtime_us notify_on_release
cgroup.event_control cpuacct.usage cpu.cfs_quota_us cpu.shares tasks
cgroup.procs cpuacct.usage_percpu cpu.rt_period_us cpu.stat
[root@192 5ee683954f3e38cd904bc74e4f69082c00b95d87e6b69de55123d92fac4af28b]# cat cpu.cfs_quota_us
-1
cpu.cfs_quota_us = -1 #cpu配额,默认值是-1,表示容器能使用的资源是不受限制的
CPU的周期 以 1s 秒为周期定律,参数值为 100000
如果需要cpu使用容器资源分配率为 20% 左右,参数值为 20000 ,相当于一个周期分配给这个容器资源的 0.2s 秒
cpu是按照时间周期来进行分配的,在一个时刻只会给一个进程分配资源
[root@192 ~]# docker run -itd --name test3 --cpu-quota 20000 centos:7 /bin/bash
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5bd0371c6da5 centos:7 "/bin/bash" About a minute ago Up 10 seconds test3
5ee683954f3e centos:7 "/bin/bash" 3 hours ago Up 3 hours test2
压力测试,进入要测试的容器安装 bc 工具
[root@5bd0371c6da5 /]# yum -y install bc
[root@5bd0371c6da5 /]# echo "scale=5000;4*a(1)" | bc -l -q #执行圆周率显示小数点后5000位的计算
再打开一个终端,用 top 实时测试动态数据
可以看出,cpu资源使用率在满载的情况下,在20%左右
[root@docker 5bd0371c6da57f568a68b07d1e440a41d2c12a5ae6d4db1acb3128a47c39065d]# echo "20000" > 5bd0371c6da57f568a68b07d1e440a41d2c12a5ae6d4db1acb3128a47c39065d/cpu.cfs_quota_us
创建两个容器为 c1 和 c2 ,若只有这两个容器,设置容器的权重,是的 c1 和 c2 的 cpu 资源占比为 33.3 % 和 66.7%
cpu_shares 为权重文件
优点:灵活性大大增加,根据设置的总和值来进行分配
[root@192 docker]# docker run -itd --name c1 --cpu-shares 512 centos:7 /bin/bash
480771c0c89c8eb1215f7f7f283fe78aa55159a245aa1ecd4a592426f644a455
[root@192 docker]# docker run -itd --name c2 --cpu-shares 1024 centos:7 /bin/bash
a1bbc1e12782103f737964e41eabd928bf2e9bbd10e89b2bf004dda7a2c6c6c2
分别进入容器安装 epel-release、stress 压测工具
[root@192 docker]# docker exec -it 480771c0c89c /bin/bash
[root@480771c0c89c /]# yum install epel-release -y
[root@480771c0c89c /]# yum -y install stress
测试
用 stress -c 4 命令来进行测试 #产生4个cpu线程
[root@480771c0c89c /]# stress -c 4 #c1
stress: info: [101] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
[root@a1bbc1e12782 /]# stress -c 4 #c2
stress: info: [99] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
之前创建的容器太多,用 docker ps -a | awk ‘{print "docker rm "$1}’ | bash 命令进行批量删除
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1bbc1e12782 centos:7 "/bin/bash" 22 minutes ago Exited (137) About a minute ago c2
480771c0c89c centos:7 "/bin/bash" 23 minutes ago Exited (137) About a minute ago c1
5bd0371c6da5 centos:7 "/bin/bash" About an hour ago Exited (137) About a minute ago test3
5ee683954f3e centos:7 "/bin/bash" 4 hours ago Exited (137) About a minute ago test2
[root@192 ~]# docker ps -a | awk '{print "docker rm "$1}' | bash
Error: No such container: CONTAINER
a1bbc1e12782
480771c0c89c
5bd0371c6da5
5ee683954f3e
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@192 ~]#
[root@192 ~]# docker run -itd --name test1 --cpuset-cpus 1,3 centos:7 /bin/bash
e8b77e45066fed7fdb7b9159270feff29ca702c421e081f36a7fb95cf094e336
进入容器,安装压测工具
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e8b77e45066f centos:7 "/bin/bash" 42 seconds ago Up 41 seconds test1
[root@192 ~]# docker exec -it e8b77e45066f /bin/bash
[root@e8b77e45066f /]# yum -y install epel-release
[root@e8b77e45066f /]# yum -y install stress
用 stress -c 4 命令来进行测试
[root@e8b77e45066f /]# stress -c 4
stress: info: [98] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
打开另一个终端,使用 top 命令 按1 显示cpu数量详细动态数据状态查看
[root@192 ~]# docker run -itd --name test02 -m 512m centos:7 /bin/bash
ca910192d6046bb9243be070487511312db02c233f5ba8fb2d49cf5d28099cfa
控制读写数据量
读出数据用 --device-read-bps 限制读某个设备的bps
写入数据用 --device-write-bps 限制写入某特设备的bps
docker run -itd --device-read-bps /dev/sda:20M centos:7 /bin/bash
docker run -itd --device-write-bps /dev/sda:20M centos:7 /bin/bash
控制读写次数
读出数据用 --device-read-iops 限制读某个设备的bps
写入数据用 --device-write-iops 限制写入某特设备的bps
docker run -itd --device-read-iops /dev/sda:20M centos:7 /bin/bash
docker run -itd --device-write-iops /dev/sda:20M centos:7 /bin/bash