容器&&Docker簡介

什麼是容器

容器是一種輕量級、可移植、自包含的軟件打包技術,使應用程序可以在幾乎任何地方以相同的方式運行。開發人員在自己筆記本上創建並測試好的容器,無需任何修改就能夠在生產系統的虛擬機、物理服務器或公有云主機上運行。Docker是容器的一種,還有其他容器,比如 CoreOS 的 rkt。

什麼是Docker

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙盒機制,相互之間不會有任何接口(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架或包裝系統。

沙盒也叫沙箱,英文 sandbox。在計算機領域指一種虛擬技術,且多用於計算機安全技術。安全軟件可以先讓它在沙盒中運行,如果含有惡意行爲,則禁止程序的進一步運行,而這不會對系統造成任何危害。

Docker 是 dotCloud 公司開源的一個基於 LXC 的高級容器引擎,源代碼託管在 Github 上, 基於 go語言並遵從 Apache2.0 協議開源。

Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的 container 中,然後發佈到任何流行的 Linux 機器上。

容器與VM區別

容器虛擬化,Operating System Virtualization ,使用 Linux 內核中的 namespaces 和 cgroups 實現進程組之間的隔離。是用內核技術實現的隔離,所以它是一個共享內核的虛擬化技術。容器則說直接運行在操作系統內核之上的用戶空間容器,因此,虛擬化也被稱爲“操作系統級虛擬化”,容器技術可以讓多個獨立的用戶空間運行在同一臺宿主機上。

在這裏插入圖片描述
傳統虛擬化是站在硬件物理資源的基礎上,虛擬出多個OS,然後在OS的基礎上構建相對獨立的程序運行環境, Host 中通過 Hypervisor 層實現安裝多個 GuestOS,每個 GuestOS 都有自己的內核,和主機的內核不同,GuestOS 之間完全隔離。

通過上述比較,可以看出Dokcer輕量得多,因此其資源佔用、性能消耗相比傳統虛擬化都有很大優勢。從技術角度出發來講,服務器虛擬化解決的核心問題是資源調配,容器解決的核心問題是應用開發、測試和部署

Docker架構

在這裏插入圖片描述

1、docker的客戶端和服務器

Docker是一個客戶-服務器(C/S)架構的程序。Docekr客戶端只需向Docker服務器或守護進程發出請求,服務器或守護進程完成所有工作並返回結果。Docker提供了一個命令行工具docker以及一整套RESTful API。你可以在同一臺主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。

2、Docker鏡像(Images)

鏡像是構建Docker世界的基石。用戶基於鏡像來運行自己的容器。鏡像也是Docker生命週期中的“構建”部分。鏡像是基於聯合(Union)文件系統的一種層式的結構。由一系列指令一步一步構建出來。例如:

  • 添加一個文件
  • 執行一個命令
  • 打開一個窗口

也可以把鏡像當做容器的“源代碼”。鏡像體積很小,非常“便攜”,易於分享、存儲和更新。

3、Registry

Docker用Registry來保存用戶構建的鏡像。Registry分爲公有和私有兩種。Docker公司運營的公共Registry叫做Docker Hub。用戶可以在Docker Hub註冊賬號,分享並保存自己的鏡像。國內的公開倉庫包括阿里雲、網易雲等。

4、容器(Containers)

Docker可以幫你構建和部署容器,你只需要把自己的應用程序或服務打包放進容器即可。容器是基於鏡像啓動起來的,容器中可以運行一個或多個進程。我們可以以爲,鏡像是Docker生命週期中的構建或打包階段,而容器則是啓動或執行階段。

總結起來,Docker容器就是:

  • 一個鏡像格式;
  • 一系列標準的操作
  • 一個執行環境

Docker借鑑了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Docker將這個模型運用到自己的設計哲學中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟件。

每個容器都包含一個軟件鏡像,也就是容器的“貨物”,而且與真正的貨物一樣,容器裏的軟件鏡像可以進行一些操作。例如,鏡像可以被創建、啓動、關閉、重啓以及銷燬。

和集裝箱一樣,Docker在執行上述操作時,並不關心容器中到底塞了什麼,也不關心要把容器運到何方。和標準集裝箱一樣,Docker容器方便替換,可以疊加,易於分發,並且儘量通用。

使用Docker的優勢

1、交付物標準化

Docker是軟件工程領域的“標準化”交付組件,最恰到好處的類比是“集裝箱”。

集裝箱將零散、不易搬運的大量物品封裝成一個整體,集裝箱更重要的意義在於它提供了一種通用的封裝貨物的標準,卡車、火車、貨輪、橋吊等運輸或搬運工具採用此標準,隧道、橋樑等也採用此標準。以集裝箱爲中心的標準化設計大大提高了物流體系的運行效率。

傳統的軟件交付物包括:應用程序、依賴軟件安裝包、配置說明文檔、安裝文檔、上線文檔等非標準化組件。Docker的標準化交付物稱爲“鏡像”,它包含了應用程序及其所依賴的運行環境,大大簡化了應用交付的模式。

2、一次構建,多次交付

類似於集裝箱的“一次裝箱,多次運輸”,Docker鏡像可以做到“一次構建,多次交付”。當涉及到應用程序多副本部署或者應用程序遷移時,更能體現Docker的價值。

3、應用隔離

集裝箱可以有效做到貨物之間的隔離,使化學物品和食品可以堆砌在一起運輸。Docker可以隔離不同應用程序之間的相互影響,但是比虛擬機開銷更小。

小結:容器技術部署速度快,開發、測試更敏捷;提高系統利用率,降低資源成本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章