Docker网络模式(host,container,none,bridge)和资源控制管理

一、Docker网络类型

在这里插入图片描述

docker 0 网络
docker 虚拟网关,在docker安装完成之后自动生成的虚拟网卡
docker 0 :容器的网关,绑定物理网卡,负责做NAT地址转换、端口映射
docker 0本身也是一种容器


loopback(lo) :回环网卡、TCP/IP主机连接性,网卡是否生效,检测本地是否可以通信,自我检测,虚拟化平台网卡


ens33:虚拟机(宿主机)网络网卡


virtual bridge(virdr0): linux自身继承了一个虚拟化功能(kvm架构) ,是原生架构的一个虚拟化平台,安装了一个虚拟化平台之后就会系统就会自动安装虚拟网卡

二、Docker自定义网络

1. 查看网络列表

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5f75128f6c5f   bridge    bridge    local
7d30ede40bf5   host      host      local
76430996d0b9   none      null      local

在这里插入图片描述

2. 根据镜像创建容器并指定ip地址

因为本地有镜像,所以下载是无效的,直接进行操作
                                                          指定名称        使用网络模式
[root@localhost ~]# docker run -itd --name test1 --network bridge --ip 
                                           运行  
172.17.0.100 nginx:latest /bin/bash
指定IP地址

-itd:标准输入,伪终端,后台运行 

Error response from daemon: user specified IP address is supported on user defined networks only.

3. 根据镜像创建容器不指定ip地址

[root@localhost ~]# docker run -itd --name test2 --network bridge                    
nginx:latest /bin/bash
         
[root@localhost ~]# docker ps -a   

[root@localhost ~]# docker start da45bf50e6fa    #运行启动容器
报错,原因已经之前指定IP地址了

在这里插入图片描述
原因:创建运行容器手动指定IP地址,不允许,没有权限,违背ip地址分配规则按顺序配置

4. 查看创建容器ip地址

[root@localhost ~]# docker run -itd --name test3 --network bridge  centos:7 /bin/bash
[root@localhost ~]# docker ps -a
[root@localhost ~]# docker exec -it 824fa8476306  /bin/bash 进入容器
[root@7df0a3e53a13  /]# yum -y install net-tools 安装软件以支持ifconfig


[root@7df0a3e53a13  /]# ifconfig 
查看可以看到这个ip地址是根据容器数量顺序来分配的

在这里插入图片描述

三、自定义网络网桥固定IP

docker run -itd --name test2 --net mynetwork --ip 172.18.0.100 centos:7 /bin/bash

1. 自定义创建网桥

[root@localhost ~]# docker network create --subnet=172.18.0.0/16 submy
[root@localhost ~]# docker network ls

2. 定义分配地址

[root@localhost ~]# docker run -itd --name test4 --net submy --ip 172.18.0.100 centos:7 /bin/bash
[root@localhost ~]# docker ps -a
[root@localhost ~]# docker exec -it 342b32844f04  /bin/bash
[root@e9caff5b2448 /]#    yum -y install net-tools
[root@e9caff5b2448 /]#  ifconfig

在这里插入图片描述

3. 进行网关通信测试,通过ens33物理网卡进行通信

[root@e9caff5b2448 /]#  ping 172.18.0.1
[root@e9caff5b2448 /]#   ping 172.17.0.1
[root@localhost ~]# ifconfig 

在这里插入图片描述

四、Docker资源控制(CPU、内存、Io资源制)

1. 引导

cgroup (资源限制)
07年谷歌,可以控制资源分配通过操作系统内核,控制应用程序使用内存资源、cpu资源、 文件系统资源等等
cgroup是一种资源控制手段

2. CPU使用率控制

cat /sys/fs/cgroup/qpu/docker/容器ID/qpu.cfs_ quota us

[root@localhost ~]# cd /sys/fs/cgroup/cpu/docker/
[root@localhost docker]# ll
总用量 0
drwxr-xr-x 2 root root 0 310 19:25 201fa27e0f84e86acad9e718d5d7307d4cd150646ac933633b6e89831259499b
drwxr-xr-x 2 root root 0 310 22:08 342b32844f04da2739385fdbc20f84a4c2590277332096f8e78007f6dd81c28a
drwxr-xr-x 2 root root 0 310 22:02 7df0a3e53a137e143a164d7c32e34312a22b443b89ee32fff1ccfad945e545fe
。。。。。。
[root@localhost docker]# cd 7df0a3e53a137e143a164d7c32e34312a22b443b89ee32fff1ccfad945e545fe/
[root@localhost 7df0a3e53a137e143a164d7c32e34312a22b443b89ee32fff1ccfad945e545fe]# ll
总用量 0
-rw-r--r-- 1 root root 0 310 22:02 cgroup.clone_children
--w--w--w- 1 root root 0 310 22:02 cgroup.event_control
-rw-r--r-- 1 root root 0 310 22:21 cgroup.procs
-r--r--r-- 1 root root 0 310 22:02 cpuacct.stat
-rw-r--r-- 1 root root 0 310 22:02 cpuacct.usage
-r--r--r-- 1 root root 0 310 22:02 cpuacct.usage_percpu
-rw-r--r-- 1 root root 0 310 22:02 cpu.cfs_period_us
-rw-r--r-- 1 root root 0 310 22:02 cpu.cfs_quota_us
-rw-r--r-- 1 root root 0 310 22:02 cpu.rt_period_us
-rw-r--r-- 1 root root 0 310 22:02 cpu.rt_runtime_us
-rw-r--r-- 1 root root 0 310 22:02 cpu.shares
-r--r--r-- 1 root root 0 310 22:02 cpu.stat
-rw-r--r-- 1 root root 0 310 22:02 notify_on_release
-rw-r--r-- 1 root root 0 310 22:02 tasks
[root@localhost 7df0a3e53a137e143a164d7c32e34312a22b443b89ee32fff1ccfad945e545fe]# cat cpu.cfs_quota_us 
-1

-1:代表此容器可以使用的资源不受限制会引发问题,导致某个容器占用资源过大,影响其它容器的性能


cpu周期: 1s为一个周期的定律,参数值一般为100000 (CPU衡量单位是秒)

假如需要给此容器分配cpu使用率的20%,则参数需要设置为20000,相当于每个周期分配给这个容器0.2s

cpu在一个时刻,只能给一个进程占用

3. 动态查看cpu使用率

[root@localhost ~]# top 
[root@localhost ~]# docker stats

在这里插入图片描述

4. 20%的限定

4.1 方式一、在创建容器运行进行资源限制

docker run -itd --name test5 --cpu-quota(限制) 20000 镜像 /bin/bash

CPU压力测试

docker exec -it 容器id /bin/bash
yum install -y bc

[root@localhost ~]# docker ps -a
[root@localhost ~]# docker run -itd --name test5 --cpu-quota 20000 centos:7 /bin/bash
[root@localhost ~]# docker ps -a
[root@localhost ~]# docker exec -it a3542edaebb2 /bin/bash
[root@5b55b0b7e171 /]# yum -y install bc

计算圆周率

echo "scale= 5000;4*a(1)"|bc-| -q

[root@5b55b0b7e171 /]# echo "scale=5000;4*a(1)" | bc -l -q

另开一个新的会话窗口查看,可以查看bc的CPU占用率

[root@localhost ~]# top 

4.2 方式二、对已经存在且在运行时状态的容器进行设置

echo "20000" > 容器完整ID/cpu.cfs quota us

[root@localhost docker]# echo "20000" > 7df0a3e53a137e143a164d7c32e34312a22b443b89ee32fff1ccfad945e545fe/cpu.cfs_quota_us 

5. 设置容器的权重

按比例分配设置容器权重,此处权重是所有值相加然后看占用百分比

[root@localhost docker]# docker ps -a   查看容器列表 
[root@localhost docker]# docker stop a02091405a90   停止容器
[root@localhost docker]# docker stop 824fa8476306 
[root@localhost docker]# docker stop  b2b13dbc8c07  
[root@localhost docker]# docker stop a3542edaebb2 
[root@localhost docker]# docker ps -a 
[root@localhost docker]# docker run -itd --name s1 --cpu-shares 512 centos:7 /bin/bash
[root@localhost docker]# docker run -itd --name s2 --cpu-shares 1024 centos:7 /bin/bash
[root@localhost docker]# docker ps -a

在这里插入图片描述

5.1 使用压测工具

复制两个终端、分别进入容器后进行测试,主终端使用docker stats进行查看,分别安装

yum install epel-release -y
yum install stress -y

stress模拟满载线程
stress -c  4 (CPU配置数量)

另开一个新的会话窗口查看,查看容器资源占用情况

docker stats

6.限制容器使用的CPU (指定使用第2第4个)

[root@localhost ~]# docker run -itd --name c1 --cpuset-cpus 1,3 centos:7 /bin/bash
[root@localhost ~]# docker ps -a
[root@localhost ~]# docker exec -it 58d316d9cd20 /bin/bash
[root@e4c174b08ae1 /]#  yum -y install epel-release
[root@e4c174b08ae1 /]#  yum -y install stress
[root@e4c174b08ae1 /]#  stress -c 4

主终端动态查看top

7.内存使用上限限制

[root@localhost ~]# docker run -itd --name test1 -m 512m centos:7 /bin/bash

查看cpu状态

docker stats

在这里插入图片描述

8.docker Io限制

docker的Io限制就是对block的Io进行约束
控制数据量用的较多,其中控制Io次数使用的较少

--device-read-bps :限制读某个设备的bps (数据量,比特率,每秒数据传输速率)
docker run -itd --device-read-bps /dev/sda:30M centos:7 /bin/bash
--device-write-bps:限制写入某 个设备的bps (数据量)
docker run -itd --device-write-bps /dev/sda:30M centos:7 /bin/bash
--device-read-iops限制读某个设备的iops (次数)
--device-write-iops 限制写入某个设备的iops (次数)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值