More Related Content Similar to Linux Container Introduction (20) Linux Container Introduction2. 追求更高效的雲端服務架構
2
● 傳統 VM 獨占硬體資源,無法即時調度資源
● 雲端服務逐漸走向 Micro Service 架構,需要快速「啟動/關閉/升級」
● 軟體工程導入 DevOps,提升開發、測試、佈署、維運之效率
VM
* 使用獨立 OS隔離
效果最佳
* 獨占硬體資源
* 啟動速度慢
* 執行速度略低於
原生
Container
* 共用核心實現隔
離的沙箱環境
* 硬體資源共用
* 秒級啟動
* 執行速度接近原
生
VM 與 Container 之差異
3. 基於 Linux Kernel 的容器技術 LxC
3
Linux Container 又稱為 LxC,主要由 cgroups 與 namespace 兩個核心特性所
實現
● cgroups 早期由 Google 工程師開發的 Process Containers 專案,後來併入
Linux Kernel 2.6.24,正式以 cgroups 命名
● namespace 從 Linux Kernel 2.4.19 開始發展功能,一直到 3.8 才完善了目前
Container 使用的所有功能
4. Linux 容器技術的演進
L1: 透過 Linux Kernel 實現了沙箱
隔離機制 LxC
L2: 由於直接操作 LxC 太麻煩了,
所以 Docker 封裝 LxC,提供我們更
方便管理 Container 的工具。
L3: 但由於 Container 太好用了,所
以又需要 Container Manager 來協助
管理與調度大規模容器應用。
4
Kubernetes, Docker Swarm, Cloud Foundry…
Linux Container (LxC)
Linux Kernel (Namespace, CGroups)
Docker
(Docker Compose)
5. Container in Micro Service & DevOps
DevOps
● 開發:OS 無關的開發環境建置,只要有 Docker 就可以開發與建置
● 測試:透過 Jenkins / GitLab PipeLine 啟動乾淨的 Sandbox 測試環境,讓測試過
程更穩定
● 佈署:以往使用 Package 佈署需要數小時,改用 Container 佈署縮短為數分鐘
● 維運:透過 Docker 實現 Cluster 架構與灰度升級
Micro Service
透過 Container Manager 管理伺服器群集中的 Service,實現自動調度、容錯、高
可用、分散
5
6. 技術內容/分析 – 什麼是 Sandbox 沙箱?
6
提供一個完全隔離的程式執行環境,控制交互影響範圍與安全性,沙箱
通常具備以下幾種特性:
● 快速啟動與銷毀
● 執行結果不影響宿主環境
● 不同沙箱彼此之間不交互影響
沙箱是一種設計模式,許多直譯程式執行環境都是透過 Runtime, Container 等
等不同的 Sandbox 變形來達成目的,像是我們的瀏覽器、Java VM 等等其實都
是一樣的概念...
7. ● Linux Kernel 透過 Namespace 與 Control Group 實現隔離沙箱機制
○ Namespace 負責邏輯資源的隔離
■ UTS:隔離 hostname
■ PID:透過映射隔離 Process ID
■ IPC:隔離 Inter-Process Communication
■ mnt:檔案磁碟掛載 (chroot)
■ net:網路隔離
■ user:隔離 User ID 映射關係
○ Control Group 負責 Process 實體資源的控制與分配
■ CPU, Memory, IO
○ Union Filesystem (屬於 Docker 範疇)
■ Image 實現鏡像檔案系統 (AUFS)
技術內容/分析 – 透過 Linux Container 機制實現沙箱
7
8. 技術內容/分析 – Docker Process 隔離機制介紹
8
Container 中的
Process 完全與宿主
Host 隔離,Process 透
過 PID 映射機制隔離
在沙箱中
9. 技術內容/分析 – Dockerize 的經驗與挑戰
9
● 將既有系統服務 Dockerize,走向 Micro Service 架構
● 系統服務間耦合性太高,不易拆解 (一個容器一個行程)
● Micro Service 架構實現 (Stateless, Distributed)
● 基礎自動化工具建立
● 進階的 Docker Life
○ 建置私有鏡像站
○ 導入 DevOps
○ 更高度的自動化
○ Docker-in-Docker