Dockerfile
Dockerfile 是「怎麼做」的規則,而 Image 是「照規則做完後」的結果;一個負責描述過程,一個負責被拿來用,Dockerfile 本質上就是一份「把環境準備流程寫成程式碼」的說明書,讓電腦每次都用一模一樣的步驟,生出一模一樣的執行環境

假設寫了一個後端 API,你的電腦可以跑,而同事電腦版本不合,可能是因為環境完全不同,如果沒有 Dockerfile,只能用嘴巴或 README 描述:「先裝這個、再裝那個、版本要對喔」,而有 Dockerfile,等於是直接說「照這份 Dockerfile build,就一定能跑。」


撰寫 Dockerfile
- 先寫 Dockerfile ,其中裡面要寫清楚從哪個基底環境開始、要裝哪些套件、程式放哪、容器啟動要幹嘛
- 設定工作目錄,決定之後所有指令是在容器裡的哪個資料夾執行
- 準備需要的檔案,把程式碼、設定檔複製進容器
- 安裝依賴套件,用指令把程式需要的套件一次裝好
- 設定啟動方式,告訴 Docker 這個環境「跑起來」時,要執行哪個指令
👉 Docker 會照這個順序,一行一行執行,最後產生一個「映像檔(Image)」

執行 build
Docker 讀 Dockerfile,一行一行照做產生 Image,每一步都變成一層(layer),最後組合成一個 Image

Image 被拿來用
可以開 Container、可以丟給同事、可以丟上 Registry
當我需要 Ubuntu + Node 18 + npm install 來跑 server.js,Image 表示「好,這一包已經全部準備好了」,如果程式壞了,就改 Dockerfile → 重新 build → 新 Image,而不是「進去 Image 裡面手改」


準備
1 | ## 準備資料夾 |
server.js
1 | //node server.js 執行專案 |
Dockerfile 撰寫
1 | # 1) 選一個 base image(這是「唯讀層」的起點) |
FROM、WORKDIR、COPY、EXPOSE、CMD,這就是 Dockerfile 最核心的骨架

Build:從 Dockerfile 做出 image
1 | ## 把「Dockerfile + 當下目錄內容」➜ 組裝成一個 Image |
Run:用 image 啟動 container
1 | ## 把容器的 3000 映射到你本機 3000 |
進入 container 看檔案
1 | ## 進去 shell |
清理
1 | ## 進去 shell |


All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.



