面試系統化學習和準備(二)——docker篇
一、docker概念
本節要點
- 什麼是容器與映象?如何構建容器與映象
- 容器的生命週期
- 容器專案的架構
- 容器 VS.VM
1.容器
定義:一個檢視隔離、資源可限制、獨立檔案系統的程序集合
(1)檢視隔離 指的是容器之間的系統資源是是隔離的,一個容器中你只能看見一部分程序,每個容器有獨立的主機名。
(2)資源可限制 指的是可以給每個容器限制資源,比如2個CPU 2G記憶體
(3)獨立檔案系統 指的是每個容器有自己的根目錄,在自己的檔案系統中做增刪改查操作,不會影響到其他容器中的檔案。
2.映象
定義:容器執行所需要的所有檔案集合稱為容器映象
3.如何構建和執行映象
(1)DockerFile定義:相當於一個指令文件,docker可以讀取dockerFile來構建容器。它有自己特定的便利語法糖。
(2)changeset:DockerFile可以描述構建容器的每個步驟,每個步驟對已有檔案系統的操作所帶來的變化,稱為changeset。
當把changeset依次作用到一個空資料夾就能得到一個完整的映象。
它的好處是可以提高分發效率和節省空間,一個大的映象可以拆成多個小塊,進行並行下載。節省空間這個還沒看懂。
有了Dockerfile,就可以docker build構建出映象了。然後push到映象倉庫,pull下載映象,docker images檢視本地映象。docker run可以執行映象。
(這裡最好從構建到執行完整操作一次)
容器就是和系統其它部分隔離開來的程序集合,這裡的其他部分包括程序、網路資源以及檔案系統等。而映象就是容器所需要的所有檔案集合,其具備一次構建、到處執行的特點。
二、容器的生命週期
1.生命週期:容器是一組具有隔離特性的程序集合,再執行時會選擇一個映象來提供獨立的檔案系統並指定相應的執行程式,稱之為initial程序。initail程序啟動,則容器隨之啟動,initial程序退出,則容器隨之退出。容器的生命週期與initial程序完全相同。
2.容器資料持久化:通過資料卷的方式,掛載到容器內,容器將資料寫入這個特殊的目錄。資料卷不會因為容器的退出而導致資料丟失。
提問,資料卷如何管理?bind的方式或者執行引擎的方式是怎麼管理?這裡最好也實踐一下
三、容器專案架構(這次只是簡單介紹,後面再詳細學)
1.moby:是最流行的容器管理引擎,moby daemon會對上管理容器、映象、網路以及Volume的管理。它依賴於containerd。
2.containerd:一個容器執行時管理引擎,可以對上提供容器、映象的相關管理。
3.containerd shim:是containerd shim底層的模組,類似於一個守護程序。
四、容器和VM優劣對比
1.啟動速度:docker快,因為只是程序級別的隔離,沒有作業系統。虛擬機器有作業系統。
2.所佔用的計算資源和空間:docker少,虛擬機器因為需要將計算資源交給虛擬化,所以浪費了很多計算自由。空間方面也是很浪費,一個Guest OS安裝ubuntu需要5-6G的空間。
3.隔離效果:VM強,每個應用都是完全獨立。但是docker也在向著強隔離方向發展。
容器可以解決物理機裡面,多個程序修改同一個檔案的衝突情況,比如別人還需要用的檔案被更高階的程序刪掉了,還有多個程序之間會有依賴衝突。
總結:
- 容器是一個程序集合,具有自己獨特的檢視視角;
- 映象是容器所需要的所有檔案集合,其具備一次構建、到處執行的特點;
- 容器的生命週期和 initial 程序的生命週期是一樣的;
- 容器和 VM 相比,各有優劣,容器技術在向著強隔離方向發展。
五、自己構建和執行docker