編輯推薦
    快速掌握Docker容器,打造麵嚮開發者與運營者的部署係統,輕鬆應對技術衝擊。
應用部署係統,實現“一次構建,處處運行”。
構建無虛擬機負荷的輕量級虛擬環境,不受約束實現快速處理。
      內容簡介
   本書從Docker基礎理論齣發,更側重實際業務中的技術與應用。重點在於後半部分在、Google Colud Platform等平颱上的使用方法,以及Rails與Django應用程序構建方法等,都是能夠直接運用於實操的技術點。本書是利用Docker構建開發係統、測試係統、操作係統的傑齣指南,非常適閤一綫開發人員。
     作者簡介
   李在弘
目前管理PYRASIS.COM個人網站,編寫並發布瞭多種技術文檔。曾在NC Software參與開發遊戲《天堂永恒》(Lineage Eternal),並在Ntreev開發移動遊戲服務器,還曾負責FFS File System Driver for Windows開源項目。近期正在研究Cocos2d-x移動遊戲引擎的Tizen應用,現在主要關注操作係統內核、文件係統、軟件開發自動化、遊戲引擎、雲平颱、分布式處理係統。夢想打造個性化的全自動傢居,以及設立開源基金會。 
主要著作 《Windows項目必讀實用工具:Subversion, Trac, CruiseControl.NET》  
     目錄
   目錄   
第1 章 Docker 1  
1.1 虛擬機與Docker 3  
1.1.1 虛擬機 4  
1.1.2 Docker 5  
1.1.3 Linux 容器 6  
1.2 Docker 鏡像與容器 8  
第2 章 安裝Docker 11  
2.1 Linux 11  
2.1.1 自動安裝腳本 11  
2.1.2 Ubuntu 11  
2.1.3 RedHat Enterprise Linux、CentOS 12  
2.1.4 使用最新二進製文件 12  
2.2 Mac OS X 13  
2.3 Windows 16  
第3 章 使用Docker 23  
3.1 使用search 命令搜索鏡像 23  
3.2 使用pull 命令下載鏡像 25  
3.3 使用images 命令列齣鏡像目錄 25  
3.4 使用run 命令創建容器 25  
3.5 使用ps 命令查看容器列錶 26  
3.6 使用start 命令啓動容器 26  
3.7 使用restart 命令重啓容器 27  
3.8 使用attach 命令連接容器 27  
3.9 使用exec 命令從外部運行容器內的命令 27  
3.10 使用stop 命令終止容器 28  
3.11 使用rm 命令刪除容器 28  
3.12 使用rmi 命令刪除鏡像 29  
第4 章 創建Docker 鏡像 31  
4.1 熟悉Bash 31  
目錄  
4.2 編寫Dockerfile 36  
4.3 使用build 命令創建鏡像 37  
第5 章 查看Docker 39  
5.1 使用history 命令查看鏡像曆史 39  
5.2 使用cp 命令復製文件 40  
5.3 使用commit 命令從容器的修改中創建鏡像 40  
5.4 使用diff 命令檢查容器文件的修改 40  
5.5 使用inspect 命令查看詳細信息 41  
第6 章 靈活使用Docker 43  
6.1 搭建Docker 私有倉庫 43  
6.1.1 存儲鏡像數據到本地 43  
6.1.2 使用push 命令上傳鏡像 44  
6.1.3 存儲鏡像數據到Amazon S3 45  
6.1.4 使用默認認證 46  
6.2 連接Docker 的容器 52  
6.3 連接到其他服務器的Docker 容器 53  
6.4 使用Docker 數據捲 56  
6.5 使用Docker 數據捲容器 59  
6.6 創建Docker 基礎鏡像 60  
6.6.1 創建Ubuntu 基礎鏡像 60  
6.6.2 創建CentOS 基礎鏡像 61  
6.6.3 創建空基礎鏡像 62  
6.7 在Docker 內運行Docker 64  
第7 章 詳細瞭解Dockerfile 67  
7.1 .dockerignore 68  
7.2 FROM 68  
7.3 MAINTAINER 69  
7.4 RUN 69  
7.5 CMD 70  
7.6 ENTRYPOINT 71  
7.7 EXPOSE 73  
7.8 ENV 73  
7.9 ADD 74  
7.10 COPY 76  
7.11 VOLUME 77  
7.12 USER 77  
7.13 WORKDIR 78  
7.14 ONBUILD 79  
第8 章 使用Docker 部署應用程序 81  
8.1 嚮一颱服務器部署應用程序 81  
8.1.1 在開發者PC 安裝Git 並創建倉庫 82  
8.1.2 在開發者PC 中使用Node.js 編寫Web 服務器 83  
8.1.3 在開發者PC 中編寫Dockerfile 文件 84  
8.1.4 在開發者PC 中生成SSH 密鑰 85  
8.1.5 在服務器端安裝Git 並創建倉庫 86  
8.1.6 在服務器中安裝Docker 87  
8.1.7 在服務器中安裝SSH 密鑰 88  
8.1.8 在服務器中安裝Git Hook 89  
8.1.9 在開發者PC 中推送源代碼 90  
8.2 嚮多颱服務器部署應用程序 91  
8.2.1 在開發者PC 安裝Git 並創建倉庫 92  
8.2.2 在開發者PC 中使用Node.js 編寫Web 服務器 93  
8.2.3 在開發者PC 中編寫Dockerfile 文件 94  
8.2.4 在開發者PC 中生成SSH 密鑰 95  
8.2.5 在部署服務器安裝Git 並創建倉庫 96  
8.2.6 在部署服務器中生成SSH 密鑰 97  
8.2.7 在部署服務器中安裝Docker 98  
8.2.8 在部署服務器中安裝Docker 注冊服務器 99  
8.2.9 在部署服務器中安裝SSH 密鑰 100  
8.2.10 在部署服務器中安裝Git Hook 101  
8.2.11 在應用程序服務器中安裝Docker 103  
8.2.12 在應用程序服務器中安裝SSH 密鑰 104  
8.2.13 在開發者PC 中推送源代碼 105  
第9 章 Docker 監控 107  
9.1 編寫監控服務器Dockerfile 108  
9.2 編寫應用程序服務器Dockerfile 111  
9.3 在Web 瀏覽器中查看圖錶 114  
第10 章 在Amazon Web Services 中使用Docker 117  
10.1 在Amazon EC2 中使用Docker 117  
10.2 在AWS Elastic Beanstalk 中使用Docker 119  
10.2.1 在AWS 控製颱部署Docker 應用程序 119  
10.2.2 使用Docker Hub 公開倉庫鏡像 129  
10.2.3 使用Docker Hub 私有倉庫的鏡像 131  
10.2.4 使用Git 部署Elastic Beanstalk Docker 應用程序 139  
第11 章 在Google Cloud Platform 中使用Docker 145  
11.1 安裝Goolge Cloud SDK 145  
11.2 在Compute Engine 中使用Docker 147  
11.3 在Container Engine 中使用Docker 148  
第12 章 使用Docker Hub 151  
12.1 加入Docker Hub 151  
12.2 使用push 命令上傳鏡像 153  
12.3 創建Docker Hub 私有倉庫 155  
12.4 使用Docker Hub Automated Build 157  
第13 章 使用Docker Remote API 167  
13.1 使用Docker Remote API Python 庫 169  
13.1.1 創建並啓動容器 169  
13.1.2 創建鏡像 173  
13.1.3 顯示容器列錶 175  
13.1.4 顯示鏡像列錶 176  
13.1.5 其他示例與函數 176  
13.2 使用Docker Remote API Python 庫進行HTTPS 通信 187  
13.2.1 創建證書 187  
13.2.2 使用Python 庫 191  
第14 章 使用CoreOS 193  
14.1 在VirtualBox 中安裝CoreOS 196  
使用systemd 運行服務 205  
14.2 使用Vagrant 安裝CoreOS 206  
14.3 使用etcd 211  
14.3.1 創建etcd 鍵與目錄 211  
14.3.2 輸齣etcd 鍵與目錄列錶 212  
14.3.3 設置自動刪除etcd 鍵與目錄 212  
14.3.4 監視etcd 鍵 213  
14.3.5 etcd 其他命令 214  
14.4 使用fleet 214  
14.4.1 輸齣fleet 機器列錶 215  
14.4.2 使用fleet 運行Unit 215  
14.4.3 輸齣fleet Unit 列錶 217  
14.4.4 查看fleet Unit 狀態 217  
14.4.5 測試fleet 的自動恢復功能 218  
14.4.6 使用fleet 專用選項 219  
14.4.7 靈活使用fleet Unit 文件模闆 222  
14.4.8 靈活使用fleet sidekick 模型 224  
14.4.9 fleet 其他命令 227  
14.5 在雲服務中使用CoreOS 227  
14.5.1 在Amazon EC2 中使用CoreOS 227  
14.5.2 在Google Compute Engine 中使用CoreOS 229  
第15 章 使用Docker 搭建WordPress 博客 231  
15.1 編寫WordPress Dockerfile 文件 232  
15.2 編寫MySQL 數據庫Dockerfile 文件 233  
15.3 創建WordPress 與數據庫容器 236  
第16 章 使用Docker 構建Ruby on Rails 應用 237  
16.1 安裝Ruby 與Rails 238  
16.2 編寫Rails Dockerfile 240  
16.3 編寫PostgreSQL 數據庫Dockerfile 文件 245  
16.4 創建Rails 與數據庫容器 247  
第17 章 使用Docker 構建Django 應用 249  
17.1 安裝Django 250  
17.2 編寫Django Dockerfile 文件 253  
17.3 編寫Oracle 數據庫Dockerfile 文件 258  
17.4 創建Django 與數據庫容器 261  
第18 章 Docker 應用案例 263  
18.1 與負載平衡相關的自動伸縮 263  
18.2 整閤開發、測試、運營 264  
18.3 輕鬆遷移服務 265  
18.4 用於測試 267  
第19 章 Docker 命令與選項列錶 269  
19.1 attach 270  
19.2 build 271  
19.3 Commit 273  
19.4 cp 273  
19.5 create 274  
19.6 diff 277  
19.7 events 277  
19.8 exec 278  
19.9 export 280  
19.10 history 280  
19.11 images 281  
19.12 import 281  
19.13 info 282  
19.14 inspect 283  
19.15 kill 284  
19.16 load 284  
19.17 login 285  
19.18 logout 286  
19.19 logs 286  
19.20 port 287  
19.21 pause 287  
19.22 ps 287  
19.23 pull 288  
19.24 push 289  
19.25 restart 289  
19.26 rm 289  
19.27 rmi 290  
19.28 run 291  
19.29 save 296  
19.30 search 297  
19.31 start 297  
19.32 stop 298  
19.33 tag 298  
19.34 top 299  
19.35 unpause 299  
19.36 version 300  
19.37 wait 300  
附錄 編譯Docker 301      
前言/序言
       
				 
				
				
					《容器化之道:從零開始的現代應用部署》  在快速迭代和持續交付成為軟件開發常態的今天,如何高效、穩定、可移植地部署和管理應用程序,是每一位開發者和運維工程師必須麵對的核心挑戰。傳統的部署方式往往伴隨著環境配置復雜、依賴衝突頻發、遷移成本高昂等諸多痛點,嚴重製約瞭開發效率和業務的敏捷性。正是為瞭解決這些根深蒂固的問題,一種革命性的技術應運而生——容器化。  《容器化之道:從零開始的現代應用部署》並非一本關於特定工具的教程,而是一次深入探索容器化技術核心理念、設計哲學及其在現代化應用架構中扮演的關鍵角色的旅程。本書旨在為讀者構建一個全麵而深刻的理解框架,幫助您擺脫對單一工具的依賴,真正掌握容器化背後的原理,並能夠靈活地將其應用於各種復雜的部署場景。  第一部分:理解容器化 — 核心概念與演進之路  在深入實踐之前,我們首先需要理解“容器化”究竟是什麼,以及它為何能解決傳統部署難題。本部分將帶您迴顧軟件部署的曆史演變,從簡單的腳本部署到虛擬機時代,再到容器技術的興起。我們將詳細解析容器的核心特徵:輕量級、隔離性、可移植性、一緻性。     為何需要容器? 深入剖析傳統部署方式的痛點,例如“在我機器上可以運行”的尷尬、環境不一緻導緻的部署失敗、資源浪費等,從而引齣容器化作為解決方案的必然性。    容器與虛擬機:異同探析 詳細對比容器和虛擬機的底層工作原理,重點解釋容器如何共享宿主機內核,以及這種共享帶來的效率提升和潛在的安全考量。理解它們在資源利用、啓動速度、隔離級彆等方麵的差異,幫助您在不同場景下做齣明智的技術選擇。    容器化技術棧概覽 介紹構成現代容器化生態的關鍵組件,如容器運行時(如containerd, CRI-O)、鏡像構建工具(如Buildah)以及容器編排係統(如Kubernetes)。本書將聚焦於理解這些組件如何協同工作,而不是深入講解某個特定工具的API。    容器化設計的哲學 探討容器化所倡導的“一次構建,隨處運行”的理念,以及它如何促進微服務架構、DevOps文化的落地。理解容器化背後的設計哲學,將幫助您更好地應用這項技術。  第二部分:構建可移植的應用 — 容器鏡像的設計與管理  容器的核心在於其不可變的基礎——鏡像。一個優秀的鏡像,是實現應用跨環境無縫遷移的關鍵。本部分將聚焦於如何設計、構建和管理高質量的容器鏡像。     鏡像的組成與原理 剖析容器鏡像的分層結構,理解UnionFS/OverlayFS等文件係統的工作機製,以及為何分層能夠實現高效的存儲和分發。    編寫高效的Dockerfile 深入探討Dockerfile中各個指令的含義、最佳實踐以及潛在的陷阱。我們將重點關注如何構建體積小、安全性高、可維護性強的鏡像。例如,如何利用多階段構建(multi-stage builds)來減小最終鏡像的體積,如何選擇閤適的基綫鏡像,如何安全地處理敏感信息。    最小化鏡像體積的藝術 探討各種減小鏡像體積的策略,包括使用更精簡的基礎鏡像(如Alpine Linux)、清理不必要的依賴、優化文件復製等。    安全地構建鏡像 講解如何在構建過程中提升鏡像的安全性,例如,避免在鏡像中包含敏感信息、使用非root用戶運行構建過程、定期掃描鏡像中的漏洞等。    鏡像的生命周期管理 討論鏡像的注冊與分發,包括公共鏡像倉庫(如Docker Hub)和私有鏡像倉庫的使用,以及如何管理鏡像的版本和生命周期。  第三部分:編排與調度 — 走嚮分布式容器管理  當應用規模增大,需要部署和管理成百上韆個容器時,手動操作將變得不可行。容器編排係統應運而生,它們負責自動化容器的部署、擴展、聯網和管理。本部分將深入理解容器編排的核心概念和工作原理,為構建大規模分布式係統奠定基礎。     編排的挑戰與必要性 分析在分布式環境中管理大量容器所麵臨的挑戰,如服務發現、負載均衡、滾動更新、故障恢復等,以及為何需要專門的編排係統來解決這些問題。    聲明式配置與期望狀態 講解容器編排係統中普遍采用的聲明式配置模型,即用戶隻需定義期望的應用狀態,係統會自動將其維持在該狀態。理解這一核心理念對於使用任何編排工具都至關重要。    核心編排概念解析 深入探討編排係統中的關鍵概念,如Pod(或Service)、ReplicaSet(或Deployment)、Service、Ingress、Volume等。本書將從概念層麵解釋這些資源的用途和相互關係。    服務發現與負載均衡 剖析容器編排係統如何實現服務之間的自動發現和負載均衡,以確保高可用性和可擴展性。    滾動更新與零宕機部署 講解容器編排係統如何支持應用程序的平滑升級,實現滾動更新和零宕機部署,最大程度地減少對用戶的影響。    持久化存儲的管理 探討在容器化環境中如何管理應用程序的持久化數據,包括理解Volume、PersistentVolume、StorageClass等概念,以及它們在數據生命周期管理中的作用。  第四部分:容器化網絡的奧秘  網絡是分布式係統的血脈。在容器化環境中,為容器提供高效、安全、靈活的網絡連接是構建復雜應用的基石。本部分將深入探討容器網絡的設計和實現。     容器網絡模型基礎 講解Linux網絡命名空間、虛擬網橋(veth pair)、Linux Bridge等底層技術,這些技術是容器網絡隔離和連接的基礎。    CNI(Container Network Interface) 介紹CNI作為容器運行時與網絡插件之間的標準接口,以及它如何促進容器網絡插件生態的繁榮。    容器網絡插件的功能與類型 探討不同類型的容器網絡插件(如Overlay網絡、路由網絡),以及它們如何解決跨主機通信、IP地址管理、網絡策略等問題。    網絡策略與安全隔離 講解如何通過網絡策略來控製容器之間的訪問權限,實現細粒度的網絡安全隔離,防止未授權的訪問。    服務網格(Service Mesh)的引入 簡要介紹服務網格的概念,以及它如何為微服務架構提供更高級彆的通信控製、可觀察性和安全性。  第五部分:容器化生態與未來趨勢  容器化技術仍在快速發展,並不斷演進,形成瞭龐大而活躍的生態係統。本部分將帶領讀者展望容器化技術的未來,以及其在更廣闊的領域中的應用。     DevOps與容器化 深入分析容器化技術如何成為DevOps實踐的催化劑,促進開發、測試、部署、運維各個環節的自動化和協作。    雲原生(Cloud Native)架構 探討容器化與雲原生理念的緊密聯係,以及它們如何共同構建現代化、可伸縮、彈性、韌性的應用架構。    Serverless與容器 分析Serverless計算模型與容器化技術的融閤,以及這種融閤帶來的新的應用開發和部署模式。    安全性在容器化中的挑戰與對策 總結容器化安全性的主要挑戰,並探討多層次的安全防護策略,包括鏡像安全、運行時安全、網絡安全、身份認證與授權等。    麵嚮未來的探索 展望容器化技術在邊緣計算、物聯網、AI/ML等新興領域的應用前景,以及未來可能的技術發展方嚮。  《容器化之道:從零開始的現代應用部署》的目標是為您提供一套係統性的知識體係,讓您不僅能夠理解容器化技術的“是什麼”,更能夠深入理解“為什麼”和“怎麼做”。本書避免陷入具體工具的使用細節,而是聚焦於底層原理和設計思想,從而賦予您跨越工具版本、應對技術變遷的強大能力。無論您是渴望提升應用部署效率的開發者,還是緻力於優化基礎設施運維的工程師,本書都將是您在容器化浪潮中穩健前行的寶貴指南。踏上這條容器化之道,您將解鎖更高效、更可靠、更具彈性的應用交付新篇章。