産品特色
編輯推薦
國內首部Docker源碼分析著作
從源碼角度全麵解析Docker設計與實現
填補Docker理論與實踐之間的鴻溝
一本引導讀者深入瞭解Docker實現原理的技術普及讀物,主要目標是通過對Docker架構和源代碼的詳細講解和解剖,幫助讀者對Docker的底層實現有一個全麵的理解
作者通過大量的流程圖和代碼片段對Docker的架構、Docker的重要模塊,特彆是對Swarm、Machine和Compose這三個模塊進行瞭詳細介紹和深度剖析
無論是Docker的使用者還是開發者,通過閱讀此書都可以對Docker有更深刻的理解,能夠更好的使用或者開發Docker
內容簡介
《Docker源碼分析》是一本引導讀者深入瞭解Docker實現原理的技術普及讀物,主要目標是通過對Docker架構和源代碼的詳細講解和解剖,幫助讀者對Docker的底層實現有一個全麵的理解。本書的內容主要集中於三部分:Docker的架構、Docker的模塊,以及Docker的三駕馬車Swarm、Machine和Compose。
一部分(第1章)主要從宏觀的角度和讀者一起領略Docker的架構設計,並初步介紹架構中各模塊的職責。
第二部分(第2~14章)是本書的主體部分,主要針對Docker中多個重要的模塊進行具體深入分析,包括DockerClient、DockerDaemon、DockerServer、Docker網絡、Docker鏡像、Docker容器等。讀者可以發現,Docker的模塊之間耦閤度非常低,很適閤循序漸進,層層深入。第2~8章主要從Docker軟件的架構入手,勾勒骨架;第9~11章集中於Docker鏡像技術,夯實基礎;第12~14章則進一步分析Docker容器的始末,闡述本質。
第三部分(第15~17章)介紹Docker生態三駕馬車—Swarm、Machine和Compose。Docker擁有強大的單機能力,三駕馬車可以很好地補充Docker的跨主機能力以及部署能力。讀者可以通過這幾章感受Docker生態中其他功能強大的軟件。
作者簡介
孫宏亮,碩士,浙江大學畢業,現為DaoCloud軟件工程師,主要負責企業級容器雲平颱的研發工作。數年來一直從事雲計算、PaaS領域的研究與實踐,是國內較早一批接觸Docker的先行者,同時也是Docker技術的推廣者。
精彩書評
★像榖歌一樣部署自己的應用,這是很多軟件工程師的夢想。Docker的目標是圓很多人的夢。自從InfoQ推齣Docker係列文章,作為操作係統課程教師的我一直在學習並關注Docker的茁壯成長。
當我發現這上麵刊登的“Docker源碼分析”係列文章的作者居然是我們課程組的研究生助教孫宏亮時,驚喜之情溢於言錶。宏亮對Docker的理解十分深刻,他本人是Docker的積極擁護者、倡導者和貢獻者。他在研究生畢業以後投身到瞭創業公司DaoCloud,去為Docker的夢想開創美好的未來。
最近,我又欣喜地發現,這係列文章以及後續章節即將正式齣版成書,有機會同更多的Docker用戶、開發者、學習者見麵。本書通過分析解讀Docker源碼,讓讀者瞭解 Docker的內部結構和實現,以便更好地使用Docker。該書的內容組織深入淺齣,錶述準確到位, 有大量流程圖和代碼片段幫助讀者理解Docker各個功能模塊的流程,是學習Docker開源係統的良師益友。
——壽黎旦,浙江大學計算機學院教授 ★近年來,Docker迅速風靡瞭雲計算世界,但是專門針對Docker的技術實現進行深入分析的文章卻相對較少。這一方麵由於Docker技術變化很快,源碼分析很快會跟不上版本發展;另一方麵,對源代碼的解析,需要對整個Docker設計具備全局的視角,纔能深入淺齣地找到源碼中的脈絡。
宏亮的這本《Docker源碼分析》,恰如其時的齣現,彌補瞭這個空白,對於希望參與到Docker社區、參與代碼貢獻或構建自己的Docker應用環境的讀者來說,應是一本案頭必備書籍。
——王興宇,《Linux中國》創始人 ★在崇尚源碼至上的工程師文化裏,文檔介紹、發布會材料都是蒼白的,唯有研讀源碼,纔能深刻理解軟件背後的原理。與所有其他軟件一樣,讀源碼並不是學習Docker很快的途徑,但是如果有人通讀源碼後給齣瞭詳細分析,你就可以輕鬆地站在巨人的肩膀上。
很高興看到國內這麼快就齣版源碼分析的書籍。對於所有想在Docker方麵進階和想晉升為高端用戶的讀者,都值得閱讀本書,也希望通過《Docker源碼分析》一書,可以誕生更多的社區貢獻者,共同推動Docker的發展。
——黃強,華為Docker Committer
★值得自豪的是,就在Docker蓬勃發展之際,一本詳盡剖析Docker源碼的著作齣自國人之手。
本書在每章宏觀的流程梳理背後都伴隨有更加細緻深入的源碼分析。無論讀者是隻想瞭解使用Docker,還是抱著深入理解Docker並參與社區開發、二次開發的心態,本書都值得一讀。
——鬍科平,華為Docker Committer ★這本書從源碼的角度對Docker的實現原理進行瞭深入的探討和細膩的講解,將當前熱門的容器技術的背後機理講解得深入淺齣明白透徹。無論是Docker的用戶還是開發者,通過閱讀本書都可以對Docker有更深刻的理解,能夠更好地使用或者開發Docker。
——雷繼棠,華為Docker Committer ★Docker已經是一個成長2年時間的雲計算技術,它正在以驚人的速度在全球範圍內擴張自己的“疆土”。我作為Docker中國區的開發者,非常希望能看到有一本書詳細地告訴我,Docker的每一個細節是如何實現的。所以當我在InfoQ上看到宏亮的“Docker源碼分析”專欄時眼前一亮。今天,它終於匯編成書擺在你我的眼前。我希望你能在這本書上學到更多Docker技術的精髓思想,在實戰Docker技術時可以運用自如!
——肖德時,數人科技CTO ★我傢裏的書櫃中至今仍然保留著一本《Linux內核完全注釋》,它伴隨我很長一段時間,使我受益匪淺。10年之後,當我拿到宏亮的《Docker源代碼分析》草稿,昨日又重現。這本書無論是對學習Docker,還是掌握Go語言,都是非常好的一手資源。雷鋒不常有,大傢要支持!
——趙鵬,VisualOps創始人 目錄
贊譽
序
前言
第1章 Docker架構
1.1 引言
1.2 Docker總架構圖
1.3 Docker各模塊功能與實現分析
1.3.1 Docker Client
1.3.2 Docker Daemon
1.3.3 Docker Registry
1.3.4 Graph
1.3.5 Driver
1.3.6 libcontainer
1.3.7 Docker Container
1.4 Docker運行案例分析
1.4.1 docker pull
1.4.2 docker run
1.5 總結
第2章 Docker Client創建與命令執行
2.1 引言
2.2 創建Docker Client
2.2.1 Docker命令的flag參數解析
2.2.2 處理flag信息並收集Docker Client的配置信息
2.2.3 如何創建Docker Client
2.3 Docker命令執行
2.3.1 Docker Client解析請求命令
2.3.2 Docker Client執行請求命令
2.4 總結
第3章 啓動Docker Daemon
3.1 引言
3.2 Docker Daemon的啓動流程
3.3 mainDaemon()的具體實現
3.3.1 配置初始化
3.3.2 flag參數檢查
3.3.3 創建engine對象
3.3.4 設置engine的信號捕獲
3.3.5 加載builtins
3.3.6 使用goroutine加載daemon
對象並運行
3.3.7 打印Docker版本及驅動信息
3.3.8 serveapi的創建與運行
3.4 總結
第4章 Docker Daemon之NewDaemon實現
4.1 引言
4.2 NewDaemon具體實現
4.3 應用配置信息
4.3.1 配置Docker容器的MTU
4.3.2 檢測網橋配置信息
4.3.3 查驗容器間的通信配置
4.3.4 處理網絡功能配置
4.3.5 處理PID文件配置
4.4 檢測係統支持及用戶權限
4.5 配置工作路徑
4.6 加載並配置graphdriver
4.6.1 創建graphdriver
4.6.2 驗證btrfs與SELinux的兼容性
4.6.3 創建容器倉庫目錄
4.6.4 遷移容器至aufs類型
4.6.5 創建鏡像graph
4.6.6 創建volumesdriver以及volumes graph
4.6.7 創建TagStore
4.7 配置Docker Daemon網絡環境
4.7.1 創建Docker網絡設備
4.7.2 啓用iptables功能
4.7.3 啓用係統數據包轉發功能
4.7.4 創建DOCKER鏈
4.7.5 注冊處理方法至Engine
4.8 創建graphdb並初始化
4.9 創建execdriver
4.10 創建daemon實例
4.11 檢測DNS配置
4.12 啓動時加載已有Docker容器
4.13 設置shutdown的處理方法
4.14 返迴daemon對象實例
4.15 總結
第5章 Docker Server的創建
5.1 引言
5.2 Docker Server創建流程
5.2.1 創建名為"serveapi"的Job
5.2.2 配置Job環境變量
5.2.3 運行Job
5.3 ServeApi運行流程
5.4 ListenAndServe實現
5.4.1 創建router路由實例
5.4.2 創建listener監聽實例
5.4.3 創建http.Server
5.4.4 啓動API服務
5.5 總結
第6章 Docker Daemon網絡
6.1 引言
6.2 Docker Daemon網絡介紹
6.3 Docker Daemon網絡配置接口
6.4 Docker Daemon網絡初始化
6.4.1 啓動Docker Daemon傳遞flag參數
6.4.2 解析網絡flag參數
6.4.3 預處理flag參數
6.4.4 確定Docker網絡模式
6.5 創建Docker網橋
6.5.1 提取環境變量
6.5.2 確定Docker網橋設備名
6.5.3 查找bridgeIface網橋設備
6.5.4 bridgeIface已創建
6.5.5 bridgeIface未創建
6.5.6 獲取網橋設備的網絡地址
6.5.7 配置Docker Daemon的iptables
6.5.8 配置網絡設備間數據報轉發功能
6.5.9 注冊網絡Handler
6.6 總結
第7章 Docker容器網絡
7.1 引言
7.2 Docker容器網絡模式
7.2.1 bridge橋接模式
7.2.2 host模式
7.2.3 other container模式
7.2.4 none模式
7.3 Docker Client配置容器網絡模式
7.3.1 使用Docker Client
7.3.2 runconfig包解析
7.3.3 CmdRun執行
7.4 Docker Daemon創建容器網絡流程
7.4.1 創建容器之網絡配置
7.4.2 啓動容器之網絡配置
7.5 execdriver網絡執行流程
7.5.1 創建libcontainer的Config對象
7.5.2 調用libcontainer的namespaces啓動容器
7.6 libcontainer實現內核態網絡配置
7.6.1 創建exec.Cmd
7.6.2 啓動exec.Cmd創建進程
7.6.3 為容器進程初始化網絡環境
7.7 總結
第8章 Docker鏡像
8.1 引言
8.2 Docker鏡像介紹
8.3 rootfs
8.4 Union Mount
8.5 image
8.6 layer
8.7 總結
第9章 Docker鏡像下載
9.1 引言
9.2 Docker鏡像下載流程
9.3 Docker Client
9.3.1 解析鏡像參數
9.3.2 配置認證信息
9.3.3 發送API請求
9.4 Docker Server
9.4.1 解析請求參數
9.4.2 創建並配置Job
9.4.3 觸發執行Job
9.5 Docker Daemon
9.5.1 解析Job參數
9.5.2 創建session對象
9.5.3 執行鏡像下載
9.6 總結
第10章 Docker鏡像存儲
10.1 引言
10.2 鏡像注冊
10.3 驗證鏡像ID
10.4 創建鏡像路徑
10.4.1 創建mnt、diff和layers子目錄
10.4.2 掛載祖先鏡像並返迴根目錄
10.5 存儲鏡像內容
10.5.1 解壓鏡像內容
10.5.2 收集鏡像大小並記錄
10.5.3 存儲jsonData信息
10.6 注冊鏡像ID
10.7 總結
第11章 docker build實現
11.1 引言
11.2 docker build執行流程
11.2.1 Docker Client與docker build
11.2.2 Docker Server與docker build
11.2.3 Docker Daemon與docker build
11.3 Dockerfile命令解析流程
11.4 Dockerfile命令分析
11.4.1 FROM命令
11.4.2 RUN命令
11.4.3 ENV命令
11.5 總結
第12章 Docker容器創建
12.1 引言
12.2 Docker容器運行流程
12.3 Docker Daemon創建容器對象
12.3.1 LookupImage
12.3.2 CheckDepth
12.3.3 mergeAndVerifyConfig
12.3.4 newContainer
12.3.5 createRootfs
12.3.6 ToDisk
12.3.7 Register
12.4 Docker Daemon啓動容器
12.4.1 setupContainerDns
12.4.2 Mount
12.4.3 initializeNetworking
12.4.4 verifyDaemonSetting
12.4.5 prepareVolumesForContainer
12.4.6 setupLinkedContainers
12.4.7 setupWorkingDirectory
12.4.8 createDaemonEnvironment
12.4.9 populateCommand
12.4.10 setupMountsForContainer
12.4.11 waitForStart
12.5 總結
第13章 dockerinit啓動
13.1 引言
13.2 dockerinit介紹
13.2.1 dockerinit初始化內容
13.2.2 dockerinit與Docker Daemon
13.3 dockerinit執行入口
13.3.1 createCommand分析
13.3.2 namespace.exec
13.4 dockerinit運行
13.4.1 reexec.Init()的分析
13.4.2 dockerinit的執行流程
13.5 libcontainer的運行
13.5.1 Docker Daemon設置cgroups參數
13.5.2 Docker Daemon創建網絡棧資源
13.5.3 dockerinit配置網絡棧
13.5.4 dockerinit初始化mount namespace
13.5.5 dockerinit完成namespace配置
13.5.6 dockerinit執行用戶命令Entrypoint
13.6 總結
第14章 libcontainer介紹
14.1 引言
14.2 Docker、libcontainer以及LXC的關係
14.3 libcontainer模塊分析
14.3.1 namespace
14.3.2 cgroup
14.3.3 網絡
14.3.4 掛載
14.3.5 設備
14.3.6 nsinit
14.3.7 其他模塊
14.4 總結
第15章 Swarm架構設計與實現
15.1 引言
15.2 Swarm架構
15.2.1 Swarm Node
15.2.2 Docker Node
15.2.3 node discovery
15.2.4 scheduler
15.3 Swarm命令
15.3.1 swarm create
15.3.2 swarm manage
15.3.3 swarm join
15.3.4 swarm list
15.4 總結
第16章 Machine架構設計與實現
16.1 引言
16.2 Machine架構
16.2.1 Machine
16.2.2 Store
16.2.3 Host
16.2.4 Driver
16.2.5 Provisioner
16.2.6 Machine運行流程
16.3 Machine與Swarm的結閤
16.4 總結
第17章 Compose架構設計與實現
17.1 引言
17.2 Compose介紹
17.3 Compose架構
17.4 Compose評價
17.4.1 Compose單機能力
17.4.2 Compose跨節點能力
17.4.3 Compose與Swarm
17.5 總結
前言/序言
Docker是什麼
Docker從2013年誕生,短短兩年時間就在全球IT技術圈內迅速走紅,實乃技術圈內不可忽視
Docker源碼分析 下載 mobi epub pdf txt 電子書 格式