前面使用 Docker 時,不管是 hello-world、Nginx,都是直接使用別人已經建立好的 Image。
但如果今天想把自己的程式放進 Docker,就需要自己建立 Image。
這時就會使用到 Dockerfile。
Dockerfile 是一個純文字檔案,裡面會記錄建立 Image 時需要執行的步驟。
可以簡單理解成:
Dockerfile
↓
建立 Image
↓
建立 Container
↓
執行程式
就像是一份「製作 Image 的說明書」,Docker 會按照裡面的指令一步一步建立需要的環境。
首先建立一個新的資料夾,例如:
my-docker-app
接著在裡面新增一個檔案:
Dockerfile
要注意 Dockerfile 預設沒有副檔名,不是 Dockerfile.txt。
今天先建立一個簡單的 Node.js 環境:
FROM node:20
WORKDIR /app
COPY . .
CMD ["node", "app.js"]
看起來只有幾行,但每一行都有不同的作用。
FROM node:20
FROM 用來指定建立 Image 時要使用的基礎 Image。
這裡代表使用 Node.js 20 的 Image。
WORKDIR /app
設定 Container 裡的工作目錄。
後面的操作就會以 /app 作為主要工作位置。
COPY . .
COPY 可以將本機的檔案複製到 Image 裡。
這裡的意思就是把目前資料夾中的內容複製到 Container 的工作目錄。
CMD ["node", "app.js"]
CMD 用來設定 Container 啟動後預設要執行的指令。
這裡代表執行:
node app.js
今天最重要的概念可以整理成:
撰寫 Dockerfile
↓
docker build
↓
建立 Image
↓
docker run
↓
建立 Container
前面幾天我們都是直接下載別人的 Image,現在則開始準備建立屬於自己的 Image。
下一步就是實際使用 docker build 將 Dockerfile 建立成 Image。
Dockerfile.txt → ✅ Dockerfile 預設不需要副檔名FROM → ✅ Dockerfile 通常需要指定基礎 ImageCOPY 路徑設定錯誤 → ✅ 注意本機與 Container 中的檔案位置Dockerfile
FROM 的用途WORKDIR 的用途COPY 的用途CMD 的用途今天第一次接觸 Dockerfile,之前使用 Docker 都是直接下載現成的 Image,所以沒有特別想過這些 Image 是怎麼建立出來的。
學習 Dockerfile 後,才知道可以把建立環境需要的步驟寫在一個檔案裡,再讓 Docker 根據這些設定建立 Image。
目前先認識了 FROM、WORKDIR、COPY 和 CMD 幾個基本指令。雖然還沒有真正把自己的 Image 建立出來,但已經大概了解 Dockerfile 在整個流程中的位置,下一步就可以實際使用 docker build 來建立自己的 Image。