Docker簡介

官方網站:

https://www.docker.com/

Docker是什麼?

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

擴展:

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

LXC爲Linux Container的簡寫。Linux Container容器是一種內核虛擬化技術,可以提供輕量級的虛擬化,以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他複雜性。LXC主要通過來自kernel的namespace實現每個用戶實例之間的相互隔離,通過cgroup實現對資源的配額和度量。

docker

[ˈdɒkə®] 碼頭工人

logo:

圖片

注:

docker服務相當於鯨魚,container容器就是集裝箱。

container :集裝箱,容器

docker: 碼頭工人

https://github.com/docker

圖片

docker容器技術和虛擬機對比

相同點: docker容器技術和虛擬機技術,都是虛擬化技術。

圖片

  • 傳統虛擬機技術是虛擬出一套硬件後,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更爲輕便.

  • docker相對於VM虛擬機,少了虛擬機操作系統這一層,所以docker效率比虛擬機高

  • 你的物理系統啓動使用多長時間? 在docker上啓動一個實例 1-2秒 是不是吃了一鯨?彆着急再往下看!

Docker 架構

圖片

工作流程:服務器A上運行docker Engine 服務,在docker Engine上啓動很多容器container , 從外網Docker Hub上把image操作系統鏡像下載來,放到container容器運行。這樣一個容器的實例就運行起來了。最後,通過Docker client 對docker 容器虛擬化平臺進行控制。

dockerhub:dockerhub是docker官方的鏡像存儲站點,其中提供了很多常用的鏡像供用戶下載,如ubuntu, centos等系統鏡像。通過dockerhub用戶也可以發佈自己的docker鏡像,爲此用戶需要註冊一個賬號,在網站上創建一個docker倉庫。

Docker 核心技術

  1. Namespace – 實現Container的進程、網絡、消息、文件系統和主機名的隔離。

  2. Cgroup – 實現對資源的配額和度量。

**注:**Cgroup的配額,可以指定實例使用的cpu個數,內存大小等。就像如下圖,vmware虛擬機中的硬件配置參數。

圖片

Docker特性

  • 文件系統隔離:每個進程容器運行在一個完全獨立的根文件系統裏。

  • 資源隔離:系統資源,像CPU和內存等可以分配到不同的容器中,使用cgroup。

  • 網絡隔離:每個進程容器運行在自己的網絡空間,虛擬接口和IP地址。

  • 日誌記錄:Docker將會收集和記錄每個進程容器的標準流(stdout/stderr/stdin),用於實時檢索或批量檢索。

  • 變更管理:容器文件系統的變更可以提交到新的鏡像中,並可重複使用以創建更多的容器。無需使用模板或手動配置。

  • 交互式shell:Docker可以分配一個虛擬終端並關聯到任何容器的標準輸入上,例如運行一個一次性交互shell。

優點:

  1. 一些優勢和VM一樣,但不是所有都一樣。比VM小,比VM快,Docker容器的尺寸減小相比整個虛擬機大大簡化了分佈到雲和從雲分發時間和開銷。Docker啓動一個容器實例時間很短,一兩秒就可以啓動一個實例。

  2. 對於在筆記本電腦,數據中心的虛擬機,以及任何的雲上,運行相同的沒有變化的應用程序,IT的發佈速度更快。Docker是一個開放的平臺,構建,發佈和運行分佈式應用程序。Docker使應用程序能夠快速從組件組裝和避免開發和生產環境之間的摩擦。

  3. 您可以在部署在公司局域網或雲或虛擬機上使用它。

  4. 開發人員並不關心具體哪個Linux操作系統使用Docker,開發人員可以根據所有依賴關係構建相應的軟件,針對他們所選擇的操作系統。然後,在部署時一切是完全一樣的,因爲一切都在DockerImage的容器在其上運行。開發人員負責並且能夠確保所有的相關性得到滿足。

  5. Google,微軟,亞馬遜,IBM等都支持Docker。

  6. Docker支持Unix/Linux操作系統,也支持Windows或Mac

缺點(侷限性):

  1. Docker用於應用程序時是最有用的,但並不包含數據。日誌,跟蹤和數據庫等通常應放在Docker容器外。 一個容器的鏡像通常都很小,不適合存大量數據,存儲可以通過外部掛載的方式使用。比如使用:NFS,ipsan,MFS等, -v 映射磁盤分區

  2. docker只用於計算,存儲交給別人。

Docker基本概念

  1. Docker鏡像(Image)

  2. Docker容器(Container)

  3. Docker倉庫(Repository)

Docker鏡像

  • Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。Docker設計時利用的是分層存儲的架構,鏡像並非像ISO那樣的打包文件。它是由多層文件系統聯合組成。鏡像構建時,會一層一層構建,前一層是一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在自己這一層。

  • 在構建鏡像的時候需要額外小心,每一層儘量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。

Docker容器

  • 鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。容器的實質時進程,但與直接在宿主執行的進程不同,容器進程運行屬於自己的獨立命名空間。每一個容器運行時,是以鏡像爲基礎層,在其上創建一個當前容器的存儲層,我們可以稱這個爲容器運行時讀寫而準備的存儲層爲容器存儲層。容器存儲層的生存週期和容器一樣,容器消亡時,容器存儲層也隨之消亡。

  • 容器不應該向其存儲層內寫入任何數據,容器存儲層要保持無狀態化。所有的文件寫入操作,都應該使用數據卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網絡存儲)發生讀寫,其性能和穩定性更高。數據卷的生存週期獨立於容器,容器消亡,數據卷不會消亡。因此,使用數據卷後,容器可以隨意刪除、重新run,數據卻不會丟失。

Docker倉庫

  • 鏡像構建完成後,可以很容易的在當前宿主上運行,但是, 如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry就是這樣的服務。

  • 一個Doker Registry中可以包含多個倉庫(Repository);每個倉庫可以包含多個標籤(Tag);每個標籤對應一個鏡像。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標籤就常用於對應軟件的各個版本。我們可以通過<倉庫名>:<標籤>的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標籤,將以latest作爲默認標籤。以Persona-X爲例,Persona-X是倉庫的名字,其內包含不同的版本標籤,如,1.0,1.1,1.2,1.3。

  • Doker Registry公開服務是開放給用戶使用、允許用戶管理鏡像的Registry服務。最常使用的Registry公開服務是官方的Docker Hub。

  • Doker Registry私有服務是指用戶在本地搭建私有Docker Registry

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