阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

前言

Docker如日中天,這不是單純的炒概念,Docker確確實實解決了開發與運維的痛點,因此在企業開發中得到了非常廣泛的使用。

Docker是一個開放源代碼軟件項目,讓應用程序部署在軟件容器下的工作可以自動化進行,藉此在Linux操作系統上,提供一-個額外的軟件抽象層,以及操作系統層虛擬化的自動管理機制。

Docker是有史以來增長最快的開源項目之一,在其周圍的生態系統也是以類似的速度不斷髮展。由於這些原因,本篇的重點完全在於Docker的工具集。這一範圍限定不僅能使內容選材更精準,幫助讀者瞭解在他們的特有實例中如何應用Docker功能;一旦讀者們牢牢把握住了本書涉及的基礎知識,他們也能應對更大的問題,進而探索整個生態系統。


Docker學習路線

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

有了學習路線,是不是有種豁然開朗的感覺?那就趁熱打鐵,跟小編一起進入Docker實戰,由項目出發,徹底喫透他!!!

本篇被分成3個部分

第1部分,第1-6章:

介紹Docker和容器的特點。幫助你理解如何安裝和卸載Docker中發佈的軟件。你將學習如何運行、管理,並在不同的容器結構連接不同類型的軟件。第一部分介紹每一個Docker用戶需要的基本技能。

第2部分,第7-10章:

介紹Docker的封裝和軟件的分發,涵蓋了不同大小Docker鏡像的底層機制,以及對不同的封裝和分發方法所進行的調查。這一部分 還包括對DockerDistribution項目的的深入分析。

第3部分,第11-12章

介紹多容器項目和多主機環境,覆蓋了Docker Compose、Machine 和Swarm項目。這部分內容會指導構建和部署多個真實的實例,規模接近於大型的服務器軟件。


第1部分:保持一臺整潔的機器

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

第1章:歡迎來到Docker世界

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

本章簡要介紹了Docker,它可以幫助系統管理員、開發人員和其他軟件用戶解決問題。

在本章中,你將要了解到:

  • Docker 採用後端的方法來解決常見的軟件問題,並簡化了安裝、運行、發佈和刪除軟件的體驗。它由一個命令行程序、一個後臺守護進程和一套遠程服務組成。它與Docker公司提供的社區工具集成在一起。
  • 容器的抽象是其後端方法的核心。
  • 容器爲軟件創建了一致的界面和使其能夠開發更復雜的工具。
  • 容器有助於保持你的機器整潔,因爲容器內的軟件不能使用容器以外的任何東西,也沒有共享的依賴關係。
  • 由於Docker在Linux、OS X和Windows上可用並被支持,大多數包裝在Docker鏡像中的軟件可以在任何計算機上使用。
  • Docker 不提供容器技術,它隱藏了直接和容器軟件打交道的複雜性。

第2章:在容器中運行軟件

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

Docker項目的核心要點是使用戶能夠在容器上運行軟件。本章介紹如何使用Docker實現這一目的。本章所涵蓋的理念和功能包括以下內容:

  • 容器可以基於虛擬終端,連接到用戶shell或以守護模式的形式運行。
  • 在默認情況下,每一個Docker容器都有自己的PID命名空間,隔離了每個容器的進程信息。
  • Docker用產生的容器ID、 簡寫的容器ID,或者其人性化的名稱來標識每個容器。
  • 所有容器都在四個不同狀態中:正在運行、暫停、重新啓動或退出。
  • Docker exec命令可以在正運行的容器內運行一個額外的進程。
  • 用戶可以通過輸入或在容器創建時給進程指定環境變量的方式,提供額外的配置。
  • 使用--read-only標誌創建容器時,會將掛載的容器文件系統設置爲只讀,防止容器被修改。
  • 容器重啓策略,即在容器創建時設置--restart標誌,將有助於系統出現故障時進行自動恢復。
  • Docker使用docker rm命令清理容器,和創建時一樣簡單。

第3章:軟件安裝的簡化

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

軟件的安裝和管理任務帶來了一些獨特的挑戰。本章介紹瞭如何使用Docker來解決這些問題。本章涵蓋的核心理念和內容如下:

  • Docker用戶可使用倉庫名稱來確定他們想通過Docker安裝的軟件。
  • Docker Hub是默認的註冊服務器,可以通過網站或docker命令行工具在DockerHub_上找到需要的軟件。
  • docker命令行工具可以很方便地通過其他註冊服務器或其他形式來分發安裝軟件。
  • 鏡像倉庫配置中會包括註冊服務器的主機信息。
  • docker load 和docker save 命令可以將TAR檔案文件用來加載和保存鏡像。
  • 分發一個項目的Dockerfile可簡化用戶機器上構建鏡像的過程。
  • 鏡像通常和其他鏡像都有父/子的關聯。這些關係構成分層。當我們說,我們已經安裝了一個鏡像,我們是說已經安裝了一個目標鏡像,及其依賴的每個鏡像層。
  • 使用分層構建鏡像,可重用分層,並可節省分發帶寬和機器上的存儲空間。

第4章:持久化存儲和卷間狀態共享

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

學習如何使用Docker的第一個重大障礙是理解存儲卷和文件系統。本章做了深入介紹,其中包括:

  • 存儲卷允許容器與主機或其他容器共享文件。
  • 存儲卷是主機文件系統的一部分, Docker將主機文件系統掛載到容器中指定位置。
  • 兩種類型的存儲卷: Docker管理卷掛載主機文件系統的Docker目錄,綁定掛載卷可掛載主機文件系統的任何位置。
  • 存儲卷有生命週期,且獨立於任何特定的容器,但是一個用戶只能通過容器句柄引用Docker管理卷。
  • 孤立卷問題會導致磁盤空間難以恢復。可在dockerrm命令中使用-v選項來避免此問題。
  • 卷容器模式對保證存儲卷有序組織,並避免孤立卷問題非常有用。
  • 數據打包的卷容器模式對給其他容器分發靜態內容非常有用。
  • 多態容器模式是一種組成最小功能組件並最大化重用的方法。

第5章:網絡訪問

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

網絡是一個比較寬泛的概念,需要花費好幾本書才能夠覆蓋全面。Docker提供的單主機網絡工具涉及一些網絡的基礎知識,本章應該能夠幫助讀者對這些知識有一個基礎的認識。在閱讀本章的過程中,你能夠學習到以下知識:

  • Docker提供了四個網絡容器原型:Close容器、Bridged容器、Joined容器和Open容器。
  • Docker創建的網橋網絡會將參與的容器互相綁定到一起,並且綁定到主機所依附的網絡上。
  • 當Docker後臺進程啓動時,可以使用docker命令行選項用自定義的網橋接口替代Docker創建的網橋接口。
  • Docker run命令的選項能夠被用來開放容器接口的端口,綁定容器開放端口到主機的網絡接口上,還能連接其他的容器。
  • 禁止任意的跨容器通信是非常簡單的,並且能夠構建一個深度防禦的系統。
  • 使用鏈接能夠提供一個低負載的本地服務發現機制,並且映射具體的容器依賴。

第6章:隔離——限制危險

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

本章介紹了Linux提供的隔離特性,並討論了Docker如何使用這些特性來構造可配置的容器。有了這些知識,你就能夠自定義容器隔離度,使得Docker能夠適用於任何用戶場景。本章包含了以下內容:

  • Docker使用cgroups讓用戶能夠設置內存限制、CPU權重、CPU核限制,還有設備訪問限制。
  • 每個Docker容器都有各自的IPC命名空間,它們能夠被其他容器或主機共享,以此建立基於共享內存的高速通信。
  • Docker還不支持USR命名空間,因此容器中的用戶和用戶組ID和主機上具有相同ID的用戶和用戶組是相等的。
  • 你可以並且應該使用dockerrun和docker create命令的-u選項使得容器以非root用戶運行。
  • 儘可能避免容器以特權模式運行。
  • Linux能力提供了操作系統特性的授權功能。Docker去除某些能力是爲了提供合理的默認隔離配置。
  • 使用--cap-add和--cap-drop選項來賦予或去除容器的能力。
  • Docker提供了配置選項來集成加強隔離技術,比如SELinux和AppArmor。 這些都是非常強大的工具,任何認真嚴肅的Docker採用者都應該研究它們。

第2部分:鏡像發佈如何打包軟件

第7章:在鏡像中打包軟件

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

這章包含Docker鏡像創建、標籤管理和其他發佈所需要關心內容。這些內容能夠幫助你構建鏡像和成爲一個更加優秀的容器使用者。下面是本章的關鍵內容:

  • 當使用docker commit命令提交容器時,新的鏡像被創建。
  • 當一個容器被提交,啓動容器時的配置也會被編碼進新鏡像的配置文件中。
  • 一個鏡像由多層以棧形式組成,且鏡像由其中的最頂層來標識。
  • 鏡像的磁盤大小就是組成鏡像的層的大小總和。
  • 可以使用docker export和docker import命令將鏡像導出爲壓縮文件格式,或將壓縮文件導入到鏡像。
  • docker tag 命令能夠被用來對同一個倉庫賦予多個標籤。
  • 倉庫維護者應該保持標籤的實用性,讓用戶更容易採用和遷移控制。
  • 將軟件的最新穩定版標記爲latest.
  • 提供細粒度、重疊的標籤,這有利於用戶掌控軟件的版本進展。

第8章:構建自動化和高級鏡像設置

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

大多數Docker鏡像都是從Dockerfile自動構建的。本章包含了Docker 提供的構建自動化方法,還有Dockerfile 的最佳實踐。在學習下一章內容前,請確保你已經理解了本章的關鍵內容:

  • Docker提供了一個鏡像自動化構建程序,它會從Dockerfile中讀取指令來構建鏡像。
  • 每一個Dockerfile指令都會創建一一個鏡像層。
  • 儘可能地合併指令,這樣能夠減少鏡像的大小和層的數量。
  • Dockerfiles包含了能夠設置鏡像元數據的指令,比如說默認用戶、開放端口、默認命令和入口點。
  • 其他的Dockerfile指令能從本地文件系統或遠程目錄複製文件到構建的鏡像中。
  • 下游的構建會繼承上游Dockerfile中ONBUIILD指令設置的構建觸發。
  • 啓動腳本應該用來在啓動主要應用前驗證容器的執行,上下文。
  • 一個有效的執行上下文應該擁有正確的環境變量集合,網絡依賴的可用性和一個合適的用戶配置。
  • init程序能夠被用來啓動多個進程、監控這些進程、清除孤立的進程和轉發信號量到子進程中。
  • 應該使用內容可尋址鏡像標識符,創建非root的默認用戶和禁止或去除任何帶有SUID或SGID權限的可執行文件來加固鏡像。

第9章:公有和私有軟件分發

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

本章涵蓋了各種軟件分發的機制以及Docker在每個分發機制方面的價值貢獻,最近實施了分發渠道或者目前正在這樣做的讀者可能需要額外的洞察力來審視他們的解決方案,而其他的讀者會了解更多有效的選擇。在任何情況下,重要的是在繼續往下閱讀之前,要確保你已經獲得了以下的知識:

  • 有一個選擇的選項圖譜顯示了你的選擇範圍。
  • 你應該總是使用一組一致的選擇標準,以評估你的分發選項並確定應該使用哪個方法。
  • 託管的公有倉庫提供了出色的項目可見性,是免費的,並且只需要非常少的經驗就可以採用。
  • 因爲鏡像是由一個受信任的第三方構建的,所以消費者將對其自動構建產生的鏡像有更高程度的信任。
  • 託管的私有倉庫對於小型團隊是划算的,提供了令人滿意的訪問控制。
  • 運行自己的Registry使你能夠構建適合特殊使用案例的基礎設施,並且不需要放棄Docker的分發設施。
  • 將鏡像分發爲文件,可以用任何文件共享系統來完成。
  • 鏡像源代碼分發是非常彈性的,但是在你運用的時候會非常複雜,使用流行的源代碼分發工具和模式會讓事情變得簡單。

第10章:運行自定義Registry

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

本章深入探討了如何從分發項目構建一個Docker Registry, 這個信息對於打算部署自己的Registry以及想要開發一-個可以有深入瞭解的主鏡像分發渠道的讀者是非常重要的,該章具體涵蓋了以下幾點:

  • 一個Docker Registry 是由其公開的API定義的,分發項目是一個對於Registry API V2的開源實現。
  • 運行你自己的Registry 很簡單,從registry:2鏡像啓動一個容器即可。
  • 分發工程通過YAML文件配置。
  • 實現有多個客戶端的集中式的Registry, 通常需要實現一個反向代理,採用TLS,並添加身份認證機制。
  • 身份認證可以移到反向代理或者由Registry本身實現。
  • 雖然有其他身份認證機制可用,HTTP基礎身份認證是最簡單的配置,並最受歡迎。
  • 反向代理層可以幫助解決RegistryAPI對於多個客戶端版本的兼容性問題。
  • 在生產環境中通過綁定加載卷和環境變量配置覆蓋來注入機密材料,不要提交機密材料到鏡像裏。
  • 集中式Registry考慮採用遠程BLOB存儲,比如Azure、 S3或者Ceph。
  • 分發項目可以通過創建一個元數據緩存(基於Redis) 或者採用Amazon web服務CloudFront存儲中間件這兩種方式配置爲可伸縮的。
  • 將分發項目與你剩下的部署項目、分佈式系統和數據中心基礎設施通過通知集成,非常簡單。
  • 通知以JSON格式推送事件數據到已配置的端點。

第3部分:多容器和多主機環境

第11章:Docker Compose聲明式環境

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

本章聚焦於一個名爲Docker Compose的Docker客戶端的輔助工具,其提供了緩解單調沉悶的容器命令行管理工作的功能,本章包括以下幾個方面:

  • Docker Compose 是一個用於定義、啓動和管理服務的工具,其中的服務被定義爲Docker容器的一個或多個副本。
  • Compose使用YAML配置文件來提供環境定義。
  • 使用Docker-compose命令行程序,你可以構建鏡像、啓動和管理服務、擴展服務並在任何運行DockerDaemon的主機上查看日誌。
  • 在項目中管理環境和迭代的Compose命令,類似於docker命令行。構建、啓動、停止、刪除和列出服務,所有這些都相當於單個容器關注的那些。
  • 有了DockerCompose,你可以通過運行一個up和down命令來伸縮容器數目。
  • 藉助於YAML格式的聲明式環境配置可以啓用環境版本控制、共享、迭代和一致性。

第12章:Docker Machine和Swarm集羣

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

阿里P8大佬,耗時72小時整理的Docker實戰筆記,你值得擁有

 

Docker Machine和Docker Swarm都爲Docker Engine提供了增強應用程序的功能,這些和其他相關技術將幫助你運用在本書中所學到的從一開始在一臺單獨的計算機上使用Docker到在多臺計算機上管理容器集羣的知識。當你小有所成時,對於以下幾點有一個全面深入的瞭解是非常重要的:

  • 用戶可以使用DockerMachine的create命令創建一個本地虛擬機或者在雲上創建一臺Machine。
  • Docker Machine 的env和config 子命令可用於配置Docker客戶端與DockerMachine提供的遠程Docker Engine-起 工作。
  • Docker Swarm是一個向後兼容Docker遠程API的協議,並且可以在一組成員節點上提供集羣設施。
  • Swarm manager程序實現了Swarm API, 並且爲集羣處理容器調度工作。
  • Docker Machine爲Swarm node和manager都提供了flag。
  • DockerSawrm提供了三種不同的調度算法,可以使用過濾器進行調整。
  • DockerEngine的標籤和其他默認屬性可以通過容器調度約束用作過濾標準。
  • 容器調度關聯可以用來在同- -臺主機上將容器置爲另外的容器, 這些容器或者鏡像匹配一個已提供的模式或者表達式。
  • 當任何一個Docker客戶端被配置爲與- 一個Swarm端點進行通信時,客戶端將與整個Swarm互動,就好像是一臺Docker Machine一樣。
  • Docker Swarm目前調度在同一個節點上依賴的容器,直到多主機網絡的發行版發佈,或者你可以提供另一個服務發現機制並禁用Swarm的依賴性過濾器。
  • 多主機網絡將從Docker容器中的應用程序關注點抽象容器位置信息,每個容器在Overlay網絡上都將是一臺主機。

後記

Docker背後的想法是很簡單的,創建一個輕量級的虛擬環境,稱之爲容器,其僅持有你的應用程序及其依賴。Docker Engine使用主機操作系統來構建和管理這些容器。它們易於安裝、管理和刪除,容器內運行的應用程序共享資源,使得它們的足跡很微小。

《Docker實戰》教會我們如何創建、部署和管理Docker容器託管的應用程序,在以一個清晰透徹的對於Docker模式的開篇介紹之後,你將會學到如何在容器內打包應用,包括測試和分發應用的技術。你還將學習如何編排容器和應用程序以及它們的安裝和卸載。本篇使用精心設計的示例教你如何從安裝、刪除到編排容器和應用程序。從開發和測試機器到全面的雲服務部署的這些領域一路走下來,你會發現使用Docker 的各種技術。

以上就是小編幫大家整理的Docker實戰,因爲篇幅限制,更多細節無法展開,只是幫大家整理了小結,方便大家整理預覽,需要完整無缺頁版的朋友,請轉發並關注小編,並私信回覆【學習】即可哦~

喜歡小編請多多點贊評論轉發,關注小編,你們的支持就是小編最大的動力!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章