有過后臺開發(fā)經驗的同學,一定遇到過下面這些問題:程序在開發(fā)環(huán)境跑得好好的,但是部署到生產環(huán)境,卻狀況頻出;擔心客戶的環(huán)境上缺少某些必要的庫文件,或者某些文件的版本不符合要求。

有過后臺開發(fā)經驗的同學,一定遇到過下面這些問題:程序在開發(fā)環(huán)境跑得好好的,但是部署到生產環(huán)境,卻狀況頻出;擔心客戶的環(huán)境上缺少某些必要的庫文件,或者某些文件的版本不符合要求。
什么是Docker
Docker是一個虛擬環(huán)境容器,可以將你的可執(zhí)行文件、配置文件及一切其他你需要的文件一并打包到這個容器中,并發(fā)布和應用到任意平臺。比如,你在本地用Python開發(fā)了一個網站后臺,開發(fā)測試完成后,就可以將Python3及其依賴包、Flask及其各種插件、Mysql、Nginx等打包到一個容器中,然后部署到任意你想部署到的環(huán)境。
如果不好理解,我們再拿集裝箱打個比方。
集裝箱解決了什么問題呢?在一艘大船上,可以把貨物規(guī)整的擺放起來。并且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那么我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱里封裝的好好的,那我就可以用一艘大船把他們都運走。
docker也是類似的理念。我們可以在一臺機器上跑多個互相毫無關聯的docker容器,每一個容器就相當于一個集裝箱。
Docker里的幾個基本概念
鏡像:鏡像可以理解為一堆靜態(tài)的文件
容器:容器則是鏡像run起來之后的一個實例。鏡像之于容器就好比面向對象編程里的class之于object。
倉庫:鏡像需要地方保存,這個地方就是倉庫
與傳統虛擬化的區(qū)別
這里我們順便講一下傳統虛擬化。
我們看到,傳統虛擬化是站在硬件物理資源的基礎上,虛擬出多個OS,然后在OS的基礎上構建相對獨立的程序運行環(huán)境,而Dokcer則是在OS的基礎上進行虛擬,顯然Dokcer輕量得多,因此其資源占用、性能消耗相比傳統虛擬化都有很大優(yōu)勢。
在IT行業(yè)從業(yè)多年,也算從看著時代從物理
服務器走向虛擬化
云計算時代,又準備進入Docker時代,作為下一代虛擬化技術,Docker正改變著整個行業(yè)開發(fā)、測試、部署應用的方式,至于虛擬化技術和docker技術到底有什么不同,下面來分析一下。
01 什么是虛擬化?
顧名思義,虛擬化技術是將物理資源以某種技術虛擬成資源池的形式,主要有一虛多和多虛一兩種形式,比如個人電腦安裝Vmware軟件,可以在這個軟件上安裝其他Win系統、MacOS、Linux系統等,實現一臺電腦/筆記本承載多個系統的優(yōu)點,目前蘋果筆記本用戶雙系統解決方案也以
虛擬機為主,普通Windows用戶可能需求量不大,而技術人員基本是必備軟件了。
從企業(yè)層面來看,多虛一為主要形式,也就是將大量物理服務器集群虛擬化,形成一個資源池,在這個資源上創(chuàng)建各種不同的虛擬機,實現靈活部署。
02 什么是Docker
其實docker和虛擬技術很像,但又有一些不同點,一方面是兩個技術的層級上,虛擬機一般是底層硬件Hardware支撐,上層是虛擬管理系統Hypervisor層,在上層開啟不同的VM業(yè)務,如果需要將這些業(yè)務進行隔離,需要每個VM啟動客戶機操作系統,非常消耗資源。
Docker完全不同,底層有硬件和Host OS系統支撐,比如Windows/MacOS/Linux,中間拋去了臃腫的系統,而是以Docker守護進程代替,上層建立不同的容器,不同的應用鏡像打包在不同的容器中,他們互相隔離。
03 虛擬化與docker的區(qū)別
docker設計小巧,部署遷移快速,運行高效,應用之間相互獨立,管理人員可以看到所有容器的內容,虛擬化技術比較臃腫,不論什么應用都需要先創(chuàng)建新的系統,并且并非按照應用隔離,而是按照系統隔離,管理員無法看到系統內部信息。
舉個例子,Docker就是手機中的各種APP,只需要一個系統就可以下載自己所需的應用,但是虛擬化技術相當于你的蘋果手機安裝一個龐大軟件,這個軟件上安裝安卓系統、魅族系統等,每個系統上還要安裝各類應用,比較麻煩。
但兩者沒有絕對的好壞,主要還是看應用場景,根據不同的需求選擇不同的解決方案即可。