Docker基本介紹web
一.什麼是Dockerdocker
在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中提到了邊緣計算。所謂的邊緣計算是指在接近數據源的地方進行數據的處理,而不是將數據集中到一塊兒進行處理,邊緣計算能夠實現數據的實時分析,將有價值的數據過濾後丟給雲端。下面給一張圖方便你們的理解:app
咱們在回到本節標題「什麼是docker」,咱們在介紹完上面這些名詞後,會發現不管當今所流行的不管是分佈式、集羣仍是微服務都面臨着一個問題:運維和硬件成本的急劇上升。那麼docker的出現就是爲了解決這個問題:解決運維和硬件成本的問題。負載均衡
提到這裏筆者結合本身的工做經歷跟你們講解一下我之前在某家公司是如何解決這個問題的,咱們公司購買一臺服務器,而後在服務器上虛擬出多個計算機,而後在虛擬的機器上部署咱們的應用,所謂虛擬機是藉助於一些軟件虛擬出一臺和咱們的物理機同樣的機器,也有CPU、內存、硬盤、光驅等。雖然咱們能夠在一臺真實的物理機上虛擬出多臺機器,可是每一個機器上其實都是有一套完整的操做系統,那麼多臺虛擬機上就有多套操做系統,這些操做系統也是要消耗物理機的資源的,那麼如何解決這個問題呢?這一樣回到咱們該節的主題「什麼是docker」。框架
二. docker能解決什麼問題運維
其實這個問題,咱們在第一節「什麼是docker」這個章節已經給出了答案。在本節咱們會給出系統的總結:
2.1 資源的複用
上節筆者說到咱們公司在解決運維和機器成本問題的時候說到,經過傳統的虛擬機的方式每一臺虛擬機都有一套完整的操做系統,那麼咱們能不能就使用一個操做系統,每一個隔離的進程只運行咱們的應用和所依賴的第三方軟件,docker偏偏能夠解決這個問題。
2.2 一致的環境
我相信作過開發的朋友都有這樣的經歷,咱們在本地開發一個應用,尤爲是分佈式應用,咱們須要在本地安裝多臺虛擬機,在本地測試各類功能無缺。接着修改各類參數后辛辛苦苦部署到測試機上後,測試的同事通過緊張、嚴謹的測試,一切都那麼的prefect。當咱們高高興興的修改完各類參數後部署到生產環境,我嘞個擦,各類問題都出現。開發人員常常掛在嘴邊的幾句話「昨天我跑着仍是好好的呀」,「測試的時候仍是好好的呀」,致使開發人員說這些話的緣由是由於開發、測試、生產環境的不一致所致使的。docker也能夠解決這個問題,docker的鏡像提供了除內核之外完整運行環境,確保的環境的一致性。
2.3 啓動速度更快
以往的虛擬機的方式啓動的時候須要的時間會很長,由於要啓動操做系統,可能須要幾分鐘甚至更長。可是docker啓動只須要幾秒、幾毫秒。
2.4 應用的遷移
給朋友舉個例子,之前你的應用部署在阿里雲上,那麼那天你的領導須要將應用簽署到騰訊雲上,使用docker的話,會變得很是的簡單。