阿里P8架構師談:Docker容器的原理、特徵、基本架構、與應用場景


阿里P8架構師談:Docker容器的原理、特徵、基本架構、與應用場景

什麼是容器?

一句話概括容器:容器就是將軟件打包成標準化單元,以用於開發、交付和部署。

  • 容器鏡像是輕量的、可執行的獨立軟件包 ,包含軟件運行所需的所有內容:代碼、運行時環境、系統工具、系統庫和設置。
  • 容器化軟件適用於基於Linux和Windows的應用,在任何環境中都能夠始終如一地運行。
  • 容器賦予了軟件獨立性,使其免受外在環境差異(例如,開發和預演環境的差異)的影響,從而有助於減少團隊間在相同基礎設施上運行不同軟件時的衝突。

再來看看容器較為通俗的解釋:

如果需要通俗的描述容器的話,我覺得容器就是一個存放東西的地方,就像書包可以裝各種文具、衣櫃可以放各種衣服、鞋架可以放各種鞋子一樣。我們現在所說的容器存放的東西可能更偏向於應用比如網站、程序甚至是系統環境。

阿里P8架構師談:Docker容器的原理、特徵、基本架構、與應用場景

什麼是Docker

Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘項目。它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。

阿里P8架構師談:Docker容器的原理、特徵、基本架構、與應用場景

說實話關於Docker是什麼並太好說,下面我通過四點向你說明Docker到底是個什麼東西。

  • Docker是世界領先的軟件容器平臺。
  • Docker使用Google公司推出的Go語言進行開發實現,基於Linux內核的cgroup,namespace,以及AUFS類的UnionFS等技術,對進程進行封裝隔離,屬於操作系統層面的虛擬化技術。 由於隔離的進程獨立於宿主和其它的隔離的進程,因此也稱其為容器。Docke最初實現是基於LXC。
  • Docker能夠自動執行重複性任務,例如搭建和配置開發環境,從而解放了開發人員以便他們專注在真正重要的事情上:構建傑出的軟件。
  • 用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的代碼一樣。

為什麼用Docker

作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢。

Docker 在如下幾個方面具有較大的優勢:

1.更快速的交付和部署

Docker在整個開發週期都可以完美的輔助你實現快速交付。Docker允許開發者在裝有應用和服務本地容器做開發。可以直接集成到可持續開發流程中。

例如:開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創建容器,快速迭代應用程序,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程序是如何創建和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測試、部署的時間。

2.高效的部署和擴容

Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等。 這種兼容性可以讓用戶把一個應用程序從一個平臺直接遷移到另外一個。

Docker的兼容性和輕量特性可以很輕鬆的實現負載的動態管理。你可以快速擴容或方便的下線的你的應用和服務,這種速度趨近實時。

3.更高的資源利用率

Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器。容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷儘量小。傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可。

4.更簡單的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。

Docker與虛擬機的區別

阿里P8架構師談:Docker容器的原理、特徵、基本架構、與應用場景

阿里P8架構師談:Docker容器的原理、特徵、基本架構、與應用場景

比較上面兩張圖,我們發現虛擬機是攜帶操作系統,本身很小的應用程序卻因為攜帶了操作系統而變得非常大,很笨重。

Docker是不攜帶操作系統的,所以Docker的應用就非常的輕巧。

另外在調用宿主機的CPU、磁盤等等這些資源的時候,拿內存舉例,虛擬機是利用Hypervisor去虛擬化內存,整個調用過程是虛擬內存->虛擬物理內存->真正物理內存,但是Docker是利用Docker Engine去調用宿主的的資源,這時候過程是虛擬內存->真正物理內存。

Docker 基本架構

Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。

Docker 主要有以下幾部分組成:

  1. Docker Client 客戶端
  2. Docker daemon 守護進程
  3. Docker Image 鏡像
  4. Docker Container 容器
  5. Docker Registry 倉庫

客戶端和守護進程:

  • Docker是C/S(客戶端client-服務器server)架構模式。
  • docker通過客戶端連接守護進程,通過命令向守護進程發出請求,守護進程通過一系列的操作返回結果。
  • docker客戶端可以連接本地或者遠程的守護進程。
  • docker客戶端和服務器通過socket或RESTful API進行通信。

Docker 容器通過 Docker 鏡像來創建,容器與鏡像的關係類似於面向對象編程中的對象與類。

如圖所示基本架構:


阿里P8架構師談:Docker容器的原理、特徵、基本架構、與應用場景


1.Docker 鏡像(Images)

Docker 鏡像是用於創建 Docker 容器的模板。

2.Docker 容器(Container)

容器是獨立運行的一個或一組應用。

3.Docker 客戶端(Client)

Docker 客戶端通過命令行或者其他工具使用 Docker API

4.Docker 主機(Host)

一個物理或者虛擬的機器用於執行 Docker 守護進程和容器。

5.Docker 倉庫(Registry)

Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫。

6.Docker Hub

提供了龐大的鏡像集合供使用。

7.Docker Machine

Docker Machine是一個簡化Docker安裝的命令行工具,通過一個簡單的命令行即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

總之,Docker是一種輕量虛擬化的容器技術,提供類似虛擬機的隔離功能,並使用了一種分層的聯合文件系統技術管理鏡像,能極大簡化環境運維過程,最後看看對應的應用場景。

Docker的應用場景

1. 作為雲主機使用

相比虛擬機來說,容器使用的是一系列非常輕量級的虛擬化技術,使得其啟動、部署、升級跟管理進程一樣迅速,用起來靈活又感覺跟虛擬機一樣沒什麼區別,所以有些人直接使用Docker的Ubuntu等鏡像創建容器,當作輕量的虛擬機來使用。

2. 作為服務使用

如果你僅僅把Docker容器當作一個輕量的固定虛擬機用,那其實只能算是另類用法,Docker容器最重要價值在於提供一整套平臺無關的標準化技術,簡化服務的部署、升級、維護,只要把需要運維的各種服務打包成標準的集裝箱,就可以在任何能運行Docker的環境下跑起來,達到開箱即用的效果,這個特點才是Docker容器風靡全球的根本原因。

  • Web應用服務
  • 持續集成和持續部署

3. 微服務架構使用

如果說上面兩種應用場景還不足以體現出與傳統的PaaS平臺相比的巨大優勢的話,那麼對微服務的架構這種複雜又靈活的使用場景的無縫支持絕對具有革命意義。

微服務架構將傳統分佈式服務繼續拆分解耦,形成一些更小服務模塊,服務模塊之間獨立部署升級,這些特性與容器的輕量、高效部署不謀而合。

更多阿里P8架構師談:架構設計16精講(關注後即可查看)

阿里P8架構師談:Docker容器的原理、特徵、基本架構、與應用場景

阿里P8架構師談:Docker容器的原理、特徵、基本架構、與應用場景


分享到:


相關文章: