【docker系列1】容器時代的引領者

Docker 的發展歷史

2013 年 Docker 第一次在 PyCon 上亮相,隨後在 Hacker News 上引起了強烈的反響,之後在 GitHub 上開源,從此它正式開啓了 Docker 的時代。

到現在無論我們在談 Container、Docker、Kubernetes 或者這整個生態中的其他產品或技術,不可避免的都需要或多或少的 Docker 相關知識。

在近些年,也出來過不少的類 Docker 產品,比如說 rkt,曾經也有人說類似 rkt 這樣的產品出來,將取代 Docker 的地位。但幾年過去了 Docker 仍然是容器技術的首選,而 rkt 則已經因爲項目失去活力被 CNCF 歸檔(當然不可否認 rkt 也曾爲容器技術的發展做出了不少貢獻)。

Docker 的優勢

Docker 一開始能吸引衆多用戶,其中一個很重要的因素就在於它上手使用很簡單。在安裝完 Docker 之後,一行命令語句docker run hello-world 便已經運行了一個容器,一切看着都極其簡單。

然而在實際的生產使用中,我們所運行的容器包含着業務代碼,生產環境的網絡、系統等因素也都很複雜。一旦出現問題,如何才能最高效地定位並解決問題,並且保證之後不再有類似的問題發生?

要做到這些,就需要對 Docker 技術有足夠的瞭解。在大型公司中,都有專職負責基礎支撐技術的開發或運維人員,而在中小型企業可能就很少有這類團隊或者壓根沒有,需要開發人員自行解決。如果對 Docker 技術不甚瞭解,解決問題需要花費大量的時間,而且可能並不能徹底解決問題。

另一方面,不一定只是在容器運行過程時纔會遇到問題,我們可能在構建鏡像的時候就已經遇到了各種各樣的問題:

  • 構建的鏡像體積爲什麼這麼大
  • Pull 鏡像爲什麼這麼慢
  • 新構建的鏡像爲什麼不生效
  • 構建鏡像爲什麼這麼久

我們往往在遇到問題時纔會想着怎麼解決問題,但如果不成體系的學習,終究很難做到遊刃有餘。而且成體系的學習,有助於鞏固知識,將其吸收並轉化爲自己內在的能力。

現在很多崗位的招聘需求上都有寫需要了解或者掌握 Docker,或者將掌握 Docker 等容器技術作爲加分項目,並且這個要求不侷限於運維或者後端開發等崗位。

學習計劃

  1. Docker 入門

    • 第一篇,帶你瞭解 Docker 容器技術生態的發展脈絡;
    • 第二篇,是爲剛入門 Docker 的讀者準備的,也是爲後續章節進行鋪墊;
    • 第三篇是很多讀者或公司都常會困惑的問題,Docker 與 Linux 內核兼容性如何,要上生產環境該選擇哪個版本?我會在這一篇中與你分享,讓你不再困惑。
  2. Docker 核心特性:這個大模塊圍繞 Docker 的核心知識點,拆分成了 7 大部分,分別是容器、鏡像、CI/CD、架構、存儲、安全和網絡。

    這些是學習核心內容,在這部分內容中,我將基本按照從實踐到原理的方式進行組織,讓你從根兒上知道如何用,以及爲什麼這麼用。

    • 在容器篇,我會先給你介紹容器生命週期管理相關的內容,那你對容器的使用有個基本認識;之後會對容器資源進行管理;並對容器的核心進行深入剖析;最後動手來自己寫容器。

    • 在鏡像篇,將介紹鏡像完整的生命週期管理;鏡像是如何構建與分發的;如何使用 Dockerfile 進行鏡像構建;並介紹 Docker 的下一代構建系統是如何提速近 10 倍的;接下來結合我的實際鏡像爲你介紹 Dockerfile 的優化和最佳實踐;最後分別深入源碼爲你介紹鏡像構建、分發的原理,以及認證流程和原理。

    • 在 CI/CD 篇,會介紹如何將 Docker 與 CI/CD 結合,同時介紹適用於生產環境使用的 CI/CD pipeline,希望能爲讀者建設 CI/CD 提供一些啓發。

    • 架構篇中我會結合源碼介紹 Docker 的核心架構,以及其是如何協作的;Docker 提供了一種可擴展的 Plugin 機制,在特定場景下使用 Plugin 擴展 Docker 也是一種不錯的選擇;接下來會結合實際經驗介紹容器監控和日誌方面的具體實踐方案,希望能爲讀者在實際使用中提供一個參考;最後會與讀者分享我所總結的 Docker 相關問題的定位及調試手段 正確的方法能讓你排查問題的效率翻倍。

    • 存儲篇主要介紹 Docker 中 volume 的使用;以及如何進行數據備份和恢復;最後會深入內部介紹現在 Docker 最推薦的 Overlay2 存儲驅動的工作原理。

    • 安全篇會涉及鏡像和容器運行時的安全;以及會涉及一些的 Linux 內核安全相關的知識,詳細介紹如何利用 Linux 內核的安全模塊爲 Docker 保駕護航。

    • 網絡篇除了介紹基礎網絡知識外,還會介紹如何定製 bridge 網絡;iptables 始終是一個很核心的知識點,我會爲讀者將 Docker 與 iptables 梳理清楚,以及如何自定義的進行網絡管理;最後詳細介紹了 docker-proxy,Docker 內部 DNS 以及 Docker 的核心網絡知識,讓網絡不再成爲一個攔路虎。

  3. 生態擴展:不得不說“開源”是 Docker 成長迅速的關鍵,在這個模塊中,我將詳細介紹 Docker 與 Kubernetes 間的聯繫,以及容器生態中的其他組件; 與讀者分享如何參與到 Docker 容器生態內,當然這裏也會涉及到 Docker 現在的代碼組織相關的內容;最後將與讀者探討 Docker 生態未來的走向。

Docker 等容器技術正處於技術的熱潮中,將其內化爲自己的技術實力,不僅可以提升自己日常的開發部署效率,更可以作爲面試的一個加分項。同時,深入原理後,相信你也會從中學習到很多不只侷限於 Docker 自身的知識。

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