网络详解
安装docker时,他会自动创建三个网络,bridge(创建容器默认连接到此网络)、none、host
- host:容器将不会虚拟出自己的网卡,配置自己的IP等。而是使用宿主机的IP和端口
- container:创建的容器不会创建自己的网卡、配置自己的IP,而是和一个指定的容器共享IP、端口范围
- none:该模式关闭了容器的网络功能
- bridge:此模式会为每一个容器分配、设置ip等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及IP tables
网络
docker network ls ///查看docker容器中的网卡
///桥接模式
docker run -itd --name test1 --network bridge centos:7 /bin/bash //创建容器后面不能接--IP地址
docker ps -a ///查看容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ad1dcabe60c centos:7 "/bin/bash" About a minute ago Up About a minute test1
docker exec -it 2ad1dcabe60c /bin/bash 进入容器
[root@2ad1dcabe60c /]# yum install -y net-tools ///在容器中优化环境
[root@2ad1dcabe60c /]# ifconfig ///在容器中查看网卡
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 10812 bytes 16007415 (15.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5913 bytes 323629 (316.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
///自定义网络固定ip
[root@promote ~]# docker network create --subnet=172.18.0.0/16 mysnetwork ///创建一个网络容器
48ddf0333e3a49af4c61976e0c54e36ca00fdb6d9062c0ca7a7ec1a96e6ecee7
[root@promote ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
43c41951a769 bridge bridge local
7bacc53df75e host host local
48ddf0333e3a mysnetwork bridge local
23f2665b3a0b none null local
[root@promote ~]# ifconfig
///新增一个网卡
br-48ddf0333e3a: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:9e:1e:89:ad txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@promote ~]# docker run -itd --name test2 --network mysnetwork --ip 172.18.0.10 centos:7 /bin/bash //创建网卡
f7b597f21be710ab6c9723943c2b28f4446769e3b39bf8b5074d162b57b4a628
[root@promote ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7b597f21be7 centos:7 "/bin/bash" About a minute ago Up 57 seconds test2
2ad1dcabe60c centos:7 "/bin/bash" 37 minutes ago Up 37 minutes test1
[root@f7b597f21be7 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.0.10 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:ac:12:00:0a txqueuelen 0 (Ethernet)
RX packets 10506 bytes 15489652 (14.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5621 bytes 307386 (300.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
///网卡可以指定IP地址
资源控制
一、cup
cpu使用率
///进入容器文件中-1表示容器可以任意使用资源 (注意docker目录只有在容器开启时才会产生)可以直接更改参数
cat /sys/fs/cgroup/cpu/docker/2ad1dcabe60cb0d0973da54e57914a9abac372c5e57034335c94a40c17abb5e7/cpu.cfs_quota
-1
docker run -itd --name test3 --cpu-quota 20000 centos:7 /bin/bash //设置cpu使用率 20000是以时间秒(s)为单位应为cpu生命周期是以时间为周期的
6a7d0c782f9356bb361e57344d5832517edd82f5fea8340393bde1ae9d97816c
//cpu压测测试
docker exec -it 6a7d0c782f93 /bin/bash ///进入容器
yum install -y bc ///下载压测所需工具
echo "scale=5000; 4*a(1)" | bc -l -q
利用top查看cpu使用上线在20%作用
按比例分配
创建两个容器为c1和c2 容只有这两个容器,设置容器的权重(占用资源比例),使得c1 和 c2 cpu资源占比为33.3%和66.7%
//创建两个容器
docker run -itd --name c1 --cpu-shares 512 centos:7 /bin/bash ///占cpu比例3/1
docker run -itd --name c2 --cpu-shares 1024 centos:7 /bin/bash 站cpu比例3/2
验证结果
//分别进入容器
docker exec -it 5b0695b757c3 /bin/bash ///进入c1
yum install -y epel-release ///装源
yum install stress -y ///压测工具
stress -c 4 ///进行压测
限制容器使用指定的cpu
利用top在按1查看cpu的使用
docker run -itd --name c1 --cpuset-cpus 1,3 centos:7 /bin/bash //设置一、三线程为容器服务
docker exec -it a09943990395 /bin/bash 进入容器
开始压测
yum install -y epel-release
yum install stress -y
stress -c 4
内存使用限制
docker run -itd --name c2 -m 512m centos:7 /bin/bash //创建一个内存为512m的容器
docker stats ///查看容器使用
//对io的限制
–device-read-bps:限制读取某个设备的bps(数据量)例如 docker run -d --name c1 --device-read-bps centos:7 /bin/bash
–device-write-bps:限制写入某个设配的bps 例如:docker tun -d --name c2 --device-write-bps centos:7 /bin/bash