Linux Container
Introduction
SJ Chou
sj@toright.com
https://blog.toright.com
追求更高效的雲端服務架構
2
● 傳統 VM 獨占硬體資源,無法即時調度資源
● 雲端服務逐漸走向 Micro Service 架構,需要快速「啟動/關閉/升級」
● 軟體工程導入 DevOps,提升開發、測試、佈署、維運之效率
VM
* 使用獨立 OS隔離
效果最佳
* 獨占硬體資源
* 啟動速度慢
* 執行速度略低於
原生
Container
* 共用核心實現隔
離的沙箱環境
* 硬體資源共用
* 秒級啟動
* 執行速度接近原
生
VM 與 Container 之差異
基於 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 使用的所有功能
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)
Container in Micro Service & DevOps
DevOps
● 開發:OS 無關的開發環境建置,只要有 Docker 就可以開發與建置
● 測試:透過 Jenkins / GitLab PipeLine 啟動乾淨的 Sandbox 測試環境,讓測試過
程更穩定
● 佈署:以往使用 Package 佈署需要數小時,改用 Container 佈署縮短為數分鐘
● 維運:透過 Docker 實現 Cluster 架構與灰度升級
Micro Service
透過 Container Manager 管理伺服器群集中的 Service,實現自動調度、容錯、高
可用、分散
5
技術內容/分析 – 什麼是 Sandbox 沙箱?
6
提供一個完全隔離的程式執行環境,控制交互影響範圍與安全性,沙箱
通常具備以下幾種特性:
● 快速啟動與銷毀
● 執行結果不影響宿主環境
● 不同沙箱彼此之間不交互影響
沙箱是一種設計模式,許多直譯程式執行環境都是透過 Runtime, Container 等
等不同的 Sandbox 變形來達成目的,像是我們的瀏覽器、Java VM 等等其實都
是一樣的概念...
● 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
技術內容/分析 – Docker Process 隔離機制介紹
8
Container 中的
Process 完全與宿主
Host 隔離,Process 透
過 PID 映射機制隔離
在沙箱中
技術內容/分析 – Dockerize 的經驗與挑戰
9
● 將既有系統服務 Dockerize,走向 Micro Service 架構
● 系統服務間耦合性太高,不易拆解 (一個容器一個行程)
● Micro Service 架構實現 (Stateless, Distributed)
● 基礎自動化工具建立
● 進階的 Docker Life
○ 建置私有鏡像站
○ 導入 DevOps
○ 更高度的自動化
○ Docker-in-Docker
Thanks
sj@toright.com
https://blog.toright.com

Linux Container Introduction

  • 1.
  • 2.
    追求更高效的雲端服務架構 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 MicroService & 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.
    技術內容/分析 – DockerProcess 隔離機制介紹 8 Container 中的 Process 完全與宿主 Host 隔離,Process 透 過 PID 映射機制隔離 在沙箱中
  • 9.
    技術內容/分析 – Dockerize的經驗與挑戰 9 ● 將既有系統服務 Dockerize,走向 Micro Service 架構 ● 系統服務間耦合性太高,不易拆解 (一個容器一個行程) ● Micro Service 架構實現 (Stateless, Distributed) ● 基礎自動化工具建立 ● 進階的 Docker Life ○ 建置私有鏡像站 ○ 導入 DevOps ○ 更高度的自動化 ○ Docker-in-Docker
  • 10.