docker鏡像的分層(使用的是kvm 連接克隆,寫時複製的特性)docker
1:分層的好處:重複利用,節約資源centos
2:鏡像越大,遷移時間越長;而且你若是使用docker作集羣,那麼若是鏡像太大,bash
有變化,每一個更新的話,都須要很長時間。因此最好是鏡像分2-3層(基礎系統-應用服務-代碼),集羣採預與下載。ssh
查看分層鏡像信息:(請注意missing - )spa
[root@k8s129 ~]# docker history centos_ssh:v1.2 (--no-trunc)3d
IMAGE CREATED CREATED BY SIZE COMMENTblog
275e0f02e6b1 13 days ago /usr/sbin/sshd -D 32B 資源
185aecfa154d 13 days ago /bin/bash 45.2MB class
0f3e07c0138f 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B 集羣
<missing> 4 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:d6fdacc1972df524a… 220MB
至於容器如何獲取鏡像層文件而又不影響到是鏡像層的呢?docker是這樣實現的?
若是須要獲取某個文件,那麼容器曾會從上到下去下一層的鏡像層去獲取文件,若是該層文件不存在,那麼就會去下一鏡像層去尋找,直到最後一層。
對於用戶而言,用戶面向的是一個疊加後的文件系統。
而任何對於文件的操做都會記錄在容器層,例如說修改文件,容器層會把在鏡像層找到的文件拷貝到容器層而後進行修改,刪除文件則會在容器層內記錄刪除文件的記錄。
大概原理圖:
前面咱們基於centos鏡像,一層一層作了幾個鏡像
注意:
實際製做鏡像的時候,咱們應該經量把會發生變化的層放在最後,這樣前面的層就能夠走緩衝。(好比下圖:先製做httpd 和sshd , 先製做sshd和httpd的區別)
附上:
Docker 總體流程: