docker在web開發中得使用流程是怎樣的?

做者:var dump
連接:https://www.zhihu.com/question/51134842/answer/124450760
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

在解答題主的問題以前,咱們先搞清楚下面三點:
1、爲何使用Docker
2、使用Docker的正確姿式
3、Docker帶來了哪些好處web

1、爲何使用Docker
Docker一詞意爲碼頭工人,而Docker的功能也與集裝箱相似。一般一個webapp並不會用到操做系統/虛擬機的所有功能,即操做系統/虛擬機對於一個webapp來講太過笨重。打個比方說,我要從宿舍去食堂,我並不須要一架飛機,只須要一輛自行車就夠了,而Docker鏡像就至關因而一輛自行車。你能夠把Docker鏡像理解爲輕量化的虛擬機,固然兩者有所不一樣,可是不在本文的討論範圍。sql

2、使用Docker的正確姿式
設想一個以下場景:
咱們須要一個webapp,其功能是用戶註冊並將註冊信息插入到數據庫,環境爲Ubuntu+Tomcat+Mysql,怎麼作?
不使用Docker的話,咱們一般會這樣作,以Ubuntu爲操做系統,而後安裝Tomcat和MySQL,最後把app部署上就能夠了。那麼使用Docker會怎麼作呢,在這個場景下,能夠有兩種方式:
1.仍然以Ubuntu爲操做系統,而後構建一個安裝有MySQL和Tomcat的Docker鏡像,並把app部署到其中,最後啓動Docker鏡像就能夠了。看起來好像和不使用Docker基本相同,甚至還要麻煩一些,是這樣嗎?彆着急,繼續往下看。
2.第二種方式則體現了Docker的"每一個容器只作一件事情"的思想,咱們構建兩個鏡像,一個僅安裝Tomcat並部署咱們的app,另外一個僅安裝MySQL,而後啓動這兩個鏡像,獲得兩個容器,再利用Docker的容器互聯技術將兩者鏈接(Docker的容器是經過http鏈接的)。數據庫

3、Docker帶來了哪些好處
看完上面的例子,你可能仍然不會以爲Docker有什麼好處,其實真正使用了Docker以後,你會以爲簡直愛不釋手。粗略來講,Docker好處有:
1.保證了線上線下環境的一致性
咱們在線下的開發環境使用Docker構建好weaapp的鏡像後,能夠直接在線上使用一個鏡像,保證了線上線下環境的一致性,不再會有在線下開發環境中運行正常,而部署到線上各類錯誤了。
2.極大的簡化了webapp的部署流程
在不使用Docker時,咱們部署app時,要先搭建好app運行所需環境,這個過程作過的人都知道多麼枯燥繁瑣,一不當心還出錯。而有了Docker,咱們只須要直接構建一個咱們webapp的鏡像而後將其運行便可,不管在多少臺服務器中部署,都是如此。再好比,使用Docker以前要搭建一個WordPress對於新手來講是有些困難的,而有了Docker,只須要從DockerHub上pull一個WordPress鏡像並啓動就能夠了,很是很是方便。
3.實現了沙盒機制,提升了安全性
因爲webapp運行在容器中,與操做系統隔離開了,從而使操做系統基本不可能受到破壞,另外若是webapp由於攻擊而癱瘓,並不須要重啓服務器,直接重啓容器或者再啓動一個鏡像就能夠了。
4.實現了模塊化,提升了複用性
在二中使用Docker的第二種方式就能夠看出,咱們將數據庫和Tomcat運行在不一樣的容器中,從某種角度來講,這也下降了模塊之間的耦合性,便於拓展。好比咱們要把MySQL替換爲oracle,只須要再構建一個oracle鏡像並啓動與Tomcat鏈接便可,很是方便。對於咱們構建的鏡像,在其餘app中直接拿來用就能夠了,沒必要重複勞動。
5.實現了虛擬化,提升硬件利用率
有了Docker,咱們能夠在一臺服務器上運行不少webapp,充分利用閒置資源。這時候,服務器的操做系統就相似於貨輪,而一個個Docker容器就至關於貨輪上的一個個集裝箱。如今大熱的雲服務市場,很多就用了Docker。舉個例子來講,如今咱們有一臺操做系統爲Ubuntu14.04的服務器,咱們構建不一樣版本的ubuntu鏡像並啓動,而且爲不一樣的用戶分配不一樣的容器。這樣,用一臺服務器
能夠虛擬出n個運行着不一樣操做系統的虛擬服務器,而對於用戶來講,這些是透明的––用戶則認爲本身擁有一臺完整的服務器。據我推測,阿里雲的服務器就是這麼幹的。這充分利用了閒置的硬件資源。ubuntu

我這裏掛一漏萬,Docker的好處遠遠不止這些。譬如使用Docker鏡像實現磁盤快照功能,在不一樣場景下有Docker不一樣的使用姿式,至於更多奇技淫巧,則須要在使用過程在去發掘。安全

囉嗦了這麼一大堆,接下來回答題主的問題。實際上不少問題前文都已經解答了。服務器

Docker的容器是以鏡像來建立的,鏡像是否是一個相似操做系統的環境?
是的,你能夠將Docker理解爲一個輕量化的虛擬機,至於咱們常常說的什麼Tomcat鏡像、MySQL鏡像之類的,只是這個輕量化的虛擬機中安裝了相應的軟件。鏡像的名字也就說明了鏡像的功能。oracle

是否是到正式環境上還要安裝Docker,而後把應用部署在其中?
是的,構建Docker鏡像、運行Docker容器,都須要安裝Docker,但這是一勞永逸的,由於咱們使用的是安裝了各類各樣功能軟件的Docker鏡像和Docker容器。app

若是是這樣,那和我建立一個和生產環境同樣的虛擬機來部署應用有什麼區別?
首先這個問題能夠用自行車和飛機的例子解答。其次安裝Docker後,咱們能夠從DockerHub上獲取各類各樣的操做系統鏡像,這個操做很簡單,只須要pull相應的鏡像到本地而後運行便可,而安裝不一樣版本的虛擬機有多麻煩?另外DockerHub上有各類各樣的優秀鏡像,咱們直接拿來使用就能夠了,不須要本身搭建,應用的部署就像搭積木同樣簡單。webapp

相關文章
相關標籤/搜索