by Elizaveta Rusalskaya on Behanceby Elizaveta Rusalskaya on Behance

直到今年 7 月前,我對 Docker 一直都處於一知半解的狀態,曾經在 Udemy 買過課也看了一部分,或透過各種文章教學來練習指令操作,但皆成效不彰,以致心中對 Docker 總抱有一定的距離感——覺得怎麼就是學不起來呢?

這樣的歷程跟我學 Python 還真有幾分相似,不禁苦笑。

5、6 月求職時也有面試官問到有沒有使用 Docker 的經驗,只能略帶尷尬地表示「接觸過但不熟悉」。作為一個以後端技能為主軸的工程師,這樣的回答難免令自己也感到幾分顏汗,頓時混身不自在。在大家都說 Docker 多麼棒多麼方便的同時,我卻還不甚了解。

後來的工作上需要翻新專案的 Docker 架構(主要是重寫幾個專案的 Dockerfile 和引入 docker-compose),雖然並不複雜,但對 Docker 新手的我而言,仍有一定挑戰,踩了好些坑,也收獲了不少經驗。

至此我才明白:為何之前總是難以入門?

入門 Docker 的最佳姿勢

比起 Python 這樣寫幾行語法就可以執行,立刻秀出結果的技術,Docker 更講究應用場景的建構。否則只是跑幾個容器,pull 幾個 image,事情做是做了,但心中卻激不起什麼漣漪,也就難留下較深刻印象,自然學得吃力。

講白了,就是要「切實感受到它帶來的方便」,否則光看書、看影片,往往很難有感。指令下完,容器跑完,船過水無痕。我以前的學習經驗大概就是如此。

所以我覺得,如果真心要入門 Docker,比起教材選擇(當然這個也很重要,是本篇主軸),有一個「具體的應用場景」也是必備的要素。

應用需求很重要,尤其是工具

其實所有的技術甚至非程式的技能也莫過如此——要練習、要應用,不過其中對於「應用場景」的要求還是有一定區別。

簡言之:愈工具、愈高階(相較於撰寫程式碼本身)的技能,對應用場景的需求就愈明顯。

以 VS Code 為例,它是「純然的工具」,你可能知道它經過何等的設定與調教後能做到什麼——比如我超愛、對我來說超實用的 editor.tokenColorCustomizations——但如果沒有真的拿來使用(缺乏應用場景),那其實還不如不知道,因為大腦根本記不住。

所以,不得不再次提醒,入門 Docker 最好具備的前提就是有一個實際的 Docker 相關需求,可能是工作上的,也可能是自己的 side project(專案容器化),甚至是為了寫文章!空手學習並不太推薦。

我心中的 Docker 入門三本柱

不知為何又囉嗦了一堆 😂,現在才要進入正題。

講完了前提,我們理解了應用場景的重要性。但話說回來,入門的學習材料要怎麼選擇,依然是挺講究的。甚至可以說,大部分的材料並不適合入門。

尤其在心中還沒有一定 Docker 相關知識架構的時候,看網路文章學習是最不推薦的方式,因為過於零碎。而真的有些底了,看文章往往還不如看官方文件

學習清單

這裡選了一本書和兩堂線上課程,算是我 Docker 啟蒙路上的三大利器。剛好最近有新同事加入團隊,也是和我一樣之前都沒什麼 Docker 經驗,甚至連碰都碰過,就順勢推薦給他。

我畢竟也才剛入門不久,記憶猶新,可以自信地保證,善用這些材料,可以為新手時期節省下不少學習摸索時間。它們分別是:

  1. Hahow 線上課:Docker 部署入門完全指南-圖片速學攻略
  2. 書:Docker 工作現場實戰寶典
  3. Udemy 線上課:Docker容器技術從入門到精通

學習指南

必須說明的是,本篇並不是書評或課程心得,不會對上述材料的細節有太多著墨,切入的角度更像是「使用手冊」,主要告訴讀者我為什麼選它?主要哪裡好?怎麼個好法?又或者哪些部分可以先略過等等。總之就是從一個比較高層次的角度來進行論述,告訴你不同材料的優點與學習上的側重點為何。

此外,三者的順序是有意義的。個人強烈建議依照它們被列出的順序來學習,理由我在材料個別介紹的時候會說明。

最後,如果覺得三項素材有點多,不想那麼累,那至少前兩項是必須的,第三項就當作是選修,也完全可以。

好,前言到此,以下開始。


一、Docker 部署入門完全指南-圖片速學攻略

本課程的最大賣點就是「圖解」。不過這麼講有點籠統。

說起來,哪個線上課程沒有圖?沒有 PPT?所以有圖還稱不上是賣點,怎麼「解」才是。如果圖片只是用在美美的 UI 呈現或整理,雖然賞心悅目,但和「圖解」二字還沾不上邊。

其實 Docker 入門程課,結構上都大同小異,大概不外乎是這樣的順序:Docker 的價值、Docker CLI 基本、操作容器與映像檔指令、Dockerfile、網路、volume、docker-compose 等等。

圖解的真諦

而我認為這堂課好就好在有把「圖解」二字用在刀口上,不敢說是全部,但前半部講 Docker 架構地方,確實透過了圖片與圖示,相當程度地帶給了我們很好的視覺化理解。而這些環節可能是入門理解時最容易卡關的部分。

尤其是第 7 章,講 Dockerfile 及 build image 時,Docker 內部究竟如何運作,圖片給出了遠勝於文字的呈現:

這是我在別的材料沒有看到的。

有了這些重要的架構認知,可以為初學者打下相對穩固的基礎,所以我將它列在學習的第一位順位。且光是這一章,就讓人覺得不失「圖解」二字的真諦了。

附帶一提,以一個在 Hahow 買了超過 30 堂課的用戶角度來看,它的價格在 Hahow 眾多線上課程中,算是相對實惠的。

二、Docker 工作現場實戰寶典

看完了線上課程,該買本書來調劑調劑了。這可不是開玩笑,說起來,我覺得學習任何一門新技術,一書加一線上課,確實是不錯的搭配,畢竟影像聲音和文字各有呈現上的優勢,對知識體系的建立可謂相輔相成。

為什麼選這本書而不是別本,其實我在〈天瓏書局三訪,兼論我挑程式書的小原則〉一文中就大致提過了:

回到 Docker 選書,入手的這本就是 Dockerfile 指令講解詳細且還一併闡述了基本原理是什麼

上述粗體部分,指的就是分散在書中,每章每節的「如何辦到的」子標題內容,這些絕對是書的最精華。

那時在天瓏翻看了幾本書,就 Docker 操作部分,往往就是告訴你指令,然後展示執行的結果,至於為何該如此做?其中細節卻並不深論,這豈不是只要你依樣畫葫蘆?如此一知半解的介紹怎麼能夠把知識學得透澈、穩固?著實令人懷疑。至少我看得很無感,容易轉眼即忘。

本書的優點是對 Docker 常用指令內涵有較多的著墨,而非僅流於表面操作,其中第 2 到 4 章為新手必讀,是一本值得一看再看的好書。

三、Docker 容器技術從入門到精通

講師肖鵬在 Udemy 上已經開設超過 20 堂課,我自己有買的大概也有 7、8 堂,不敢說皆屬佳作,感受一般的也是有,不過這堂 Docker 課程肯定稱得上是佳作。

令人感動的是,這堂課在今年 7、8 月之間砍掉重練,內容大幅翻新、重錄不說,課程時長還增加到了原來的 2 倍,可謂誠意十足。加上 Udemy 的課本來就便宜,所以十分推薦。

不過光便宜或幅篇長,也不見得是好事,畢竟便宜又大碗的東西在 Udemy 上比比皆是,但你往往沒有時間,就跟 Netflix 上的劇一樣,追也追不完,還是要回歸內容對自己的實用度。

這堂課我最喜歡的部分在於對 Dockerfile 最佳實踐的講解。肖鵬作為一個資深的 DevOps 工程師,使用 Docker 可謂家常便飯,經驗多,所以對這部分著墨也較多。我想,寫出安全、高效能,或至少是規劃合理的 Dockerfile,也確實值得每一個 Docker 使用者追求。

獨立的文件網站

此外,本堂課的另一大貼心之處,就在於其上課講義並不像一般課程,僅以 PPT 形式在影片中呈現,最多附課堂 PPT 讓你下載,而是為此還另外準備了一個獨立的文件網站:Docker Tips,並且這個網站即使不購課也能訪問。

為何說貼心呢?因為我看線上課時都要做 Notion 筆記,如果只能聽老師的上課口述加影片內的 PPT,那很多上課重點我只能把影片加 PPT 截圖後,自己再把老師口述的內容重寫(打字)到筆記,整體過程相對耗時耗力。

有了這個文件網站,部分上課內容我可以直接複製、貼上到筆記中,再依需求自行增刪與補充,大大增加了做筆記的效率,同時省下那些只是單純複述課程內容的打字勞動。


重點整理

Docker 部署入門完全指南-圖片速學攻略

  • 特色:對初學者最抽象、易卡關的部分給予圖解,提升學習效果,打好根基。
  • 推薦章節:全部。因為大部分都是必備知識,作為第一個教材,且課程時長也不長(3 小時 52 分鐘),推薦完課。

Docker 工作現場實戰寶典

  • 特色:對 Docker 指令內涵有較詳細的解說,讓讀者知其然又知其所以然。
  • 推薦章節:1 到 4 章。其餘依需求閱讀。

Docker 容器技術從入門到精通

  • 特色:對 Dockerfile 最佳實踐有較多著墨,且有獨立上課講義(文件)網站,方便複習課程內容與筆記。
  • 推薦章節:1 到 7 章。其餘也是屬於較進階的應用或知識,依需求學習即可。

小結

這三樣學習材料應該非常足夠讓初學者熟悉 Docker 主要能為我們做的事了。

我自己覺得,真正能把 Docker 當工具使用後,確實很能感受到它的魅力所在,尤其是對於簡潔的追求——它能夠輕鬆實現環境的創建、刪除與隔離。

我們不一定都要成為 Docker 大師,但在程式開發的路上有這樣強力的工具相佐,絕對能夠省下更多的力氣,並得到更棒的開發體驗。

不用說,今天就開始學習 Docker 吧!