容器: 磁盤占用空間更少
虛擬機: 應用 依賴的庫 完整的操作系統 ?docker : 應用. ? 依賴的庫
虛擬機: 模擬硬件行為 耗內存 cpu ?
docker 不需要
由于容器不容易安裝和管理 ?docker可以 把開發的應用程序自動部署到容器里的開元引擎
Docker作用
1.開發 ?測試 部署服務
2.隔離的運行環境
3.搭建測試環境
docker 基本組成
docker client 客戶端 ? ?:c/s ?本地/遠程
docker daemon ? ? ? ? ? ? :守護進程
docker image 鏡像 ? ?:容器的基石 ?容器的源代碼 啟動容器的各種條件 ?層疊只讀文件
docker container 容器 :通過鏡像啟動 ?寫時復制 copy on write ? run命令啟動容器
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?:創建新容器時 docker會構建出一個鏡像棧 ?棧的最頂層添加可寫層
docker registry 倉庫 : 用倉庫保存用戶構建的鏡像 ?通過倉庫查找鏡像 pull 下載鏡像 ?公有 docker hub ?私有
通過客戶端訪問守護進程 操作容器 容器存儲在鏡像里 而鏡像保存在倉庫里
docker 依賴 linux 內核特性
namespaces 命名空間
封裝 :代碼的隔離
操作系統 :系統資源的隔離 (進程 文件系統 ?網絡 .....)
PID (process ID) :進程的隔離
NET (Network) :管理網絡接口
IPC (InterProcess Communication):管理跨進程通信的訪問
MNT(Mount) :掛載點 文件系統相關隔離
UTS(Unix Timesharing System) :隔離內核和版本標識
Control groups是linux 提供的 限制 記錄 隔離 進程組 所使用的機制 Control groups 就是為了實現容器而生
Control groups 提供功能
資源限制 :給進程組設定內存使用上限
優先級設定 :哪些優先使用
資源計量 :計算進程組使用了多少資源 計費系統中很重要
資源控制 ? :可以將進程組掛起和恢復
docker 容器的能力
文件系統的隔離 :每個容器都有自己的root 文件系統
進程的隔離 :每個容器都運行在自己的進程環境中
網絡隔離 :容器間的虛擬網絡接口和IP 地址都是分開的
資源隔離和分組 :使用cgroup 將CPU 和內存之類的資源獨立分配給每個docker 容器