01_Docker概念簡介、元件介紹、使用場景和名稱空間
一、簡介
Docker是一個能夠把開發的應用程式自動部署到容器的開源引擎。Docker在虛擬化的容器執行環境中增加了一個應用程式部署引擎。該引擎的目標就是提供一個輕量、快速的環境,能夠執行開發者的程式,並方便高效地將程式從開發者的筆記本部署到測試環境,然後再部署到生產環境。Docker極其簡潔,它所需的全部環境只是一臺僅僅安裝了相容版本的Linux核心和二進位制檔案最小限的宿主機。
大多數Docker容器只需不到一秒鐘即可啟動,由於去除了管理程式的開銷,Docker容器擁有很高的效能,同時同一臺宿主機中也可以執行更多的容器,使使用者可以儘可能充分地利用系統資源。
二、Docker元件
Docker
1、Docker客戶端和伺服器
Docker是一個客戶-伺服器(C/S)架構的程式。Docker客戶端只需向Docker伺服器或守護程序發出請求,伺服器或守護程序將完成所有工作並返回結果。Docker提供了一個命令列工具docker,可以在同一臺宿主機上執行Docker守護程序和客戶端,也可以從本地的Docker客戶端連線到執行在另一臺宿主機上的遠端Docker守護程序。
2、Docker映象
Docker映象是一個只讀的模板。例如,一個映象可以包含安裝了Apache Web服務應用的Ubuntu操作系
映象是構建Docker世界的基石。使用者基於映象來執行自己的容器。映象也是Docker生命週期中的“構建”部分。映象是基於聯合檔案系統的一種層式的結構。由一系列指令一步一步構建出來。例如:新增一個檔案,執行一個命令,開啟一個埠。
也可以把映象當做容器的“原始碼”。映象體積很小,非常“便攜”,易於分享、儲存和更新。
3、Registry
Docker 倉庫用來儲存映象,可以理解為程式碼控制中的程式碼倉庫。Docker
Docker Hub 是一個用於分享、管理 Docker 容器的 Docker SaaS 平臺。由Docker公司負責維護的公共註冊中心,包含超過15,000個可用來下載和構建容器的映象,並提供認證、工作組結構、工作流工具(比如webhooks)、構建觸發器以及私有工具。
4、Docker容器
Docker 容器和資料夾很類似,一個Docker容器包含了所有的某個應用執行所需要的環境。每一個 Docker 容器都是從 Docker 映象建立的。Docker 容器可以執行、開始、停止、移動和刪除。每一個 Docker 容器都是獨立和安全的應用平臺,Docker 容器是 Docker 的執行部分。
三、Docker作用
1、加速本地開發和構建流程,使其更加高效、更加輕量化。本地開發人員可以建立、執行並分享Dokcer容器。容器可以在開發環境中構建,然後輕鬆地提交到測試環境中,並最終進入生產環境。
2、能夠讓獨立服務或應用程式在不同的環境中,得到相同的執行結果。這一點在面向服務的架構和重度依賴微型服務的部署中尤其實用。
3、用Docker建立隔離的環境進行測試。例如,用Jenkins這樣的持續整合工具啟動一個用於測試的容器。
4、構建一個多使用者的平臺即服務基礎設施。Docker能夠作為雲端計算的多租戶容器,使用Docker能容易為每個租戶建立執行應該多個例項,這得益其靈活的快速環境以及有效diff命令。
5、高效能、超大規模的宿主機部署。
6、Docker通過建立程序的容器,不必重新啟動作業系統,幾秒內能關閉,你可以在資料中心建立或銷燬資源,不用擔心額外消耗。典型的資料中心利用率是30%,通過更積極的資源分配,以低成本方式對一個新的例項實現一個更聚合的資源分配,我們很容易超過這個利用率,大大提高資料中心的利用效率。
四、名稱空間
名稱空間是Linux核心為實現容器虛擬化而引入的特性。每個容器都有自己的名稱空間,這保證了容器之間的互不影響。利用該特性,容器實現了在核心、檔案系統、網路、PID、UID、IPC、記憶體、硬碟、CPU等資源的隔離,而不再是應用程序直接共享的狀態。
1、程序名稱空間
Linux通過名稱空間管理程序號,同一程序在不同的名稱空間中的程序號是不同的。程序名稱空間是一個父子關係的結構,子空間的程序可看到父程序的ID。
2、網路名稱空間
通過網路名稱空間可以實現網路的完全隔離。一個網路名稱空間為程序提供了一個完全獨立的網路協議棧的檢視。包括網路裝置介面、IPv4和IPv6協議棧、IP路由表、防火牆規則、sockets等。Docker可採用虛擬網路裝置(Virtual Network Device)的方式將不同名稱空間的網路裝置連線在一起。預設情況下,容器的虛擬網絡卡將與宿主機的docker0網橋連線在一起。
3、IPC名稱空間
程序間互動(Interprocess Communication - IPC)的資訊包括訊號量、訊息佇列、共享記憶體等。同一IPC名稱空間的程序可以互動;否則不行。PID名稱空間和IPC名稱空間可以組合使用。
4、掛載名稱空間
掛載名稱空間可以將一個程序放到一個特定的目錄執行,且允許不同名稱空間的程序看到的檔案結構不同,將各個名稱空間中的程序看到的檔案目錄隔離。
5、UTS名稱空間
UTS(UNIX Time-sharing System)名稱空間可以另每個容器擁有獨立的主機名和域名,從而虛擬出一個擁有獨立主機名和獨立網路空間的環境。預設情況下,Docker容器的主機名就是容器的ID。
6、使用者名稱空間
每個容器擁有不同的使用者和組ID,容器可以使用自身內部的特定使用者執行程式,而非宿主機系統上存在的使用者。每個容器內部都可以有root賬號,且跟宿主機不在同一名稱空間。