具體描述
編輯推薦
對於應用程序,無論是在私有雲部署還是在公有雲部署,本書都列齣瞭豐富實用的解決方案和示例。
即使不具備Docker相關知識,基於書中實用的解決方案,開發人員也能在閱讀幾章之後打包和部署分布式應用程序。如果你是一位運維人員,你將很快掌握如何使用Docker來改善自己的工作方式。如果你是一位IT專業人士,你將能夠學習到如何解決日常問題,比如創建、運行、共享和部署Docker鏡像。
管理容器、掛載數據捲和容器連接
創建和共享鏡像
單主機或多主機的Docker網絡
處理Docker配置與開發等進階問題
使用Kubernetes在分布式集群中部署多容器的應用程序
使用為Docker優化的新一代操作係統
學習用於應用程序部署、持續集成、服務發現和編排的工具
監控容器,並探討不同的應用程序用例 內容簡介
《Docker經典實例》結構明晰,示例豐富詳實,是全麵實用的Docker入門教程。作者全麵介紹瞭Docker相關各種工具和平颱,涵蓋網絡、鏡像管理、配置以及包括Kubernetes和Mesos在內的編排和調度生態係統,對私有雲和公有雲上部署的應用程序都給齣瞭豐富實用的解決方案和示例。 作者簡介
Sébastien Goasguen,Citrix高級開源解決方案架構師,主要從事Apache CloudStack項目,幫助開發CloudStack生態係統。他目前是Apache CloudStack項目的副總裁,也是Apache libcloud項目管理委員會的成員。
<譯者簡介>
具有10餘年軟件開發經驗,關注後颱開發技術和各種編程語言。做過電子商務、金融、企業係統以及Android手機開發,寫過Delphi,也兼做係統管理員和DBA,近期在做與Docker相關的工作。
個人主頁:http://liubin.org
微信公眾號:西小口物語(xxk_talks) 目錄
本書贊譽 xi
前言 xiii
第1 章 Docker 入門 1
1.0 簡介 1
1.1 在Ubuntu 14.04 上安裝Docker 2
1.2 在CentOS 6.5 上安裝Docker 3
1.3 在CentOS 7 上安裝Docker 4
1.4 使用Vagrant 創建本地Docker 主機 4
1.5 在樹莓派上安裝Docker 6
1.6 在OS X 上通過Docker Toolbox 安裝Docker 7
1.7 在OS X 上通過Boot2Docker 安裝Docker 9
1.8 在Windows 8.1 颱式機上運行Boot2Docker 13
1.9 使用Docker Machine 在雲中創建Docker 主機 14
1.10 使用Docker 實驗版二進製文件 18
1.11 在Docker 中運行Hello World 18
1.12 以後颱方式運行Docker 容器 20
1.13 創建、啓動、停止和移除容器 21
1.14 使用Dockerfile 構建Docker 鏡像 22
1.15 在單一容器中使用Supervisor 運行WordPress 24
1.16 使用兩個鏈接在一起的容器運行WordPress 博客程序 26
1.17 備份在容器中運行的數據庫 28
1.18 在宿主機和容器之間共享數據 30
1.19 在容器之間共享數據 31
1.20 對容器進行數據復製 32
第2 章 創建和共享鏡像 34
2.0 簡介 34
2.1 將對容器的修改提交到鏡像 35
2.2 將鏡像和容器保存為tar 文件進行共享 36
2.3 編寫你的第一個Dockerfile 37
2.4 將Flask 應用打包到鏡像 40
2.5 根據最佳實踐優化Dockerfile 42
2.6 通過標簽對鏡像進行版本管理 43
2.7 使用Docker provider 從Vagrant 遷移到Docker 45
2.8 使用Packer 構建Docker 鏡像 47
2.9 將鏡像發布到Docker Hub 50
2.10 使用ONBUILD 鏡像 53
2.11 運行私有registry 54
2.12 為持續集成/部署在Docker Hub 上配置自動構建 56
2.13 使用Git 鈎子和私有registry 建立本地自動構建環境 60
2.14 使用Conduit 進行持續部署 61
第3 章 Docker網絡 63
3.0 簡介 63
3.1 查看容器的IP地址 64
3.2 將容器端口暴露到主機上 65
3.3 在Docker中進行容器鏈接 67
3.4 理解Docker容器網絡 69
3.5 選擇容器網絡模式 72
3.6 配置Docker 守護進程iptables 和IP 轉發設置 74
3.7 通過Pipework 理解容器網絡 75
3.8 定製Docker 網橋設備 80
3.9 在Docker 中使用OVS 81
3.10 在Docker 主機間創建GRE 隧道 83
3.11 在Weave 網絡上運行容器 85
3.12 在AWS 上運行Weave 網絡 87
3.13 在Docker 主機上部署flannel 覆蓋網絡 89
3.14 在多颱Docker 主機中使用Docker Network 90
3.15 深入Docker Network 命名空間配置 94
第4 章 開發和配置Docker 96
4.0 簡介 96
4.1 管理和配置Docker 守護進程 97
4.2 從源代碼編譯自己的Docker 二進製文件 98
4.3 為開發Docker 運行Docker 測試集 100
4.4 使用新的Docker 二進製文件替換當前的文件 101
4.5 使用nsenter 102
4.6 runc 簡介 104
4.7 遠程訪問Docker 守護進程 106
4.8 通過Docker 遠程API 完成自動化任務 107
4.9 從遠程安全訪問Docker 守護進程 109
4.10 使用docker-py 訪問遠程Docker 守護進程 111
4.11 安全使用docker-py 113
4.12 更改存儲驅動程序 113
第5 章 Kubernetes 116
5.0 簡介 116
5.1 理解Kubernetes 架構 118
5.2 用於容器間連接的網絡pod 120
5.3 使用Vagrant 創建一個多節點的Kubernetes 集群 121
5.4 在Kubernetes 集群上通過pod 啓動容器 124
5.5 利用標簽查詢Kubernetes 對象 126
5.6 使用replication controller 管理pod 的副本數 127
5.7 在一個pod 中運行多個容器 129
5.8 使用集群IP 服務進行動態容器鏈接 131
5.9 使用Docker Compose 創建一個單節點Kubernetes 集群 135
5.10 編譯Kubernetes 構建自己的發布版本 139
5.11 使用hyperkube 二進製文件啓動Kubernetes 組件 141
5.12 瀏覽Kubernetes API 142
5.13 運行Kubernetes 儀錶盤 146
5.14 升級老版本API 147
5.15 為Kubernetes 集群添加身份驗證支持 149
5.16 配置Kubernetes 客戶端連接到遠程集群 150
第6 章 為Docker 優化的操作係統 152
6.0 簡介 152
6.1 在Vagrant 中體驗CoreOS Linux 發行版 153
6.2 使用cloud-init 在CoreOS 上啓動容器 155
6.3 通過Vagrant 啓動CoreOS 集群,在多颱主機上運行容器 157
6.4 在CoreOS 集群上通過fleet 啓動容器 160
6.5 在CoreOS 實例之間部署flannel 覆蓋網絡 162
6.6 使用Project Atomic 運行Docker 容器 164
6.7 在AWS 上啓動Atomic 實例運行Docker 165
6.8 快速體驗在Ubuntu Core Snappy 上運行Docker 167
6.9 在AWS EC2 上啓動Ubuntu Core Snappy 實例 169
6.10 在RancherOS 中運行Docker 容器 173
第7 章 Docker 生態環境:工具 175
7.0 簡介 175
7.1 使用Docker Compose創建WordPress站點 176
7.2 使用Docker Compose在Docker上對Mesos和Marathon進行測試 179
7.3 在Docker Swarm 集群上運行容器 181
7.4 使用Docker Machine創建跨雲計算服務提供商的Swarm集群 183
7.5 使用Kitematic UI 管理本地容器 185
7.6 使用Docker UI 管理容器 187
7.7 使用Wharfee 交互式shell 189
7.8 使用Ansible 的Docker模塊對容器進行編排 190
7.9 在Docker主機集群中使用Rancher管理容器 193
7.10 使用Lattice 在集群中運行容器 196
7.11 通過Apache Mesos 和Marathon 運行容器 198
7.12 在Mesos 集群上使用Mesos Docker 容器化 202
7.13 使用registrator 發現Docker 服務 204
第8 章 雲計算中的Docker 208
8.0 簡介 208
8.1 在公有雲中運行Docker 209
8.2 在AWS EC2 上啓動Docker 主機 212
8.3 在Google GCE 上啓動Docker 主機 215
8.4 在Microsoft Azure 上啓動Docker 主機 218
8.5 在AWS 上使用Docker Machine 啓動Docker 主機 220
8.6 在Azure 上使用Docker Machine 啓動Docker 主機 222
8.7 在Docker 容器中運行雲服務提供商的CLI 224
8.8 使用Google Container registry 存儲Docker 鏡像 226
8.9 在GCE Google-Container 實例中使用Docker 229
8.10 通過GCE 在雲中使用Kubernetes 231
8.11 配置使用EC2 Container Service 234
8.12 創建一個ECS 集群 237
8.13 在ECS 集群中啓動Docker 容器 240
8.14 利用AWS Beanstalk 對Docker 的支持在雲中運行應用程序 244
第9 章 監控容器 248
9.0 簡介 248
9.1 使用docker inspect 命令獲取容器的詳細信息 249
9.2 獲取運行中容器的使用統計信息 251
9.3 在Docker 主機上監聽Docker 事件 252
9.4 使用docker logs 命令獲取容器的日誌 254
9.5 使用Docker 守護進程之外的日誌記錄驅動程序 254
9.6 使用Logspout 采集容器日誌 257
9.7 管理Logspout 路由來存儲容器日誌 259
9.8 使用Elasticsearch 和Kibana 對容器日誌進行存儲和可視化 261
9.9 使用Collectd 對容器指標進行可視化 262
9.10 使用cAdvisor 監控容器資源使用狀況 267
9.11 通過InfluxDB、Grafana 和cAdvisor 監控容器指標 269
9.12 使用Weave Scope 對容器布局進行可視化 270
第10 章 應用用例 272
10.0 簡介 272
10.1 CI/CD:構建開發環境 273
10.2 CI/CD:使用Jenkins 和Apache Mesos 構建持續交付工作流 276
10.3 ELB:使用confd 和registrator 創建動態負載平衡器 280
10.4 DATA:使用Cassandra 和Kubernetes 構建兼容S3 的對象存儲 286
10.5 DATA:使用Docker Network 構建MySQL Galera 集群 290
10.6 DATA:以動態方式為MySQL Galera 集群配置負載平衡器 292
10.7 DATA:構建Spark 集群 294
關於作者 298
關於封麵 298
《Docker實戰指南:從入門到精通》 內容概述: 這是一本麵嚮開發人員、運維工程師以及對容器化技術感興趣的初學者的實戰型技術書籍。本書旨在幫助讀者深入理解Docker的核心概念,掌握其在實際項目中的應用技巧,並能夠獨立地構建、部署和管理基於Docker的應用程序。內容涵蓋瞭Docker的基礎知識、核心組件、常用命令、鏡像構建、容器管理、數據持久化、網絡配置、服務編排以及安全性等多個維度,並輔以大量貼閤實際的案例,力求讓讀者在實踐中學習,在應用中成長。 本書特色: 1. 理論與實踐深度結閤: 本書不滿足於簡單的概念介紹,而是將理論知識與大量實戰案例緊密結閤。每個核心概念的提齣都會伴隨相應的操作演示,幫助讀者快速理解並掌握。 2. 循序漸進的學習路徑: 從Docker的基本概念和安裝配置入手,逐步深入到鏡像的構建、容器的生命周期管理、數據捲的使用、網絡通信的原理與實踐,最後過渡到Docker Compose進行多容器應用的編排,以及Docker Swarm和Kubernetes的初步介紹,確保不同基礎的讀者都能找到適閤自己的學習節奏。 3. 聚焦實際應用場景: 書中引入瞭諸如Web服務部署、數據庫容器化、微服務構建、CI/CD流程整閤等真實項目開發和運維中常見的場景,讓讀者在學習Docker時,能直觀感受到其帶來的效率提升和便利性。 4. 注重細節與技巧: 除瞭講解基本用法,本書還深入探討瞭一些進階技巧,如Dockerfile的優化、多階段構建、鏡像的安全加固、容器性能調優、以及如何利用Docker進行本地開發環境的標準化等,幫助讀者打造更健壯、更高效的Docker應用。 5. 緊跟技術發展趨勢: 本書內容緊密跟蹤Docker及相關容器化技術的最新發展,介紹瞭一些當前業界廣泛應用的最佳實踐。 本書內容結構: 第一部分:Docker入門與基礎 第一章:容器化浪潮與Docker概覽 為什麼需要容器化?傳統部署方式的痛點。 Docker的誕生與發展,以及它如何解決這些痛點。 Docker的核心優勢:輕量、隔離、快速、一緻性。 Docker的基本架構:Docker Engine(Client, Daemon, Registry)、Image、Container。 Docker的安裝與環境配置(Windows, macOS, Linux)。 第二章:Docker鏡像(Image)詳解 什麼是Docker鏡像?分層文件係統(UnionFS)的原理。 Docker Hub與私有Registry的使用。 常用的Docker鏡像命令:`docker search`, `docker pull`, `docker push`, `docker images`, `docker rmi`。 深入理解Dockerfile:編寫高效、可維護的Dockerfile。 `FROM`, `RUN`, `COPY`, `ADD`, `WORKDIR`, `EXPOSE`, `CMD`, `ENTRYPOINT`, `ENV`, `ARG`, `VOLUME`, `USER`, `LABEL` 等指令詳解。 構建多階段鏡像(Multi-stage builds)以減小鏡像體積。 鏡像構建的最佳實踐與優化技巧。 Docker鏡像的保存與加載:`docker save`, `docker load`。 第三章:Docker容器(Container)生命周期管理 什麼是Docker容器?容器與鏡像的關係。 創建與啓動容器:`docker run`命令詳解。 常用選項:`-d`, `-p`, `-v`, `--name`, `--rm`, `-it`, `--network`, `--link` 等。 容器的端口映射與後颱運行。 指定容器的啓動命令與環境變量。 查看與管理容器:`docker ps`(all, running, exited)、`docker inspect`、`docker logs`。 停止、重啓與刪除容器:`docker stop`, `docker restart`, `docker rm`。 進入正在運行的容器:`docker exec`。 容器的資源限製:CPU、內存限製。 理解容器的垃圾迴收機製。 第二部分:Docker進階與應用 第四章:Docker網絡(Networking) Docker網絡模型概覽。 Docker的四種網絡驅動:`bridge` (默認)、`host`、`none`、`overlay`。 `bridge`網絡:原理、創建自定義bridge網絡、容器間的通信。 `host`網絡:共享宿主機網絡。 `none`網絡:無網絡配置。 `overlay`網絡:用於Swarm集群。 DNS解析與容器發現。 Docker的網絡端口轉發與NAT。 實際網絡配置場景:Web服務器與數據庫的通信。 第五章:Docker數據持久化 理解容器的臨時性與數據丟失問題。 Docker數據捲(Volumes): 什麼是數據捲?數據捲的優勢。 創建與管理數據捲:`docker volume create`, `docker volume ls`, `docker volume inspect`, `docker volume rm`。 將數據捲掛載到容器:`-v` 或 `--mount` 選項。 命名捲(Named Volumes)與匿名捲(Anonymous Volumes)。 綁定掛載(Bind Mounts): 將宿主機的文件或目錄直接掛載到容器。 使用場景與注意事項。 tmpfs掛載:內存中的臨時文件係統。 選擇閤適的數據持久化策略。 第六章:Docker Compose:多容器應用編排 什麼是Docker Compose?解決多容器部署的復雜性。 `docker-compose.yml`文件的編寫: `services`、`networks`、`volumes`、`configs`、`secrets`等配置項詳解。 定義服務、鏡像、端口、捲、網絡依賴。 Docker Compose的常用命令: `docker-compose up`: 創建並啓動服務。 `docker-compose down`: 停止並刪除服務。 `docker-compose ps`: 查看服務狀態。 `docker-compose logs`: 查看服務日誌。 `docker-compose build`: 構建服務鏡像。 `docker-compose exec`: 在服務容器中執行命令。 一個典型的Docker Compose應用案例:Web應用 + 數據庫 + 緩存。 第三部分:Docker進階應用與生態 第七章:Docker Swarm:原生集群管理 什麼是Docker Swarm?Docker原生的容器編排工具。 Swarm模式的初始化與加入節點。 創建和管理服務(Services): 副本(Replicas)與伸縮。 滾動更新(Rolling Updates)。 健康檢查。 Swarm模式下的網絡與捲。 Docker Compose與Swarm的集成。 第八章:Docker安全 Docker安全的基本原則。 鏡像安全: 使用官方鏡像或可信的鏡像源。 定期掃描鏡像中的漏洞。 最小化鏡像體積。 最佳實踐的Dockerfile構建。 容器安全: 限製容器的權限(Capabilities)。 使用最小權限的用戶運行進程。 配置安全上下文(Security Contexts)。 防止容器逃逸。 Docker Daemon安全。 網絡安全。 Secrets管理。 第九章:Docker生態係統與未來趨勢 Kubernetes簡介:為何需要Kubernetes?Docker與Kubernetes的關係。 CI/CD流程集成:Jenkins, GitLab CI, GitHub Actions與Docker。 Docker Registry的更多高級配置與使用。 監控與日誌:Prometheus, Grafana, ELK Stack與Docker。 雲原生應用開發與Docker。 容器技術的未來發展方嚮。 附錄 常用Docker命令速查錶。 Dockerfile指令速查錶。 Docker Compose文件常用配置項。 目標讀者: 希望快速掌握Docker核心技術,提升開發與部署效率的軟件開發工程師。 尋求更現代化、更高效的服務器部署與管理方式的係統管理員與運維工程師。 對容器化技術充滿好奇,希望瞭解其工作原理與應用價值的技術愛好者。 需要構建和管理微服務應用的技術團隊。 對DevOps實踐感興趣並希望將其應用於項目中的技術人員。 本書將帶領您一步步走進Docker的世界,從理解其根本原理到熟練運用各項功能,最終能夠自信地將Docker技術融入到您的日常開發與運維工作中,解決實際問題,擁抱自動化與效率的提升。
我不得不說,《Docker 經典實例》這本書簡直就是為我量身定做的。我一直覺得 Docker 很高深,看到那些復雜的概念和命令就頭疼。但這本書的敘事方式非常吸引人,它不是在講枯燥的理論,而是在講一個個“故事”,這些故事就是 Docker 的應用場景,而我就是那個在故事裏動手實踐的主角。 我記得很清楚,書中有一個關於構建微服務的案例,讓我印象非常深刻。它不是簡單地展示如何把一個應用拆成幾個小服務,而是深入地講解瞭如何使用 Docker 來管理這些服務的依賴關係、網絡通信,以及如何進行靈活的部署和擴展。我學會瞭如何利用 Docker Swarm 或者 Kubernetes 的基礎概念,來 orchestrate 整個微服務集群,這讓我覺得離現代化的應用部署又近瞭一大步。 書中關於 Dockerfile 的優化策略也讓我大開眼界。我之前寫的 Dockerfile 總是很臃腫,構建速度也慢。這本書裏,作者分享瞭很多實用的技巧,比如如何利用多階段構建來減小鏡像體積,如何閤理地組織 RUN 命令,以及如何利用緩存來加速構建過程。這些優化不僅讓我的鏡像更小巧,也讓我的構建流程更順暢,節省瞭大量的時間。 還有一個讓我覺得特彆有價值的部分,是關於 Docker 的監控和日誌管理。我之前部署應用的時候,最頭疼的就是如何收集和分析應用的日誌,以及如何知道我的應用運行得好不好。這本書裏,作者演示瞭如何利用 ELK Stack (Elasticsearch, Logstash, Kibana) 或者 Prometheus 等工具,來收集、存儲和可視化 Docker 容器的日誌和監控指標。這讓我對如何保障生産環境應用的穩定性和可用性有瞭更清晰的思路。 總而言之,《Docker 經典實例》這本書的優點在於它不僅提供瞭豐富的操作指南,更重要的是,它教會瞭我如何“思考”和“解決問題”。它用一種非常係統化、結構化的方式,引導我去理解 Docker 的生態係統,並掌握在不同場景下應用 Docker 的最佳實踐。這本書的價值在於它的“啓發性”和“前瞻性”,讓我能夠自信地應對未來在容器化技術領域遇到的各種挑戰。