3-Docker簡介

請叫我longge發表於2020-12-07

Docker簡介

3、Docker是什麼

3.1、為什麼會有Docker的出現

?	一款產品從開發到上線,從作業系統,到執行環境,再到應用配置。作為開發+運維之間的協作我們需要關心很多東西,這也是很多網際網路公司都不得不面對的問題,特別是各種版本的迭代之後,不同版本環境的相容,對運維人員都是考驗。

在這裡插入圖片描述

? Docker之所以發展如此迅速,也是因為它對此給出了一個標準化的解決方案。    
	環境配置如此麻煩,換一臺機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題,軟體可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地複製過來。開發人員利用 Docker 可以消除協作編碼時“在我的機器上可正常工作”的問題。

在這裡插入圖片描述

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

?  傳統上認為,軟體編碼開發/測試結束後,所產出的成果即是程式或是能夠編譯執行的二進位制位元組碼等(java為例)。而為了讓這些程式可以順利執行,開發團隊也得準備完整的部署檔案,讓維運團隊得以部署應用程式,開發需要清楚的告訴運維部署團隊,用的全部配置檔案+所有軟體環境。不過,即便如此,仍然常常發生部署失敗的狀況。Docker映象的設計,使得Docker得以打破過去「程式即應用」的觀念。透過映象(images)將作業系統核心除外,運作應用程式所需要的系統環境,由下而上打包,達到應用程式跨平臺間的無縫接軌運作。

3.2、Docker的理念

?	Docker是基於Go語言實現的雲開源專案。解決了執行環境和配置問題軟體容器,方便做持續整合並用助於整體釋出的容器的虛擬化技術。Docker的主要目標是“Build,Ship and Run Any App,Anywhere”,	也就是通過對應用元件的封裝、分發、部署、執行等生命週期的管理,使使用者的APP(可以是一個WEB應用或資料庫應用等等)及其執行環境能夠做到"一次封裝,到處執行"

在這裡插入圖片描述

?  Linux 容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。將應用執行在 Docker 容器上面,而 Docker 容器在任何作業系統上都是一致的,這就實現了跨平臺、跨伺服器。只需要一次配置好環境,換到別的機子上就可以一鍵部署好,大大簡化了操作。

?  例如,一個應用需要redis, mongoDB, MySQL三個環境,開發人員肯定是已經配置好了這個環境,那麼運維人員不需要再進行安裝。只需要將這三個環境分別裝進三個集裝箱構建出景像檔案,這個映象檔案中就有三個集裝箱,每個集裝箱都是本地正確執行軟體的一份克隆。運維人員只需要安裝Docker環境就可以,把四個集裝箱放在Docker上執行就可以。就好像docker圖示一樣,金魚背上的集裝箱。運維人員只需要將映象檔案(三個集裝箱),放在docker上執行就可以了。

3.3、一句話概括Docker

?  程式設計師不再是隻把程式碼交給運維人員,運維也不需要要再10臺機器上安裝10次mysql, redis, hadoop當環境。現在變了,我們幫助運維人員,把本地的執行環境自下而上打包的映象交給運維人員,映象檔案包含了各種執行所需的軟體,每個軟體都是一個獨立的集裝箱,然後放在Docker上(金魚背上)執行即可。而運維人員,只需要安裝一個Docker。    

?  一句話概括:Docker解決了執行環境和配置問題軟體容器,方便做持續整合並有助於整體釋出的容器虛擬化技術。

##4、Docker能做什麼

4.1、之前的虛擬機器技術

?  虛擬機器(virtual machine)就是帶環境安裝的一種解決方案,
	它可以在一種作業系統裡面執行另一種作業系統,比如在windows系統裡面執行linux系統。應用程式對此毫無所知,因為虛擬機器上看上去跟真事的系統上看上去一模一樣。而對於底層的系統來說,虛擬機器就是一個普通檔案,不需要了就刪除,對其他部分毫無影響,這類虛擬機器完美的執行了另一套系統,能夠是應用程式、作業系統和硬體三者之間的邏輯不變。

img

?  虛擬機器的缺點:
?資源佔用多
	虛擬機器會獨佔一部分記憶體和硬碟空間。它執行的時候,其他程式就不能使用這些資源了。哪怕虛擬機器裡面的應用程式,真正使用的記憶體只有 1MB,虛擬機器依然需要幾百 MB 的記憶體才能執行。
    
?冗餘步驟多
	虛擬機器是完整的作業系統,一些系統級別的操作步驟,往往無法跳過,比如使用者登入。
    
?啟動慢
	啟動作業系統需要多久,啟動虛擬機器就需要多久。可能要等幾分鐘,應用程式才能真正執行。

4.2、容器虛擬化技術

?  由於前面虛擬機器存在的這些缺點,linux發展了另一種虛擬化技術:linux容器(linux containers,縮寫LXC)
    linux容器不是模擬一個完整的作業系統,而是對程式進行隔離。有了容器,就可以講軟體執行所需要的所有資源打包到一個隔離的容器中,容器與虛擬機器不同,不需要捆綁一整套作業系統,只需要軟體工作所需的庫資源和設定,系統一次而變得高效輕量並保證部署在任何環境中的軟體能始終如一地執行。

img

?  比較了 Docker 和傳統虛擬化方式的不同之處:
?傳統虛擬機器技術是虛擬出一套硬體後,在其上執行一個完整作業系統,在該系統上再執行所需應用程式;

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

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

4.3、開發/運維(Devops)

?  一次構建、隨處執行。
?更快速的應用交付和部署
	傳統的應用開發完成後,需要提供一堆安裝程式和配置說明文件,安裝部署後需根據配置文件進行繁雜的配置才能正常執行。Docker化之後只需要交付少量容器映象檔案,在正式生產環境載入映象並執行即可,應用安裝配置在映象裡已經內建好,大大節省部署配置和測試驗證時間。

?更便捷的升級和擴縮容
	隨著微服務架構和Docker的發展,大量的應用會通過微服務方式架構,應用的開發構建將變成搭樂高積木一樣,每個Docker容器將變成一塊“積木”,應用的升級將變得非常容易。當現有的容器不足以支撐業務處理時,可通過映象執行新的容器進行快速擴容,使應用系統的擴容從原先的天級變成分鐘級甚至秒級。

?更簡單的系統運維
	應用容器化執行後,生產環境執行的應用可與開發、測試環境的應用高度一致,容器會將應用程式相關的環境和狀態完全封裝起來,不會因為底層基礎架構和作業系統的不一致性給應用帶來影響,產生新的BUG。當出現程式異常時,也可以通過測試環境的相同容器進行快速定位和修復。

?更高效的計算資源利用
	Docker是核心級虛擬化,其不像傳統的虛擬化技術一樣需要額外的Hypervisor支援,所以在一臺物理機上可以執行很多個容器例項,可大大提升物理伺服器的CPU和記憶體的利用率。

4.4、企業中應用場景

?新浪

img

img

####?美團

img

img

?蘑菇街

img

5、Docker去哪裡下載

5.1、官網

Docker官網:http://www.Docker.com

5.2、倉庫

Docker倉庫:http://hub.Docker.com