1. 程式人生 > >01_Docker概念簡介、元件介紹、使用場景和名稱空間

01_Docker概念簡介、元件介紹、使用場景和名稱空間

一、簡介

Docker是一個能夠把開發的應用程式自動部署到容器的開源引擎Docker在虛擬化的容器執行環境中增加了一個應用程式部署引擎。該引擎的目標就是提供一個輕量、快速的環境,能夠執行開發者的程式,並方便高效地將程式從開發者的筆記本部署到測試環境,然後再部署到生產環境。Docker極其簡潔,它所需的全部環境只是一臺僅僅安裝了相容版本的Linux核心和二進位制檔案最小限的宿主機

大多數Docker容器只需不到一秒鐘即可啟動,由於去除了管理程式的開銷,Docker容器擁有很高的效能,同時同一臺宿主機中也可以執行更多的容器,使使用者可以儘可能充分地利用系統資源。

二、Docker元件

Docker

客戶端和伺服器、Docker映象、RegistryDocker容器

1、Docker客戶端和伺服器

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

 

2、Docker映象

Docker映象是一個只讀的模板。例如,一個映象可以包含安裝了Apache Web務應用的Ubuntu操作系

像可以用來Docker容器。Docker提供了構建新像或升原有映象的較為便利的方式,或者你也可以下載別人已經建立好的映象。Docker映象是Docker的構建元件。

映象是構建Docker世界的基石。使用者基於映象來執行自己的容器。映象也是Docker生命週期中的構建部分。映象是基於聯合檔案系統的一種層式的結構。由一系列指令一步一步構建出來。例如:新增一個檔案,執行一個命令,開啟一個埠。

也可以把映象當做容器的原始碼。映象體積很小,非常便攜,易於分享、儲存和更新。

3、Registry

Docker 倉庫用來儲存映象,可以理解為程式碼控制中的程式碼倉庫Docker

倉庫分為公有和私有。公有的 Docker 倉庫名字是 Docker HubDocker Hub 提供了龐大的映象集合供使用。這些映象可以是自己建立,或者在別人的映象基礎上建立。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核心為實現容器虛擬化而引入的特性。每個容器都有自己的名稱空間,這保證了容器之間的互不影響。利用該特性,容器實現了在核心、檔案系統、網路、PIDUIDIPC、記憶體、硬碟、CPU等資源的隔離,而不再是應用程序直接共享的狀態。

1、程序名稱空間
Linux
通過名稱空間管理程序號,同一程序在不同的名稱空間中的程序號是不同的。程序名稱空間是一個父子關係的結構,子空間的程序可看到父程序的ID

2、網路名稱空間
通過網路名稱空間可以實現網路的完全隔離。一個網路名稱空間為程序提供了一個完全獨立的網路協議棧的檢視。包括網路裝置介面、IPv4IPv6協議棧、IP路由表、防火牆規則、sockets等。Docker可採用虛擬網路裝置(Virtual Network Device)的方式將不同名稱空間的網路裝置連線在一起。預設情況下,容器的虛擬網絡卡將與宿主機的docker0網橋連線在一起。

3IPC名稱空間
程序間互動(Interprocess Communication - IPC)的資訊包括訊號量、訊息佇列、共享記憶體等。同一IPC名稱空間的程序可以互動;否則不行。PID名稱空間和IPC名稱空間可以組合使用。

4、掛載名稱空間
掛載名稱空間可以將一個程序放到一個特定的目錄執行,且允許不同名稱空間的程序看到的檔案結構不同,將各個名稱空間中的程序看到的檔案目錄隔離。

5UTS名稱空間
UTS(UNIX Time-sharing System)
名稱空間可以另每個容器擁有獨立的主機名和域名,從而虛擬出一個擁有獨立主機名和獨立網路空間的環境。預設情況下,Docker容器的主機名就是容器的ID

6、使用者名稱空間
每個容器擁有不同的使用者和組ID,容器可以使用自身內部的特定使用者執行程式,而非宿主機系統上存在的使用者。每個容器內部都可以有root賬號,且跟宿主機不在同一名稱空間。