linux容器技術和Docker
概述
- Docker在一定程度上是LXC的增強版,早期的Docker使用LXC作為容器引擎,所以也可以說Docker是LXC的二次封裝發行版,目前docker使用的容器引擎為runC,其是容器運行時標准的實現之一;Docker使用鏡像的方式啟動容器,解決了LXC所面臨的問題目前市面上所說的容器通常指Docker,其以成為事實上的工業標准
- Docker 是一個打包、分發和運行應用程序的平台。正如我們所說,它允許將你的應用程序和應用程序所依賴的整個環境打包在一起。這既可以是一些應用程序需要的庫,也可以是一個被安裝的操作系統所有可用的文件。Docker 使得傳輸這個包到一個中央倉庫成為可能,然后這個包就能被分發到任何運行Docker 的機器上,在那兒被執行(大部分情況是這樣的,但並不盡然,后面將做出解釋) 。
docker 三個主要概念
- 鏡像: 鏡像里包含了你打包的應用程序及其所依賴的環境。它包含應用程序可用的文件系統和其他元數據,如鏡像運行時的可執行文件路徑。
- 鏡像倉庫:鏡像倉庫用於存放Docker 鏡像,以及促進不同人和不同電腦之間共享這些鏡像。當你編譯你的鏡像時,要么可以在編譯它的電腦上運行,要么可以先上傳鏡像到一個鏡像倉庫,然后下載到另外一台電腦上並運行它。某些倉庫是公開的,允許所有人從中拉取鏡像,同時也有一些是私有的,僅部分人和機器可接入。
- 容器 : 容器通常是一個Linux 容器,它基於Docker 鏡像被創建。一個運行中的容器是一個運行在Docker 主機上的進程,但它和主機,以及所有運行在主機上的其他進程都是隔離的。這個進程也是資源受限的,意味着它只能訪問和使用分配給它的資源( CPU 、內存等)
和虛擬機差異
- 虛擬機的主要好處是它們提供完全隔離的環境,因為每個虛擬機運行在它自己的Linux 內核上,而容器都是調用同一個內核
- 理論上, 一個容器鏡像能運行在任何一個運行Docker 的機器上。但有一個小警告一一-一個關於運行在一台機器上的所有容器共享主機Linux 內核的警告。如果一個容器化的應用需要一個特定的內核版本,那它可能不能在每台機器上都工作。如果一台機器上運行了一個不匹配的Linux 內核版本,或者沒有相同內核模塊可用,那么此應用就不能在其上運行。