容器和虛擬化的區別:
虛擬化的實現方式一般是模擬出硬件環境,模擬出虛擬的cpu、內存、硬盤、網卡等資源,然后在這些虛擬資源之上安裝合適的操作系統來控制這些資源。虛擬機與虛擬機之間是完全隔離的,也就是說一台虛擬機上運行的進程與其他虛擬機上運行的進程是互不干擾的,所以隔離性也是虛擬化所追求的一個目標。
虛擬化的缺點:
(1)資源占用多:虛擬機會獨占一部分內存和硬盤空間。
(2)冗余步驟多:虛擬機是完整的操作系統,一些系統級別的操作步驟,往往無法跳過,比如用戶登錄。
(3)啟動慢:啟動操作系統需要多久,啟動虛擬機就需要多久。可能要等幾分鍾,應用程序才能真正運行。
容器是一種打包應用的方式,可以幫你打包應用中的所有軟件和軟件所依賴的環境,並且可以實現跨平台部署。
容器不是模擬一個完整的操作系統,而是對進程進行隔離。或者說,在正常進程的外面套了一個保護層。對於容器里面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。
傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。
由於容器是進程級別的,相比虛擬機有很多優勢。
(1)啟動快:容器里面的應用,直接就是底層系統的一個進程,而不是虛擬機內部的進程。所以,啟動容器相當於啟動本機的一個進程,而不是啟動一個操作系統,速度就快很多。
(2)資源占用少:容器只占用需要的資源,不占用那些沒有用到的資源;虛擬機由於是完整的操作系統,不可避免要占用所有資源。另外,多個容器可以共享資源,虛擬機都是獨享資源。
(3)體積小:容器只要包含用到的組件即可,而虛擬機是整個操作系統的打包,所以容器文件比虛擬機文件要小很多。
(4)簡化部署:容器技術可以將應用打包成單一地址訪問的、Registry存儲的、 僅通過一行命令就可以部署完成的組件。
(5)服務組合:采用容器的方式進行部署,整個系統會變得易於組合,通過容器技術將不同服務封裝在對應的容器中,之后結合一些腳本使這些容器按照要求相互協作,這樣操作不僅可以簡化部署難度還可以降低操作風險。
(6)易於遷移:容器技術最重要的價值就是為在不同主機上運行服務提供一個輕便的、一致的格式。容器格式的標准化加快交付體驗,允許用戶方便地對工作負載進行遷移,避免局限於單一的平台提供商。