這次我報名了小賴老師的 Docker 實戰指南工作坊。先聊聊我的背景和報名動機。
為什麼我要報名這門課?
幾年前,我從完全沒概念開始,硬著頭皮把公司的專案打包進 Docker,最後成功部署到 AWS EC2。聽起來簡單的一句話,實際上卻是我花了將近三個月,才拼湊出一個「能跑得起來」的服務:包含 HTTPS 憑證、資料庫、背景排程,經歷了無數錯誤與血淚才完成。那段過程我甚至寫成了鐵人賽文章 30 天學習 Docker 部署你的專案,同時也收錄在我的部落格 Krystal 的桃花源。
但即使有這樣的經驗,我始終不敢說自己「真的會 Docker」。因為在部署過程裡,我雖然能靠 Google 和 GPT 拚湊出解法,卻常常不理解為什麼錯誤會發生、為什麼這樣寫就能跑成功。很多時候只是「誤打誤撞」的成果。雖然寫鐵人賽文章時,我查了更多資料,對 Docker 有更深一點的理解,但也僅僅停留在「看得懂語法,大概知道 Docker 在幹嘛」的程度。
直到有前幾期報名過的朋友,跟我大力推薦這門課,才讓我下定決心報名!他說小賴老師最大的特色,不是教你怎麼寫指令,而是把 Docker 背後的底層邏輯講得清楚,且淺顯易懂。身為工程師兼講師的我知道,會寫程式的人很多,但能把複雜技術講到讓人聽懂,才是真正的挑戰。於是,我報名這堂課,親自體驗老師是如何讓 Docker 變得「不只是能動,而是能懂」。
課程內容與收穫
兩天的課程,讓我深刻體會到朋友說的那句話:「小賴老師最大的特色,不是教你怎麼寫指令,而是能把 Docker 背後的邏輯講得清楚,還能講到你懂。」
過去的我只知道「每個 container 是獨立的執行環境」,卻從沒想過為什麼。老師從 process 的觀念 開始講起,延伸到為什麼 container 的 process 能形成獨立環境,甚至進一步解釋了 PID 1 在 container 裡的重要性 —— 為什麼 container 的啟動與結束要依賴它?這是我之前完全沒連結起來的知識點。
接著談到 image。以前我只模糊知道它是「一層一層」的,但老師用實驗方式證明給我們看:
同一個 image run 出兩個 container,修改一個、保留另一個,再 commit 回去。
我們清楚看到 image 是唯讀的,而改動的部分其實是被「額外記錄」起來。
這種「用實驗去驗證」的方式,讓我第一次真的理解 image 為什麼是唯讀的、Docker 又是怎麼追蹤差異的。
到了 network 的章節,老師解釋得更是一針見血。以前我總是把「Docker 的 network」和「我平常連 Wi-Fi」混為一談,但上課後我理解了它的底層原理,也知道什麼情境該用自訂網路,為什麼資料庫和 Web app 要在同一個網路,以及不同網路間又該如何連結。這讓我對 Docker 的網路機制有了系統性的掌握。
然後是 volume。以前我只是知道「它能保存資料」,但這次我更明白了它存在的必要性:避免 container remove 後資料跟著消失,讓專案能安全持久地運行。
最後,來到我最期待的撰寫 Dockerfile 與 compose.yaml。當初自學時,寫 Dockerfile 簡直像走在迷霧裡(完全不知道自己現在到底在寫什麼)。老師用一句話像當頭棒喝點醒了我:
「寫 Dockerfile,不是打開編輯器就開始寫,而是要先想:假設我現在進到一台空白的機器,要啟動專案,第一步該做什麼?」
原來以前的我不會爬就想學跑步QQ
這句話直接讓我有了思考的框架。根據上課內容我統整出我撰寫 Dockerfile 應該要的邏輯步驟
找到合適的 base image (儘量使用官方且輕量)
設定必要的環境變數(可以使用 .env 檔案)
安裝相關套件(一行完成更新、安裝、清理)
複製專案檔案(可利用 .dockerignore 過濾掉不必要的檔案)
移除不需要的檔案
設定啟動指令
更重要的是,他告訴我們:Dockerfile 並不是「硬性規定的順序」,而是要依據 image layer + cache 特性 來決定先後。原則很簡單卻很實用:
「越少變動的步驟放越上面,這樣才能最大化 cache,讓 build 更快。」
什麼樣的人適合上這門課?
完全沒用過 Docker,但對容器化部署有興趣的人
曾經使用 Docker,但不確定自己是否真正理解的人
正在使用 Docker,遇到 build、network、volume 等難題的人
想深入理解 Docker 底層原理,提高排錯與開發效率的人
單純想測試自己 Docker 技術程度的人
如果你也曾像我一樣「能用但不懂」,這門課會幫你建立完整的底層邏輯,讓 Docker 從「能動」變成「能懂」。
上完課後,我的收穫
以前很多操作都是靠試錯和 Google 拚湊出來的,但現在我能清楚知道每個步驟背後的原因,從 image、container、network 到 volume,都能快速判斷該如何操作。
這不僅讓日常專案部署更有效率,也大大降低排錯成本。甚至在公司群組裡,我能現學現用,幫同事解釋老闆的問題。
公司現學現用圖
簡單來說,這門課讓我從「會用 Docker」升級到「真正懂 Docker」,這才是最大的價值。
最後如果要說有什麼建議的話,那就是時數不夠啦!課程內容實在太精實,只有兩個週六的下午時間,即使老師每堂課都加課快一小時,還是有很多準備好的講義來不及講完。非常建議大家睡飽再來上課,因為全程都乾貨滿滿,沒睡飽可能會像忘了掛 volume,一下課資料就全都掉光光。