1. 程式人生 > >季錫強:Docker在京東的應用與實踐

季錫強:Docker在京東的應用與實踐

Docker在京東的應用與實踐,季錫強,微博:@龍芯o。

Agenda

•Docker系統整體架構
•Namespace
•CGroup
•Device Mapper
•Start/Stop Container
•Commit Image
•Volume

一、Docker系統整體架構

二、Namespace
•提供程序級別的資源隔離
•為程序提供不同的名稱空間檢視
•與虛擬機器不同
Namespace概念及當前支援的種類
•ipc (訊號量、訊息佇列和共享記憶體)
•mnt (掛載點)
•pid (程序編號)
•net (網路裝置、網路棧等)
•uts (主機名與域名)
•user (使用者和使用者組)
Namespace使用介面

•建立新程序及namespace
•加入當前程序到新建namespace中
•改變當前程序的namespace

三、CGroup
•提供程序的資源管理功能
•資源管理主要涉及記憶體,CPU,IO等
•不依賴於Namespace,可單獨使用
•管理功能通過VFS介面暴露
•CGroups提供通用框架,各子系統負責實現
CGroups IO子系統

•blkio — 塊裝置I/O限制
•cpu — CPU限制
•cpuacct — 自動生成CPU使用報告
•cpuset — 限定所使用的核
•memory — 限制記憶體
•devices—控制任務訪問裝置
•freezer— 掛起/恢復任務

四、Device Mapper
•DM框架為上層應用提供了豐富的裝置對映及IO策略方面的支援
•Docker儲存端實現之一使用DM - thin provision
•上層通過dmsetup工具或libdevmapper庫使用
Docker storage driver
•Docker支援Aufs,Btrfs,DM等
•由於DM基於裝置層,對上層檔案系統layer Diff無 法直接支援,Docker手工比對檔案實現
•啟動docker如果未指定stroage driver,依據os依次 選擇aufs、btrfs、devicemapper
DM thin-provision
•允許多個虛擬裝置儲存在相同的資料卷中
•支援任意深度的快照
•支援元資料儲存到單獨的裝置上
DM-thin provision example
•dd if=/dev/zero of=metadata bs=1024k
count=4096
•dd if=/dev/zero of=data bs=1024k count=20480
•losetup /dev/loop7 metadata
•losetup /dev/loop6 data
•dmsetup create pool --table "0 20971520 thin- pool /dev/loop7 /dev/loop6 128 0"
•dmsetup message /dev/mapper/pool 0
"create_thin 0"
•dmsetup create thin --table "0 2097152 thin / dev/mapper/pool 0"
•mkfs.ext4 /dev/mapper/thin
•mount /dev/mapper/thin /export
Docker storage driver—DM thin provision
•data和metadata需要兩個塊裝置
•truncate生成檔案,loop裝置
•dm.loopdatasize=100G
•dm.basesize=10G
•dm.datadev指定pool使用的裝置
•dm.metadatadev指定metadata使用的裝置
•dd if=/dev/zero of=$metadata_dev bs=4096 count=1

五、Start Container/ Stop Container
Start Docker& Start Container
Start/Stop  Container注意點
•docker退出時會依次stop各個container
•Start container時mount相關裝置
•Stop container 時,monitor會做清理工作
•docker異常停止時,各個container對應的 namespace等相關資訊依然存在
•docker啟動時候會將之前的container stop,但 umount失敗,start container會失敗

六、Commit Image

七、Volume
•Docker Volume 主要使用mount –bind操作來實現
•Commit 操作是不會將Volume新增到新映象中
•Volume-from 實現原理

八、小結
•當前Namespace功能仍不完善,需要更多的隔離
•Docker主要用到CGroup的一部分子系統
•Docker儲存端仍需做一些選擇或工作
•選擇DM thin-provision時需要注意data及metadata 的設定
•docker start/stop之間的互動及掃尾工作
•機器磁碟I/O很高時,會導致commit 操作相當耗時