1. 程式人生 > 其它 >1.Docker簡介

1.Docker簡介

Docker是個什麼東西

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

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

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

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

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

傳統上認為,軟體編碼開發/測試結束後,所產出的成果即是程式或是能夠編譯執行的二進位制位元組碼等(java為例)。而為了讓這些程式可以順利執行,開發團隊也得準備完整的部署檔案,讓維運團隊得以部署應用程式,

開發需要清楚的告訴運維部署團隊,用的全部配置檔案+所有軟體環境。不過,即便如此,仍然常常發生部署失敗的狀況。Docker的出現使得Docker得以打破過去「程式即應用」的觀念。透過映象(images)將作業系統核心除外,運作應用程式所需要的系統環境,由下而上打包,達到應用程式跨平臺間的無縫接軌運作。一句話概括:解決了執行壞境和配置問題的軟體容器,方便做持續整合並有助於整體釋出的容器虛擬化技術

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

容器與虛擬機器比較

容器發展簡史

傳統虛擬技術

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

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

Win10 VMWare Centos7 各種cpu、記憶體網路額配置+各種軟體 虛擬機器例項

 

虛擬機器的缺點:

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

容器虛擬化技術

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

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

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

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

 

 對比

 

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

*傳統虛擬機器技術是虛擬出一套硬體後,在其上執行一個完整作業系統,在該系統上再執行所需應用程序;

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

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