03.02 Docker系列之入門

Docker基本介紹

一.什麼是Docker

   在docker的官方之什麼是docker中提到了一句話:“當今各大組織或者團體的創新都源於軟件(例如OA、ERP等),其實很多公司都是軟件公司"。用戶量的激增導致了併發、指數級增加的數據、應用的可靠性等問題,單體應用已經應對不了這些問題,於是誕生了分佈式、集群、微服務、邊緣計算等各種名詞、架構風格和滿足這種架構風格的各種框架,那我們接下來跟大家談談這些技術名詞。

分佈式:將一個複雜的應用按照模塊進行拆分,每個拆分的模塊做成一個應用,分開部署,分開運行,各個模塊之間通過webservice、http rest、rpc的方式進行調用。但是分佈式系統中面臨著很多棘手的問題:1. 如果某一個應用crash掉了,會導致調用該模塊的其他模塊也無法正常工作;2. 因為網絡抖動或者硬件的問題導致數據的一致性問題(即分佈式事務問題);3. 運維和硬件成本的急劇上升。

集群:集群是指將某一個應用或者某個模塊部署在多臺機器上(這些機器上跑的代碼是相同的),然後通過負載均衡的方式讓每個應用都能處理請求,即使某一個應用宕掉了,其他的應用一樣可以處理請求,集群是為了解決我們上面提到的分佈式應用中的第一個問題,但是集群也面臨著諸多的問題:1. 運維和硬件成本的急劇增加;2. 實現集群勢必會引入第三方的插件,那麼第三方插件如何去保障其穩定運行;

微服務:微服務只是一種架構風格,最早是由Martin Fowler(博客點擊這裡)提出,他對微服務的解釋是:In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies(簡而言之,微服務是一種架構的風格,將每一個單獨的應用來作為一個服務套件,每一個服務套件運行在其獨立的進程當中,使用輕量級的方式相互調用,通常採用HTTP的方式。這些個服務是要建立在業務能力和自動化獨立部署的基礎上的。這些服務間應該以一種去中心化的方式運行,而且這些服務可以使用不同的語言、不同的存儲機制來實現)。我用自己的話來表達一下,所謂的微服務就是將一個可以獨立部署、業務能力獨立的應用,應用之間耦合度儘量降低(只能儘量降低,不可能實現絕對的解耦),儘可能的去中心化。微服務也同樣的面臨著諸多的問題:1. 分佈式事務問題;2. 運維和硬件成本急劇上升。

邊緣計算:首先跟大家說一下,為什麼要在這裡提到邊緣計算呢?因為本文講的是docker, docker中提到了邊緣計算。所謂的邊緣計算是指在接近數據源的地方進行數據的處理,而不是將數據集中到一起進行處理,邊緣計算可以實現數據的實時分析,將有價值的數據過濾後丟給雲端。下面給一張圖方便大家的理解:

  

Docker系列之入門

我們在回到本節標題“什麼是docker”,我們在介紹完上面這些名詞後,會發現無論當今所流行的不論是分佈式、集群還是微服務都面臨著一個問題:運維和硬件成本的急劇上升。那麼docker的出現就是為了解決這個問題:解決運維和硬件成本的問題。

  提到這裡筆者結合自己的工作經歷跟大家講解一下我以前在某家公司是如何解決這個問題的,我們公司購買一臺服務器,然後在服務器上虛擬出多個計算機,然後在虛擬的機器上部署我們的應用,所謂虛擬機是藉助於一些軟件虛擬出一臺和我們的物理機一樣的機器,也有CPU、內存、硬盤、光驅等。雖然我們可以在一臺真實的物理機上虛擬出多臺機器,但是每個機器上其實都是有一套完整的操作系統,那麼多臺虛擬機上就有多套操作系統,這些操作系統也是要消耗物理機的資源的,那麼如何解決這個問題呢?這同樣回到我們該節的主題“什麼是docker”。

Docker系列之入門

Docker系列之入門

二. docker能解決什麼問題

  其實這個問題,我們在第一節“什麼是docker”這個章節已經給出了答案。在本節我們會給出系統的總結:

2.1 資源的複用

上節筆者說到我們公司在解決運維和機器成本問題的時候說到,通過傳統的虛擬機的方式每一臺虛擬機都有一套完整的操作系統,那麼我們能不能就使用一個操作系統,每個隔離的進程只運行我們的應用和所依賴的第三方軟件,docker恰恰可以解決這個問題。

2.2 一致的環境

我相信做過開發的朋友都有這樣的經歷,我們在本地開發一個應用,尤其是分佈式應用,我們需要在本地安裝多臺虛擬機,在本地測試各種功能完好。接著修改各種參數后辛辛苦苦部署到測試機上後,測試的同事經過緊張、嚴謹的測試,一切都那麼的prefect。當我們高高興興的修改完各種參數後部署到生產環境,我嘞個擦,各種問題都出現。開發人員經常掛在嘴邊的幾句話“昨天我跑著還是好好的呀”,“測試的時候還是好好的呀”,導致開發人員說這些話的原因是因為開發、測試、生產環境的不一致所導致的。docker也可以解決這個問題,docker的鏡像提供了除內核以外完整運行環境,確保的環境的一致性。

2.3 啟動速度更快

以往的虛擬機的方式啟動的時候需要的時間會很長,因為要啟動操作系統,可能需要幾分鐘甚至更長。但是docker啟動只需要幾秒、幾毫秒。

2.4 應用的遷移

給朋友舉個例子,以前你的應用部署在阿里雲上,那麼那天你的領導需要將應用簽署到騰訊雲上,使用docker的話,會變得非常的簡單。


分享到:


相關文章: