1. 程式人生 > >docker 應用場景

docker 應用場景

Docker

最近docker特別火,看到很多專案組都在用,但是不是很瞭解docker具體的應用場景是什麼,偶然在知乎上看到一個感覺很通俗易懂~~~~故記錄一下~

原文:知乎連結

一、為什麼使用Docker
Docker一詞意為碼頭工人,而Docker的功能也與集裝箱類似。通常一個webapp並不會用到作業系統/虛擬機器的全部功能,即作業系統/虛擬機器對於一個webapp來說太過笨重。打個比方說,我要從宿舍去食堂,我並不需要一架飛機,只需要一輛自行車就夠了,而Docker映象就相當於是一輛自行車。你可以把Docker映象理解為輕量化的虛擬機器,當然二者有所不同,但是不在本文的討論範圍。

二、使用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連線的)。

三、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個執行著不同作業系統的虛擬伺服器,而對於使用者來說,這些是透明的––使用者則認為自己擁有一臺完整的伺服器。據我推測,阿里雲的伺服器就是這麼幹的。這充分利用了閒置的硬體資源。我這裡掛一漏萬,Docker的好處遠遠不止這些。譬如使用Docker映象實現磁碟快照功能,在不同場景下有Docker不同的使用姿勢,至於更多奇技淫巧,則需要在使用過程在去發掘。
Docker的容器是以映象來建立的,映象是不是一個類似作業系統的環境?
是的,你可以將Docker理解為一個輕量化的虛擬機器,至於我們經常說的什麼Tomcat映象、MySQL映象之類的,只是這個輕量化的虛擬機器中安裝了相應的軟體。映象的名字也就說明了映象的功能。是不是到正式環境上還要安裝Docker,然後把應用部署在其中?是的,構建Docker映象、執行Docker容器,都需要安裝Docker,但這是一勞永逸的,因為我們使用的是安裝了各種各樣功能軟體的Docker映象和Docker容器。如果是這樣,那和我建立一個和生產環境一樣的虛擬機器來部署應用有什麼區別?首先這個問題可以用自行車和飛機的例子解答。其次安裝Docker後,我們可以從DockerHub上獲取各種各樣的作業系統映象,這個操作很簡單,只需要pull相應的映象到本地然後執行即可,而安裝不同版本的虛擬機器有多麻煩?另外DockerHub上有各種各樣的優秀映象,我們直接拿來使用就可以了,不需要自己搭建,應用的部署就像搭積木一樣簡單。