為什么我們需要docker?
Docker最主要解決了環境部署問題,其次是解決應用之間相互影響的問題。
關于這個問題,首先我們需要從Docker定義來說起。
Docker定義維基百科是這么定義Docker:
Docker 是一個開放源代碼軟件,是一個開放平臺,用于開發應用、交付應用、運行應用。 Docker允許用戶將基礎設施中的應用單獨分割出來,形成更小的顆粒,從而提高交付軟件的速度。 Docker容器 與虛擬機類似,但原理上,容器是將操作系統層虛擬化,虛擬機則是虛擬化硬件,因此容器更具有便攜性、高效地利用服務器。
通俗的說,就好比我打包了個QQ軟件,然后傳給了你,你只要在你電腦裝了Docker,在它上面運行起來就可以使用。
Docker出現解決了什么問題?A.解決環境部署問題
在Docker未出現之前,我們一般在一臺Linux服務器上要部署環境,需要安裝各種系統依賴包,配置各種開源的中間件,最后才能部署好一個業務系統。
這樣的工作,換了一臺新的服務器,你又得重新來一遍,是不是很痛苦。
開發人員需要部署開發環境,以便各個開發人員共同使用。測試人員需要部署測試環境測試,才能開始驗證測試。運維人員部署生產環境同樣也得重新部署一次。而Docker的出現,解決了環境部署問題。同一個Docker的配置可以在不同的環境中使用,這樣就降低了硬件要求和應用環境之間耦合度。
B.持續集成+持續部署+持續交付流水線管理
持續集成,持續部署,持續交付對于微服務開發來說,是提高團隊整體效率不可或缺的一環。
隨著持續集成工具(比如Jenkins)的快速發展,也增加了對Docker的支持,代碼從開發者的機器到最終在生產環境上的部署,大大提高了生產效率。
有興趣的可以了解下:SpringBoot + maven + Jenkins + docker 。
C.解決應用之間相互影響的問題
當我們只有一臺Linux服務器,但是需要安裝兩套應用服務,而這兩套服務系統依賴的版本不一致,那么用Docker創建兩個不同的容器就可以輕松解決這個問題。
Docker VS 虛擬機我們首先來看下虛擬機的架構,如下圖所示:
再來看下Docker的架構,如下圖所示:
從這里可以看到主要少了Hypervisor、Guest OS兩層。
由于Docker不需要Hypervisor實現硬件資源虛擬化,運行在Docker容器上的程序直接使用的都是實際物理機的硬件資源,所以效率更高。Docker由于直接利用宿主機的操作系統,則省略了Guest OS這個過程,因此新建一個docker容器只需要幾秒鐘。下面在看這個形象的比喻,可能會更直觀。
虛擬機是這樣的:Docker是這樣的:總而言之:容器性價比高,做的事少并且使用起來相當廉價,而虛擬機提供整個虛擬化硬件層,可以做更多的事情但是使用成本顯著。
我自己使用的Docker持續集成部署這里我就不展示了,這里展示我本機電腦安裝的Docker服務。
比如:
下載一個精簡版的CentOS7,然后自己DIY加服務。下載個Kali Linux 學習下安全知識。再看看我在服務器搭建的Oracle服務:
如果你有過搭建環境的基礎,你也可以自己搭建一個Oracle服務鏡像,測試人員和開發人員用這個oracle基本能滿足需求。
結束語總之,Docker的出現是有它的必然性,輕便,簡單,能快速提高效率,為何不嘗試一下呢?
當你會用Docker之后,你可以自己制作鏡像,供其他人使用。
備注:部分圖片來自網上截圖,如有侵權,請聯系本人刪除。