Docker虛擬化與普通虛擬化的區別
Docker虛擬化佔用資源較少,更快的啓動,具備更好的性能,而普通虛擬化佔用資源較大啓動須要1,2分鐘。Docker中的容器與宿主機的內核相同,若是虛擬機服務器對內核版本有要求,這個服務就不太適合docker來實現,而適合普通虛擬化。
注意:**全虛擬化,所須要的硬件都必須準備好(KVM,vm)nginx
docker容器與宿主機內核的關係:
查看鏡像
docker images
進入容器
docker run -it centos:latest /bin/bash
docker run -it --name test centos:7 /bin/bash
查看容器根目錄(與宿主機的/目錄基本相同)
由此能夠看出內核也相同
若是虛擬機服務對內核版本有要求,這個服務就不太適合docker來實現了。
內核,若是須要安裝的服務與宿主機的內核不匹配,那麼能夠考慮,別的虛擬化軟件,由於容器中的內核與宿主機的內核相同*。web
busybox:欺騙層。
Docker是不佔用端口的,運用的是在後臺運行(由圖)
解耦:解除耦合,解除衝突
耦合:衝突現象。
在docker程序run ......》新的centos系統(nginx,web)
對於docker來講只是運行了一個進程而已。docker
Namespace和cgroup的意思與做用:
Namespace(名稱空間);用來隔離容器
Cgroup(控制組):對容器資源的限制。
Namespace的六項隔離,與docker容器cgroup方面的功能:***
Namespace的六項隔離:
IPC:共享內存,消息隊列
MNT:掛載點,文件系統
NET:網絡棧
PID:進程編號
USER:用戶。組
UTS:主機名,域名。
Namespec :六項隔離,實現了容器與宿主機,容器與容器之間的隔離。
cgroup的功能:
1》資源限制:cgroup能夠對進程組使用的資源總額進行限制。
2>優先級分配:經過分配的cpu時間片數量以及硬盤IO帶寬的大小,實際上相對於控制了進程運行的優先級別
3》資源統計:cgroup能夠統計系統資源使用量,好比cpu使用時間,內存使用量等,用於按量計費,同時還支持掛起動能,也就是說經過cgroup把全部資源限制起來,對資源都不能使用,注意着並非說咱們的程序不能使用了,知識不能使用資源,處於等待狀態。
4》進程控制;能夠對進程組執行掛起,恢復等操做。*centos
測試實驗:
下載一個httpd
啓動
systemctl start httpdbash
資源的限制
cd /sys/fs/cgroup
目錄下是對cpu 內存等的各類限制
權重值
cat cpu.shares
cat tasks(pid編號)
這裏記錄的都是進程編號服務器
選項: 內存限額: 容器內存包括兩個部分,物理內存,和swap 能夠經過參數控制容器內存使用量: -m或者--memory:設置內存的使用限額 --memory-swap:設置內存+swap的使用限額。 舉個例子: 運行一個容器,而且限制該容器最多使用200M內存和100M的swap dokcer run -it -m 200M --memory-swap 300M centos:7 **進入此目錄下能夠清晰查看內存與swap等限制:** [root@4e168a544caf memory]# pwd /sys/fs/cgroup/memory 內存使用限制 [root@4e168a544caf memory]# cat memory.limit_in_bytes 209715200字節 內存+swap限制 [root@4e168a544caf memory]# cat memory.memsw.limit_in_bytes 314572800
對比一個沒有限制的容器咱們會發現,若是運行容器以後不限制內存的話,意味着沒有限制。網絡
CPU使用, 經過-c使用--cpu-shares設置容器使用cpu的權重,若是不設置,默認爲1024 舉個例子: 沒有限制 :(1024) ** docker run -it --name containerA centos:7** [root@dbe30b65321c /]# cd /sys/fs/cgroup/cpu [root@dbe30b65321c cpu]# cat cpu.shares 1024(默認值) 有限制:(512) **docker run -it --name containerB -c 512 centos:7** [root@7b8e6a807f06 cpu]# cat cpu.shares 512(限制的值) [root@7b8e6a807f06 cpu]# pwd /sys/fs/cgroup/cpu **容器的Block IO 磁盤的讀寫;** Docker 中能夠經過設置權重,限制bps和iops的方式控制容器讀寫磁盤的IO, Bps:每秒讀寫的數據量 byte per second Iops:每秒IO的次數,io per second 默認狀況下,全部容器都可以平等的讀寫磁盤。也能夠經過--blkio-weight參數改變容器的blockIO的優先級 --device-read-bps:顯示讀取某個設備的bps: --device-write-bps:顯示寫入某個設備的bps --device-read-iops:顯示讀取某個設備的iops --device-write-iops:顯示寫入某個設備的iops 好比: 1.限制testA這個容器。寫入/dev/sda這塊磁盤的bps爲30MB *docker run --name testA --device-write-bps /dev/sda:30MB centos:7* 刪除容器: *docker rm testA* 2.從/dev/zero輸入,而後輸出到tet.out文件中,每次大小爲1M,總共800次,oflag=direct用來指定directlO方式寫文件,這樣纔會使—device-write-bps生效。 [**root@docker ~]# docker run -it --name testA --device-write-bps /dev/sda:30MB centos:7 [root@cf54dd8861da /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct**
[root@cf54dd8861da /]# du -h test.out
800M test.out
沒有對testB限制磁盤的讀寫(代表該下載與上傳只與網速相關)
[root@docker ~]# docker run -it --name testB centos:7
[root@3a76843b4339 /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct
800+0 records in
800+0 records out
838860800 bytes (839 MB) copied, 1.54945 s, 541 MB/side
real 0m1.551s
user 0m0.001s
sys 0m0.636s性能
根據對比也能夠看出無法限制空間利用率大小測試