docker容器技術概念篇

談到容器,咱們就必須得談談虛擬化,咱們通常使用的虛擬機都是主機級別的虛擬化,主機級的虛擬化通常是在硬件上安裝操做系統,操做系統上安裝一個Hypervisor,而後hypervisor上在安裝虛擬操做系統,又或者直接在硬件上安裝Hypervisor。而容器技術與虛擬化技術的區別就在於宿主機上跑的是一個個的容器。所以在架構上少了一個hypervisor和許多的客戶機,在性能上提高了許多。可是在資源隔離性方面沒有主機級別的虛擬化好。以下圖所示:linux



Virtualization and Container
docker容器技術概念篇nginx


每一個容器在自身看來都是獨立運行在操做系統之上的,不然何談隔離性,so,每一個容器都須要隔離如下資源才能最小化運行:
1.UTS:主機名
2.Mount,掛載點、根文件系統
3.IPC,信號量、消息隊列和共享內存
4.PID:每一個docker容器內都有本身獨立的進程號
5.Net,每一個docker都有本身的網絡設備、網絡棧、端口等。
6.User,用戶和用戶組(內核 3.8支持)docker

以上名稱空間在kernel 3.8後原生支持,固然還有其餘一些可選的隔離資源,如:CPU、內存等經過Control Groups(cgroups)實現。而linux 容器(LXC)就是chroot+namespaces+cgroups等技術實現的,docker就是實現以上技術的工具。windows


docker經過事先製做好的鏡像(如:nginx鏡像),直接從倉庫中拉去鏡像並啓動,因而一個nginx的docker就建立併成功啓動了。那麼,docker是如何能使nginx獨立運行的呢?你們知道,docker一次打包,處處運行。他又如何屏蔽linux和windows底層的差異呢?docker的鏡像底層是經過分層構建,聯合掛載來實現的。就拿構建一個nginx鏡像來講,首先它會在底層構建一個最小的centos鏡像,而後上一層構建一個ngxin鏡像,而且每一個鏡像都是隻讀的。centos

相關文章
相關標籤/搜索