Docker所代表的Container技術,是對內核的Cgroups、namespace等內容的使用.

Linux Container=lxc

wKiom1jAprzwVHaOAAFyK4UeqDY660.png

借助BootZdocker可以實現在Mac和Windows上運行


CGroups限制容器的資源使用

Namespace機制,實現榮期間的隔離

chroot,文件系統的隔離


Linux內核提供的限制,記錄和隔離進程組所使用的資源,由Google的工程師提出,后來被整合到kernel.

通過不同的子系統(blkio,cpu,cpuacct等)來實現對不同資源使用的控制和記錄。


pid,容器有自己獨立的進程表和1號進程

net,容器有自己獨立的network info

ipc,在ipc通信時候,需要加入額外信息來標示進程

mnt,每個容器有自己唯一的目錄掛在

utc,每個容器有獨立的hostname和domain


wKiom1jBLNeTC5h_AAD8jL8L-fk762.png

adcanced multi layer unification filesystem

可以實現把多個不同目錄的內容合并在一起

允許read-only和read-write目錄并存


docker使用aufs來實現分層的文件系統的管理

只讀部分定義為p_w_picpath,可寫部分是container

p_w_picpath類似一個單鏈表系統,每個p_w_picpath包含一個指向parent p_w_picpath的指針

沒有parent p_w_picpath的p_w_picpath是base p_w_picpath


docker pull {p_w_picpath name}

如果不指定tag的話,會把p_w_picpath的所有的tags都會download下來

wKioL1jB4hKjMtwLAAbB4PinB6A152.png

wKiom1jB4hPgTePxAAHmO-N3V6g893.png

wKioL1jB4haD_MvFAAZY5ICtaVE941.png

wKiom1jB4hnQ0ipLAATQ8VJM2Yo471.png


使用RUN來運行一個DOcker Container

網絡設置

Volume 共享文件系統

使用Link來連接兩個容器


wKioL1jB5Aazt1IoAAD-3kBdCoo185.png

對于不存在的p_w_picpath,Docker會自動去Registry里面下載對應的p_w_picpath,然后再運行Container

wKiom1jB5ReiYBzFAACMDGnHfYg954.png

wKioL1jB5RiRNpmaAAC7hHe86jc188.png


wKiom1jB6iCjwHIWAACEO1z1xSU280.png

wKioL1jB6l7xpc3ZAADIuxCPbxU826.png


通過Logs命令可以看到Container中Command所指向進程的STDOUT,STDERR數據

通過-e參數,可以在運行container的時候添加系統環境變量