docker网络模式与资源控制
文章目錄
- 容器網絡
- Docker四種網絡模式
- HOST
- container
- None
- Bridge
- veth對
- 總結
- docker自定義網絡
- 自定義網絡固定IP
- docker資源控制(cpu、內存、IO資源控制)
- cpu使用率控制
- 設置容器的權重
- 使用壓測工具
- 限制容器使用的cpu(指定使用第二個和第四個)
- 內存使用限制
- 查看容器狀態或者資源使用情況的命令
容器網絡
docker 0 網絡
docker 虛擬網關,在docker安裝完成之后自動生成的虛擬網卡
loopback(lo) :回環網卡、TCP/IP主機連接性,網卡是否生效,檢測本地是否可以通信,自我檢測,虛擬化平臺網卡
ens33:虛擬機(宿主機)網絡網卡
virtual bridge(virdr0): linux自身繼承了一個虛擬化功能(kvm架構) ,是原生架構的一個虛擬化平臺,安裝了一個虛擬化平臺之后就會系統就會自動安裝虛擬網卡
(示例:安裝workstation (虛擬化平臺) 之后,會在網絡適配器中會多出VMnet1 VMnet8 VMnet0)
docker 0 :容器的網關,綁定物理網卡,負責做NAT地址轉換、端口映射
docker 0本身也是一種容器
在容器內部創建的兩個容器A,B,通過docker 0(相當于小型的局域網,為內部容器的網關)進行內部通信;與外部通信地址映射Nat模式物理網卡ens33
如果兩個內部容器的服務不同,但端口一樣,進行外部通信時,進行端口映射成不同的端口進行通信
Docker四種網絡模式
HOST
host容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network Namespace(網絡名稱空間),而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。但是,容器的其他方面,如文件系統、進程列表等還是和宿主機隔離的。
使用host模式的容器可以直接使用宿主機的IP地址與外界通信,容器內部的服務端口也可以使用宿主機的端口,不需要進行NAT, host 最大的優勢就是網絡性能比較好,但是docker host上已經使用的端口就不能再用了,網絡的隔離性不好。
container
創建的容器不會創建自己的網卡、設置IP等,而是和一個指定地容器共享IP、端口范圍
這個模式指定新創建的容器和已經存在的一個容器共享一network namespace,而不是和宿主機共享,新創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定地容器共享IP、端口范圍等。同樣,兩個容器除了網絡方面,其他的如文件系統、進程列表還是隔離的。兩個容器的進程可以通過loo網卡設備通信
None
該模式關閉了容器的網絡功能
這種網絡模式下容器只有lo回環網口,沒有其他的網卡。none 模式可以在容器創建時通過-network=none參數指定
這種類型的網絡無法聯網,但是封閉的網絡能很好的保證容器的安全性,提高了安全性。
Bridge
此模式會為每一個容器分配、設置IP等,并將容器連接到一個docker虛擬網橋,通過docker0網橋及iptables的nat表配置與宿主機通信
當Docker進程啟動時,會在主機上創建一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連接到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網絡中
從docker0子網中分配一個IP給容器使用,并設置docker0的IP地址為容器的默認網關。在主機上創建一對虛擬網卡veth pair設備,Docker將veth pair設備的一端掛載在新創建的容器中,并命名為ethO (容器的網卡),另一端放在主機中,以vethxxx這樣類似的名字命名,并將這個網絡設備加入到docker0網橋中。可以通過brctl show命令查看。
veth對
成對出現的虛擬接口
用于連接兩個虛擬網絡環境或者用于連接兩個不同的名稱空間
veth對是以掛載的形式,掛載到兩個名稱空間的
總結
host模式 -net= host 容器和宿主機共享Network namespace(網絡名稱空間)
container模式 -net=container.NAME_or_ID 容器和另外一個容器共享Network namespace(共享ip地址和端口范圍)
none模式 -net= none 容器有獨立的Network namespace,但并沒有對其進行任何網絡設置,無法與外部進行交互。如分配veth pair和網橋連接,配置IP等。
bridge模式 -net= bridge (默認為該模式)
docker 0為虛擬網橋,所有的容器會連接到虛擬網橋上(因為虛擬網橋為它們的虛擬網關),虛擬網橋會結合iptable的規則去進行地址映射,把容器地址段映射為宿主機的地址段,用于和宿主機通訊,最后讓宿主機連接外網。
以上不需要動手配置,真正需要配置的是自定義網絡
docker自定義網絡
自定義網絡固定IP
[root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 605075ebd5e6 bridge bridge local ea70c11e69f5 host host local 4cf0c025bd96 none null local [root@localhost ~]# docker network create --subnet=172.18.0.0/16 net 9d90d967c225998531d15cd73423de626cf73ca605c1063718d5b4c5ed1d8db2 [root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 605075ebd5e6 bridge bridge local ea70c11e69f5 host host local 9d90d967c225 net bridge local 4cf0c025bd96 none null local [root@localhost ~]# docker run -itd --name test0 --net net --ip 172.18.0.100 centos:7 /bin/bash e3c736dfaaeb008ed4ee231ba860c4bdad0d1a42fd9d6cde83825bc0a11e28e4 [root@localhost ~]# docker ps -a [root@localhost ~]# docker exec -it e3c736dfaaeb /bin/bash [root@e3c736dfaaeb /]# yum -y install net-tools 安裝軟件以支持ifconfig [root@e3c736dfaaeb /]# ifconfigdocker資源控制(cpu、內存、IO資源控制)
cpu使用率控制
[root@localhost ~]# cd /sys/fs/cgroup/cpu/docker [root@localhost docker]# ll [root@localhost docker]# cd e3c736dfaaeb008ed4ee231ba860c4bdad0d1a42fd9d6cde83825bc0a11e28e4 [root@localhost e3c736dfaaeb008ed4ee231ba860c4bdad0d1a42fd9d6cde83825bc0a11e28e4]# ls [root@localhost e3c736dfaaeb008ed4ee231ba860c4bdad0d1a42fd9d6cde83825bc0a11e28e4]# cat cpu.cfs_quota_us -1
注:"-1"代表了此容器可以使用的資源不受限制
cpu周期:1s為一個周期的定律,參數值一般為100000(cpu衡量單位是秒)
假如需要給此容器分配cpu使用率的20%,則參數需要設置為20000,相當于每個周期分配給這個容器0.2s
cpu在一個時刻,只能給一個進程占用
檢查資源的命令:
top
docker stats(查看容器使用的資源情況)
例:20%的限定
方式一:
方式二:
對已有容器進行更改 [root@localhost docker]# cd e3c736dfaaeb008ed4ee231ba860c4bdad0d1a42fd9d6cde83825bc0a11e28e4 [root@localhost e3c736dfaaeb008ed4ee231ba860c4bdad0d1a42fd9d6cde83825bc0a11e28e4]# echo "20000" > cpu.cfs_quota_us [root@localhost e3c736dfaaeb008ed4ee231ba860c4bdad0d1a42fd9d6cde83825bc0a11e28e4]# cat cpu.cfs_quota_us 20000設置容器的權重
按比例分配設置容器權重,此處權重是所有值相加然后看占用百分比 [root@localhost ~]# docker run -itd --name a1 --cpu-shares 512 centos:7 /bin/bash 315919c6eee5275de2554bfe49f35734117e6f712d21aaa2ce423ac8b479c8a9 [root@localhost ~]# docker run -itd --name a2 --cpu-shares 1024 centos:7 /bin/bash 2d068eb6ee8d198bd2500ca325cf086e445fba84d317aa971748384ed652cfba [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d068eb6ee8d centos:7 "/bin/bash" 11 seconds ago Up 11 seconds a2 315919c6eee5 centos:7 "/bin/bash" 20 seconds ago Up 19 seconds a1使用壓測工具
復制兩個終端、分別進入容器后進行測試,主終端使用docker stats進行查看
分別安裝
[root@localhost ~]# docker exec -it 2d068eb6ee8d /bin/bash
[root@2d068eb6ee8d /]# yum -y install epel-release
[root@315919c6eee5 /]# yum -y install epel-release
[root@2d068eb6ee8d /]# yum -y install stress
[root@315919c6eee5 /]# yum -y install stress
stress模擬滿載線程
[root@2d068eb6ee8d /]# stress -c 4
stress: info: [80] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
[root@315919c6eee5 /]# stress -c 4
stress: info: [80] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
另開一個新的會話窗口查看
查看容器資源占用情況
限制容器使用的cpu(指定使用第二個和第四個)
[root@localhost ~]# docker run -itd --name c2 --cpuset-cpus 1,3 centos:7 /bin/bash 08b3400df41bb45f10d13821b37c373c72002481437f44508e41b5a449688b6b [root@localhost ~]# docker exec -it 08b3400df41b /bin/bash [root@08b3400df41b /]# yum -y install epel-release [root@08b3400df41b /]# yum -y install stress [root@08b3400df41b /]# stress -c 2 stress: info: [111] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd內存使用限制
[root@localhost ~]# docker run -itd --name c1 -m 512m centos:7 /bin/bash 10541be0a5fb5fb24bc21fe3b6414e5e6141bc067a74899a18397cc156d3d42a [root@localhost ~]# docker stats #查看cpu狀態查看容器狀態或者資源使用情況的命令
1、top 2、docker stats 3、docker inspect 容器ID總結
以上是生活随笔為你收集整理的docker网络模式与资源控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何取消计算机共享密码设置,win7系统
- 下一篇: linux下的elf结构,ELF结构详细