簡單聊會 Docker

本文來自於個人 慕課網手記簡單聊會 Docker,轉載請保留連接 ;)

最近在工做中一直在忙基礎設施構建,發如今選型的時候,你們內心基本上都有一個本身的成熟架構。而在服務部署這塊發現公司的同事們都大多數考慮Docker,在業餘閒聊了後,發現他們對Docker只是在停留在使用,對一些Docker的基本知識仍是不瞭解,並不清楚 Docker 究竟是什麼,要解決什麼問題,好處又在哪裏?今天就來詳細解釋,幫助你們理解它,還帶有簡單易懂的實例,教你如何將它用於平常開發並用其部署微服務。nginx

Docker簡介

Docker是基於Go語言實現的雲開源項目,誕生於2013年初,最初發起者是dotCloud公司。Docker自開源後受到普遍的關注和討論,目前已有多個相關項目,逐漸造成了圍繞Docker的生態體系。dotCloud公司後來也更名爲Docker Inc,專一於Docker相關技術和產品的開發。Docker 一直廣受矚目,被認爲可能會改變軟件行業。那麼什麼是Docker呢?我查閱了網上的一些相關資料,現用一段話總結了一下。
Docker是一個開源的容器引擎,它能夠幫助咱們更快地交付應用。Docker可將應用程序和基礎設施層隔離,而且能將基礎設施看成程序同樣進行管理。使用Docker,可更快地打包、測試以及部署應用程序,並可減小從編寫到部署運行代碼的週期
對一個事物有了必定了解後,咱們的繼續學習Docker官方的給出文檔和源碼。(這個今天不在此文章擴展,否則聊不完。)git

TIPSgithub

(1) Docker官方網站:https://www.docker.com/docker

(2) Docker GitHub:https://github.com/docker/docker服務器

Docker快速入門

執行以下命令,便可啓動一個Nginx容器
``
docker run -d -p 91:80 nginx
``網絡

Docker架構

咱們來看一下來自Docker官方文檔的架構圖,如圖所示。
Docker應用場景架構

咱們來說解上圖中包含的組件。
(1) Docker daemon(Docker守護進程)微服務

Docker daemon是一個運行在宿主機(DOCKER_HOST)的後臺進程。咱們可經過Docker客戶端與之通訊。工具

(2) Client(Docker客戶端)學習

Docker客戶端是Docker的用戶界面,它能夠接受用戶命令和配置標識,並與Docker daemon通訊。圖中,docker build等都是Docker的相關命令。

(3) Images(Docker鏡像)

Docker鏡像是一個只讀模板,它包含建立Docker容器的說明。它和系統安裝光盤有點像——咱們使用系統安裝光盤安裝系統,同理,咱們使用Docker鏡像運行Docker鏡像中的程序。

(4) Container(容器)

容器是鏡像的可運行實例。鏡像和容器的關係有點相似於面向對象中,類和對象的關係。咱們可經過Docker API或者CLI命令來啓停、移動、刪除容器。

(5) Registry

Docker Registry是一個集中存儲與分發鏡像的服務。咱們構建完Docker鏡像後,就可在當前宿主機上運行。但若是想要在其餘機器上運行這個鏡像,咱們就須要手動拷貝。此時,咱們可藉助Docker Registry來避免鏡像的手動拷貝。

一個Docker Registry可包含多個Docker倉庫;每一個倉庫可包含多個鏡像標籤;每一個標籤對應一個Docker鏡像。這跟Maven的倉庫有點相似,若是把Docker Registry比做Maven倉庫的話,那麼Docker倉庫就可理解爲某jar包的路徑,而鏡像標籤則可理解爲jar包的版本號。

Docker Registry可分爲公有Docker Registry和私有Docker Registry。最經常使用的Docker Registry莫過於官方的Docker Hub,這也是默認的Docker Registry。Docker Hub上存放着大量優秀的鏡像,咱們可以使用Docker命令下載並使用。

Docker應用場景

經常使用的8個Docker的真實使用場景,分別是簡化配置、代碼流水線管理、提升開發效率、隔離應用、整合服務器、調試能力、多租戶環境、快速部署。咱們一直在談Docker,Docker怎麼使用,在怎麼樣的場合下使用?
Docker架構圖

首先你在享有Docker帶來的虛擬化能力的時候無需擔憂它帶來的額外開銷。其次,相比於虛擬機,你能夠在同一臺機器上建立更多數量的容器。

Docker的另一個優勢是容器的啓動與中止都能在幾秒中內完成。Docker公司的創始人 Solomon Hykes曾經介紹過Docker在單純的LXC之上作了哪些事情,你能夠去看看。

下面是我總結的一些Docker的使用場景,它爲你展現瞭如何藉助Docker的優點,在低開銷的狀況下,打造一個一致性的環境。

簡化配置

這是Docker公司宣傳的Docker的主要使用場景。虛擬機的最大好處是能在你的硬件設施上運行各類配置不同的平臺(軟件、系統),Docker在下降額外開銷的狀況下提供了一樣的功能。它能讓你將運行環境和配置放在代碼中而後部署,同一個Docker的配置能夠在不一樣的環境中使用,這樣就下降了硬件要求和應用環境之間耦合度。

代碼流水線(Code Pipeline)管理

前一個場景對於管理代碼的流水線起到了很大的幫助。代碼從開發者的機器到最終在生產環境上的部署,須要通過不少的中間環境。而每個中間環境都有本身微小的差異,Docker給應用提供了一個從開發到上線均一致的環境,讓代碼的流水線變得簡單很多。

提升開發效率

這就帶來了一些額外的好處:Docker能提高開發者的開發效率。若是你想看一個詳細一點的例子,能夠參考Aater在DevOpsDays Austin 2014 大會或者是DockerCon上的演講。

不一樣的開發環境中,咱們都想把兩件事作好。一是咱們想讓開發環境儘可能貼近生產環境,二是咱們想快速搭建開發環境。

理想狀態中,要達到第一個目標,咱們須要將每個服務都跑在獨立的虛擬機中以便監控生產環境中服務的運行狀態。然而,咱們卻不想每次都須要網絡鏈接,每次從新編譯的時候遠程鏈接上去特別麻煩。這就是Docker作的特別好的地方,開發環境的機器一般內存比較小,以前使用虛擬的時候,咱們常常須要爲開發環境的機器加內存,而如今Docker能夠輕易的讓幾十個服務在Docker中跑起來。

隔離應用

有不少種緣由會讓你選擇在一個機器上運行不一樣的應用,好比以前提到的提升開發效率的場景等。

咱們常常須要考慮兩點,一是由於要下降成本而進行服務器整合,二是將一個總體式的應用拆分紅松耦合的單個服務(譯者注:微服務架構)。若是你想了解爲何鬆耦合的應用這麼重要,請參考Steve Yege的這篇論文,文中將Google和亞馬遜作了比較。

整合服務器

正如經過虛擬機來整合多個應用,Docker隔離應用的能力使得Docker能夠整合多個服務器以下降成本。因爲沒有多個操做系統的內存佔用,以及能在多個實例之間共享沒有使用的內存,Docker能夠比虛擬機提供更好的服務器整合解決方案。

調試能力

Docker提供了不少的工具,這些工具不必定只是針對容器,可是卻適用於容器。它們提供了不少的功能,包括能夠爲容器設置檢查點、設置版本和查看兩個容器之間的差異,這些特性能夠幫助調試Bug。你能夠在《Docker拯救世界》的文章中找到這一點的例證。

多租戶環境

另一個Docker有意思的使用場景是在多租戶的應用中,它能夠避免關鍵應用的重寫。咱們一個特別的關於這個場景的例子是爲IoT(譯者注:物聯網)的應用開發一個快速、易用的多租戶環境。這種多租戶的基本代碼很是複雜,很難處理,從新規劃這樣一個應用不但消耗時間,也浪費金錢。

使用Docker,能夠爲每個租戶的應用層的多個實例建立隔離的環境,這不只簡單並且成本低廉,固然這一切得益於Docker環境的啓動速度和其高效的diff命令。

你能夠在這裏瞭解關於此場景的更多信息。

快速部署

在虛擬機以前,引入新的硬件資源須要消耗幾天的時間。虛擬化技術(Virtualization)將這個時間縮短到了分鐘級別。而Docker經過爲進程僅僅建立一個容器而無需啓動一個操做系統,再次將這個過程縮短到了秒級。這正是Google和Facebook都看重的特性。

你能夠在數據中心建立銷燬資源而無需擔憂從新啓動帶來的開銷。一般數據中心的資源利用率只有30%,經過使用Docker並進行有效的資源分配能夠提升資源的利用率。

相關文章
相關標籤/搜索