1.Docker簡介

Docker是個什麼東西

假定您在開發一個項目,您使用的是一台筆記本電腦而且您的開發環境具有特定的配置。其他開發人員身處的環境配置也各有不同。您正在開發的應用依賴於您當前的配置且還要依賴於某些配置文件。此外,您的企業還擁有標準化的測試和生產環境,且具有自身的配置和一系列支持文件。您希望儘可能多在本地模擬這些環境而不產生重新創建服務器環境的開銷。請問?

您要如何確保應用能夠在這些環境中運行和通過質量檢測?並且在部署過程中不出現令人頭疼的版本、配置問題,也無需重新編寫代碼和進行故障修復?

答案就是使用容器。Docker之所以發展如此迅速,也是因為它對此給出了一個標準化的解決方案—–系統平滑移植,容器虛擬化技術

環境配置相當麻煩,換一台機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題,軟件可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地複製過來。開發人員利用 Docker 可以消除協作編碼時「在我的機器上可正常工作」的問題。

 

之前在服務器配置一個應用的運行環境,要安裝各種軟件,就拿在公司的項目的環境來說,Java/RabbitMQ/MySQL/JDBC驅動包等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平台。假如我們是在 Windows 上安裝的這些環境,到了 Linux 又得重新裝。況且就算不跨操作系統,換另一台同樣操作系統的服務器,要移植應用也是非常麻煩的。

 

傳統上認為,軟件編碼開發/測試結束後,所產出的成果即是程序或是能夠編譯執行的二進制位元組碼等(java為例)。而為了讓這些程序可以順利執行,開發團隊也得準備完整的部署文件,讓維運團隊得以部署應用程式,開發需要清楚的告訴運維部署團隊,用的全部配置文件+所有軟件環境。不過,即便如此,仍然常常發生部署失敗的狀況。Docker的出現使得Docker得以打破過去「程序即應用」的觀念。透過鏡像(images)將作業系統核心除外,運作應用程式所需要的系統環境,由下而上打包,達到應用程式跨平台間的無縫接軌運作。一句話概括:解決了運行壞境和配置問題的軟件容器,方便做持續集成並有助於整體發佈的容器虛擬化技術

哪裡下載:docker官網://docker.com/  docker hub官網://hub.docker.com/

容器與虛擬機比較

容器發展簡史

傳統虛擬技術

虛擬機(virtual machine)就是帶環境安裝的一種解決方案。

它可以在一種操作系統裏面運行另一種操作系統,比如在Windows10系統裏面運行Linux系統CentOS7。應用程序對此毫無感知,因為虛擬機看上去跟真實系統一模一樣,而對於底層系統來說,虛擬機就是一個普通文件,不需要了就刪掉,對其他部分毫無影響。這類虛擬機完美的運行了另一套系統,能夠使應用程序,操作系統和硬件三者之間的邏輯不變。  

 

Win10
VMWare
Centos7
各種cpu、內存網絡額配置+各種軟件
虛擬機實例

 

 graphic

 

graphic

 

虛擬機的缺點:

 

1    資源佔用多               2    冗餘步驟多                 3    啟動慢

容器虛擬化技術

由於前面虛擬機存在某些缺點,Linux發展出了另一種虛擬化技術:

Linux容器(Linux Containers,縮寫為 LXC)

Linux容器是與系統其他部分隔離開的一系列進程,從另一個鏡像運行,並由該鏡像提供支持進程所需的全部文件。容器提供的鏡像包含了應用的所有依賴項,因而在從開發到測試再到生產的整個過程中,它都具有可移植性和一致性。

Linux 容器不是模擬一個完整的操作系統而是對進程進行隔離。有了容器,就可以將軟件運行所需的所有資源打包到一個隔離的容器中。容器與虛擬機不同,不需要捆綁一整套操作系統,只需要軟件工作所需的庫資源和設置。系統因此而變得高效輕量並保證部署在任何環境中的軟件都能始終如一地運行。

 graphic

graphic

 對比

 graphic

比較了 Docker 和傳統虛擬化方式的不同之處:

*傳統虛擬機技術是虛擬出一套硬件後,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;

*容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。

* 每個容器之間互相隔離,每個容器有自己的文件系統 ,容器之間進程不會相互影響,能區分計算資源。

 

Tags: