一直以來都對 Docker 很好奇,不理解這隻小鯨魚厲害在哪裡?
之前問同事:Docker 好用在哪裡?
同事:他可以讓你的電腦環境保持乾淨、可以快速打包你的專案、可以快速部署…
身為一位菜鳥工程師,真的是有聽沒有懂XD
偶然的機會接觸到小賴老師的 Docker 課程,我只能說太超值了!
課程回顧
首先,老師先介紹整個 Docker 運作的基本概念,接著進入了指令的環節,我以為老師會直接帶我們一行一行輸入指令然後打包一個專案,但沒有,老師先從最基本的終端機指令開始說起,再來帶到 Docker 指令,我以為的 Docker 指令:
docker container run
docker container stop
老師教的 Docker 指令:
指令的組成:Docker 對象 指令 (參數)
1. docker container run -it alpine ash
建立並啟動一個基於 Alpine Linux 的新容器,並使用互動式終端機開啟 ash shell
2. docker container ls
查看所有運行中的容器
3. docker container prune
移除所有停止運行的容器(!)
4. docker container run –rm echo "hello"
建立並啟動一個基於 Alpine 的臨時容器,執行 echo hello
,結束後 自動刪除容器(因為有 –rm 參數)
5. docker container stop {id}
停止指定的容器
6. docker exec -it {container id} ash
在 已運行中的容器 裡開一個新的互動式終端機,並進入 ash shell
7. docker container logs -f {id}
查看指定容器的 日誌輸出
8. docker container diff {id}
查看該容器做過什麼事
9. docker container rm {container name or id}
移除容器
老師特別補充:
-d 在背景執行
-i 允許互動
-t 開啟類似終端機介面
課堂趣事
老師特別示範如果沒加 -i
會生什麼事
docker container run -t alpine ash
結果:完全不能互動,連想要退出 exit 都沒用 哈哈哈
第一天的課程感覺主要是在打穩基礎,講的內容非常細,每一個指令、每一個單字都解釋了它的用途,也實作說明下這個指令會發生什麼事。親眼看到實際操作的結果,遠比只是文字敘述更容易記得住;同時也有介紹到 container 的用途,以及它與 image 之間的關係,讓我對 Docker 的基本概念有了初步的理解。
第二天的課程則是更進一步,開始把 image 和 container 串連起來。老師先帶我們理解 docker image 的來源,是由 Dockerfile 透過 docker build 建立出來的,然後再用這些 image 去產生 container。這樣的關係讓我能把抽象的概念和實際操作連結起來,理解「image 就像藍圖,container 則是依照藍圖生成的實體」。
在操作中我也更清楚地看到:
- 每個 container 都是獨立的環境,互相之間不會直接干擾。
- 如果要讓 container 彼此溝通,需要透過網路設定或 docker 的 network 功能。
- 這樣的設計讓服務之間能保持獨立性,但又能在需要的時候建立連線,達到彈性部署的效果。 整體來說,第二天的內容讓我開始能將第一天的知識串起來,從「知道指令」到「理解架構與流程」,對 Docker 的運作模式有更完整的認識。
關於這門課
小賴老師教學的內容遠比他 ppt 做的還要多還要細,能感受到老師想傳授的秘訣真的很多,可惜受限於時間關係,沒辦法全部教完,不過也能理解,畢竟老師的書叫「Docker實戰6堂課」,要濃縮成兩堂課教完真的是太為難老師了 XDD。
好在老師提供很好的售後服務(?),除了有完整的簡報檔可以隨時觀看以及 Notion 完整版教材,還有課後社群可以發問、交流,等於課程結束後學習並不會中斷。這樣的安排讓人覺得很貼心,也減少了「上完課就忘光」的焦慮。
整體來說,這兩天的課程雖然緊湊,但收穫很大,既有基礎知識的扎根,也有實務操作的體驗。讓我對 Docker 不再只是模糊的概念,而是能實際理解它在專案中的價值與應用,覺得這堂課真的物超所值。
本文同步發佈於作者的 HackMD 網站。