Docker+Kubernetes應(yīng)用開發(fā)與快速上云
定 價:79 元
- 作者:李文強編著
- 出版時間:2020/3/1
- ISBN:9787111643012
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP316.85
- 頁碼:388
- 紙張:膠版紙
- 版次:1
- 開本:16K
本書共分為11章。前7章主要講解Docker相關(guān)內(nèi)容,從發(fā)展簡史到基礎(chǔ)概念,從市場趨勢、應(yīng)用場景到各環(huán)境的安裝,從基礎(chǔ)操作命令到Docker應(yīng)用持續(xù)開發(fā)的工作流程,從主流的編程語言實踐到數(shù)據(jù)庫容器化。第8~10章主要講解Kubernetes的相關(guān)內(nèi)容,從主體架構(gòu)、核心概念到開發(fā)、生產(chǎn)環(huán)境搭建以及集群故障處理,從應(yīng)用部署、伸縮、回滾到應(yīng)用訪問,從云端理念到將應(yīng)用部署到容器云服務(wù)。第11章主要講解容器化之后的DevOps實踐,從DevOps的理念到CI、CD的流程和實踐,最后講述如何使用AzureDevOps、TencentHub以及自建的TeamCity來完成CI/CD,并附有相關(guān)參考流程講解。
作為互聯(lián)網(wǎng)大軍中的一員,我經(jīng)常會思考:如何避免“996”和“ICU”?如何更好地解決軟件的交付速度和質(zhì)量的問題?畢竟過度的加班不僅傷身勞神,結(jié)果還不太理想——Bug和問題往往與加班時間成正比,修復(fù)問題的時間可能遠(yuǎn)遠(yuǎn)大于開發(fā)功能的時間。
針對這個問題,我們要一分為二地去看:一方面,我們需要明確自己的遠(yuǎn)近目標(biāo),確保正確的方向以及有效的工作;另一方面,團(tuán)隊需要不斷地接受適合自身的先進(jìn)理念、思維以及工作方式、團(tuán)隊文化、技術(shù)和工具,以提高交付速度,并且保障軟件交付質(zhì)量。
關(guān)于適合自身的先進(jìn)理念、思維和工作方式、團(tuán)隊文化、技術(shù)和工具,時下流行的有很多,最熱門的理念莫過于DevOps。它其實并不是新創(chuàng)造出來的,而是軟件工程的過程和方法論變化、進(jìn)化和升級的必然結(jié)果(可以參見本書的第11章)。做好了DevOps實踐,團(tuán)隊必然可以更快、更可靠地交付軟件,提高客戶的滿意度。但是,做好DevOps實踐不但對團(tuán)隊文化有很高的要求,而且對相關(guān)工具、技術(shù)、部署環(huán)境等也有很高的要求,這對于大部分團(tuán)隊來說是一個極大的挑戰(zhàn)——既沒有精力,也沒有實力。
拋開團(tuán)隊文化等,有沒有更易于落地的配合DevOps的解決方案呢?有,那就是以Docker為代表的容器技術(shù)作為基礎(chǔ)保障、以Kubernetes(簡稱k8s)為代表的容器編排技術(shù)作為支撐的解決方案!它們“出世”并不算早,Docker誕生于2013年,k8s v1發(fā)布于2015年,公開面世雖只有短短幾年,它們卻已經(jīng)成為相關(guān)領(lǐng)域的事實標(biāo)準(zhǔn)。它們的出現(xiàn)是歷史的必然,并不能算是新的技術(shù)和理念,而是容器技術(shù)和容器編排技術(shù)演進(jìn)的創(chuàng)新結(jié)果,也是一代又一代互聯(lián)網(wǎng)人追求高效生產(chǎn)活動的解決方案、思想、工具和愿景。
Docker+k8s短短幾年就脫穎而出,除了更易配合DevOps落地之外,還有眾多原因(比如Docker更輕、更快、開源、隔離應(yīng)用,以及k8s便攜、可擴展、自動修復(fù)等),但是其中很重要的一個原因是,在虛擬機時代那些無法解決或者說很難解決的問題以及那些積壓已久的需求(比如分布式系統(tǒng)的部署和運維,物聯(lián)網(wǎng)邊緣計算的快速開發(fā)、測試、部署和運維,大規(guī)模的云計算,等等)在Docker+k8s 的組合下找到了突破口,并且極大地促進(jìn)了云計算的發(fā)展。尤其是k8s,更是代表了云原生應(yīng)用平臺的未來——它借助Docker和微服務(wù)架構(gòu)的發(fā)展迅速崛起,高舉著云原生應(yīng)用的設(shè)計法則,硬生生地打敗了所有的對手,贏得了一片更廣闊的天地和更璀璨的未來(在原有的云計算基礎(chǔ)設(shè)施上抽象出了云原生平臺基礎(chǔ)設(shè)施,形成了一個高度自治的自動化系統(tǒng)平臺)。
開發(fā)者普遍將Docker+k8s應(yīng)用于敏捷開發(fā)、DevOps實踐、混合云和微服務(wù)架構(gòu)。同時,主流的互聯(lián)網(wǎng)公司都將應(yīng)用托管到了應(yīng)用容器上,比如谷歌、微軟、亞馬遜、騰訊、阿里、京東、美團(tuán)和新浪。主流的云廠商均提供了容器服務(wù),并且為之打造了極其強大和豐富的生態(tài)。其中許多云廠商還推出了無服務(wù)器計算容器實例產(chǎn)品,這意味著容器能夠在無服務(wù)器計算的基礎(chǔ)設(shè)施上運行。比如在某些機器學(xué)習(xí)的場合,用戶可以在無服務(wù)器計算的基礎(chǔ)設(shè)施上幾秒內(nèi)啟動成千上萬個容器,然后掛載共享存儲的數(shù)據(jù)或圖像進(jìn)行處理。當(dāng)批量處理完成后,容器自動銷毀,用戶僅需按量付費。
現(xiàn)在的技術(shù)發(fā)展很快,Docker和k8s的技術(shù)點、命令行、接口參數(shù)說明以官網(wǎng)為主、本書為輔。一方面,官網(wǎng)的內(nèi)容往往是最新、最及時的;另一方面,本書更多的是指導(dǎo)大家快速進(jìn)入相關(guān)的實踐,分享相關(guān)的思維、理念和技巧,并且指導(dǎo)大家將容器應(yīng)用托管到自建或者云端的k8s集群以及云廠商提供的容器云服務(wù)。
為什么要編寫本書
促使我編寫本書的原因主要有:
?大家對Docker+k8s的認(rèn)知程度還比較低,缺乏宏觀的認(rèn)知。
?大家普遍認(rèn)為Docker+k8s只是一種單純的相對先進(jìn)的技術(shù),不能夠很好地理解其優(yōu)勢和趨勢,認(rèn)為其并不能給現(xiàn)有的開發(fā)運維體系帶來什么改變。而許多同類書籍往往只是介紹了一些技術(shù)點和細(xì)節(jié),并沒有讓大家從宏觀角度、發(fā)展趨勢去認(rèn)知Docker+k8s,也沒有很好的體系去指導(dǎo)實踐和生產(chǎn)。
?對于想更好地學(xué)習(xí)相關(guān)知識的開發(fā)者,缺少系統(tǒng)的教程以及完整的工作流程的實踐案例,不能提供很好的技術(shù)引導(dǎo)。這使得普通開發(fā)者普遍認(rèn)為使用Docker+k8s很麻煩,改造成本過大,只有大公司才能用,門檻很高。
?云端容器服務(wù)產(chǎn)品的用戶體驗不夠友好,對于初學(xué)者門檻太高(指的是消化這些概念和理念,并且能夠掌握和可控);同時,各家云端的容器產(chǎn)品都進(jìn)行過包裝,體驗各不相同,和原生的體驗也不同。
內(nèi)容介紹
本書共分為11章。
第1章,主要介紹Docker以及容器技術(shù)的發(fā)展簡史,并且對比Docker和虛擬機,最后講述Docker的3個基本概念和版本區(qū)別,為后續(xù)進(jìn)一步講解Docker做鋪墊。
第2章,主要介紹Docker的市場趨勢和主要應(yīng)用場景。
第3章,主要講解各個環(huán)境(Windows 10、Ubuntu、CentOS、樹莓派)下的Docker安裝過程,以及如何使用樹莓派搭建個人網(wǎng)盤。
第4章,主要結(jié)合實踐示例講解Docker的一些鏡像操作命令和容器操作命令,以及相關(guān)參數(shù),最后介紹如何使用Kitematic來管理Docker容器。
第5章,主要圍繞Docker應(yīng)用開發(fā)的持續(xù)工作流程進(jìn)行講解,在開發(fā)、測試、部署整個過程中穿插Doc
前言
第1章 走進(jìn)Docker1
1.1 主流的互聯(lián)網(wǎng)公司均在使用Docker1
1.2 什么是Docker4
1.3 容器簡史4
1.4 打消偏見,迎接Docker5
1.5 Docker和虛擬機6
1.6 Docker的三個基本概念8
1.6.1 鏡像:一個特殊的文件系統(tǒng)8
1.6.2 容器:鏡像運行時的實體9
1.6.3 倉庫:集中存放鏡像文件的地方9
1.7 Docker版本概述11
第2章 Docker的市場趨勢和主要應(yīng)用場景12
2.1 Docker的市場趨勢12
2.2 Docker的主要應(yīng)用場景15
2.2.1 簡化配置,無須處理復(fù)雜的環(huán)境依賴關(guān)系15
2.2.2 搭建輕量、私有的PaaS環(huán)境、標(biāo)準(zhǔn)化開發(fā)、測試和生產(chǎn)環(huán)境15
2.2.3 簡化和標(biāo)準(zhǔn)化代碼流水線,助力敏捷開發(fā)和DevOps實踐16
2.2.4 隔離應(yīng)用17
2.2.5 整合服務(wù)器資源17
2.2.6 現(xiàn)代應(yīng)用17
2.2.7 調(diào)試能力18
2.2.8 快速部署18
2.2.9 混合云應(yīng)用、跨環(huán)境應(yīng)用、可移植應(yīng)用18
2.2.10 物聯(lián)網(wǎng)和邊緣計算18
第3章 安裝和運行20
3.1 Windows 10下的安裝20
3.1.1 配置Docker本地環(huán)境22
3.1.2 運行一個簡單的demo23
3.2 Ubuntu下的安裝25
3.2.1 了解Ubuntu25
3.2.2 使用Hyper-V快速安裝Ubuntu25
3.2.3 配置外網(wǎng)27
3.2.4 使用SSH遠(yuǎn)程Ubuntu30
3.2.5 安裝Docker33
3.3 CentOS 下的安裝37
3.3.1 了解CentOS37
3.3.2 使用CentOS 7 安裝Docker38
3.4 基于樹莓派搭建個人網(wǎng)盤41
3.4.1 什么是樹莓派41
3.4.2 開啟SSH43
3.4.3 安裝Docker44
3.4.4 基于樹莓派的一行命令搭建個人網(wǎng)盤46
第4章 Docker命令基礎(chǔ)知識48
4.1 登 錄49
4.1.1 OPTIONS說明49
4.1.2 登錄Docker Hub49
4.1.3 登錄到騰訊云鏡像倉庫50
4.2 拉取鏡像51
4.2.1 OPTIONS說明51
4.2.2 從Docker Hub拉取鏡像51
4.2.3 從騰訊云鏡像倉庫拉取鏡像52
4.3 列出本地鏡像53
4.3.1 OPTIONS說明53
4.3.2 按名稱和標(biāo)簽列出鏡像54
4.3.3 篩選55
4.4 運行鏡像58
4.4.1 OPTIONS說明58
4.4.2 簡單運行60
4.5 列出容器61
4.5.1 OPTIONS說明61
4.5.2 查看正在運行的容器61
4.5.3 顯示正在運行和已停止的容器61
4.5.4 篩選62
4.5.5 根據(jù)指定模板輸出62
4.6 查看鏡像詳情63
4.7 刪除鏡像64
4.7.1 OPTIONS說明64
4.7.2 批量刪除65
4.8 清理未使用的鏡像65
4.9 磁盤占用分析67
4.10 刪除容器68
4.10.1 OPTIONS說明68
4.10.2 停止容器再刪除68
4.10.3 強制刪除正在運行的容器69
4.10.4 刪除所有已停止的容器69
4.11 鏡像構(gòu)建70
4.11.1 OPTIONS說明70
4.11.2 簡單構(gòu)建71
4.12 鏡像歷史73
4.12.1 OPTIONS說明73
4.12.2 查看鏡像歷史74
4.12.3 格式化輸出74
4.13 修改鏡像名稱和標(biāo)簽75
4.14 鏡像推送76
4.14.1 推送到Docker Hub76
4.14.2 推送到騰訊云鏡像倉庫77
4.15 使用Kitematic來管理Docker容器77
第5章 Docker持續(xù)開發(fā)工作流81
5.1 基于Docker容器的內(nèi)部循環(huán)開發(fā)工作流81
5.1.1 開發(fā)82
5.1.2 編寫Dockerfile83
5.1.3 創(chuàng)建自定義鏡像90
5.1.4 定義docker-compose91
5.1.5 啟動Docker應(yīng)用97
5.1.6 測試99
5.1.7 部署或繼續(xù)開發(fā)100
5.2 Visual Studio和Docker100
5.2.1 使用VS自動生成工程的Dockerfile文件101
5.2.2 VS支持的容器業(yè)務(wù)協(xié)調(diào)程序102
5.2.3 使用VS發(fā)布鏡像104
5.3 使用 Visual Studio Code玩轉(zhuǎn)Docker105
5.3.1 官方擴展插件Docker105
5.3.2 Docker Compose擴展插件109
第6章 Docker應(yīng)用開發(fā)之旅111
6.1 使用.NET Core開發(fā)云原生應(yīng)用111
6.1.1 什么是“云原生”112
6.1.2 .NET Core簡介112
6.1.3 官方鏡像114
6.1.4 Kestrel115
6.1.5 按環(huán)境加載配置118
6.1.6 查看和設(shè)置容器的環(huán)境變量119
6.1.7 ASP.NET Core內(nèi)置的日志記錄提供程序121
6.1.8 編寫一個簡單的Demo輸出日志122
6.1.9 使用“docker logs”查看容器日志124
6.1.10 使用“docker stats”查看容器資源使用125
6.1.11 如何解決容器應(yīng)用的時區(qū)問題125
6.2 使用Docker搭建Java開發(fā)環(huán)境127
6.2.1 官方鏡像127
6.2.2 使用Docker搭建Java開發(fā)環(huán)境127
6.2.3 Docker資源限制130
6.2.4 防止Java容器應(yīng)用被殺130
6.3 使用Go推送釘釘消息131
6.3.1 Go的優(yōu)勢131
6.3.2 官方鏡像132
6.3.3 使用Go推送釘釘消息133
6.4 使用Python實現(xiàn)簡單爬蟲140
6.4.1 關(guān)于Python140
6.4.2 官方鏡像140
6.4.3 使用Python抓取博客列表141
6.5 使用PHP搭建個人博客站點145
6.5.1 官方鏡像146
6.5.2 編寫簡單的“Hello world”146
6.5.3 使用WordPress鏡像搭建個人博客站點148
6.5.4 修改PHP的文件上傳大小限制151
6.6 使用Node.js搭建團(tuán)隊技術(shù)文檔站點151
6.6.1 官方鏡像152
6.6.2 編寫一個簡單的Web服務(wù)器152
6.6.3 使用Hexo搭建團(tuán)隊技術(shù)文檔站點154
第7章 數(shù)據(jù)庫容器化161
7.1 什么是數(shù)據(jù)庫161
7.2 關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫對比162
7.3 主流的數(shù)據(jù)庫162
7.4 數(shù)據(jù)庫容器化163
7.5 SQL Server容器化163
7.5.1 鏡像說明164
7.5.2 運行SQL Server 容器鏡像165
7.5.3 管理SQL S