Docker是什么
Docker主要是用在以應用為中心的PaaS平臺,或者說,是以微服務為架構的平臺。
什么是微服務架構呢?
簡單來說,就是把一個有著各種功能的應用,根據不同的功能,拆分成多個不同的獨立應用,來達到降低耦合的目的。例如,把認證功能,用戶界面,后臺數據等三大功能獨立分成三個單獨的應用,彼此之間通過各自的API進行遠程調用。而在以前,則是把這三大功能都集成在同一個大應用里面。
傳統VM和Docker容器的區別
如上圖所示,傳統VM,需要在宿主機OS的基礎上,運行Hypervisor來模擬一套硬件,再通過運行各自的GuestOS,來達到隔離和資源調度的目的。而Docker僅僅需要運行一個輕量級的Docker Engine即可。經過測試,傳統VM比起Docker有著5%-20%的性能差距。但比Docker容器有著更好的隔離性、資源限制和安全性。
上圖為傳統VM和Docker容器的對比
繼續來看Docker容器和LXC容器的對比,一般來說,Docker容器比LXC容器多了AUFS文件系統。
如上面兩個圖所示,因為Docker容器默認使用的就是AUFS文件系統,這個系統可以通過在最底下的那一層構建基礎鏡像,然后在這個基礎層的上面安裝各種庫,最后再在上面安裝各種應用的方式,來構建各種不同的鏡像。鏡像的每一層都是只讀的。每次運行一個實例,就在這個只讀鏡像的基礎上,創建一個可讀寫的層,來存放實例的數據。
不同實例之間,可以共享同一個鏡像,他們之間的區別僅僅是最上面的那一層可讀寫層。同時,Docker還可以把實例的可讀寫層連同只讀鏡像一起,創建一個新的鏡像。這個鏡像只有最頂上的一層是新的數據,其它層仍然與舊鏡像共用,達到節省存儲空間的目的。這功能類似于git的版本管理。
Docker還支持使用Dockerfile,一個類似自動化腳本的文件,來自動構建Docker鏡像。官方提供一個Docker Hub(遠程倉庫),支持用戶上傳自己的鏡像到這個倉庫上,與全世界的人一起分享。
Docker容器,一般是單機部署。但也有很多工具可以用來部署集群,用來供云使用。例如Docker官方的Swarm,google的Kubernetes,第三方的CoreOS,Apache的Mesos+Marathon。這些工具都大大方便了Docker集群的部署。
上圖為Docker 的集群管理工具
Docker實踐中的問題以及解決辦法
1. 首先是Docker 運行在物理機上還是虛擬機上?
一般來說,如果需要高性能,例如HPC,則使用容器虛擬化,并運行在物理機上。如果是需要部署一系列的服務,則選擇CaaS,并運行在虛擬機上。
2. 是直接使用Docker,還是使用支持Docker的云平臺?
支持Docker的云平臺,可以在創建時對實例進行調度,也可以在運行時進行調度,更大限度且合理地利用系統資源。同時不但支持Docker容器,還支持CaaS服務。而且還能進行自動的容災遷移和彈性伸縮。
3. Docker鏡像該如何管理?
因為Docker官方提供的鏡像倉庫是在國外,國內沒有節點,導致國內訪問的速度比較慢。同時因為國外的網站容易被墻,導致無法訪問。所以一般來說,特別是對穩定性有很高要求的企業用戶來說,還是建議使用私有的鏡像倉庫。品高云內置私有的Docker鏡像倉庫,解決企業內部使用Docker 鏡像的問題。同時,品高云還支持鏡像統一管理,實例備份還原,實例存為鏡像等鏡像功能。
4. Docker網絡該如何管理?
Docker基于namespace隔離,默認只支持Bridge,Host,None這三種模式。這對于企業應用來說,是完全不夠的。品高云讓Docker支持云平臺VPC網絡架構,網絡靈活多樣,更符合企業的習慣。同時還可以支持QOS限速和多租戶隔離。而且,品高云還可以支持SDN。當容器數量達到萬級別的時候,只有SDN才能很好地支持如此多的容器,網絡才不會是瓶頸。
5. Docker網絡安全性如何?
Docker并未提供任何網絡安全性解決方案。
品高云提供的Docker實例具備以下網絡安全性:
o可應用安全組功能;
o可應用子網ACL規則;
o多租戶VLAN隔離。
6. Docker對存儲的支持如何?
Docker對存儲的支持比較有限,僅支持創建時節點文件系統目錄映射。這對企業來說,是遠遠不夠的。品高云則提供存儲卷功能,品高云啟動的Docker實例,可以動態添加/卸載存儲卷,同時也實時備份存儲卷。
Docker的使用場景有哪些?
一般是以下三個:
高性能要求 ,例如HPC;
GPU 、機器學習 、人工智能;
應用管理、部署、測試、持續集成。