Docker Init:快速初始化專案環境

在過去,要將一個現有的專案容器化,你必須手動撰寫 Dockerfiledocker-compose.yaml 以及 .dockerignore。對於新手來說,設定正確的參數往往需要花費不少時間查閱文件。

從 Docker Desktop 4.18 版本(以及最新的 Docker v29)開始,官方推出了一個強大的指令:docker init

什麼是 docker init?

docker init 是一個互動式的指令行工具。它會掃描你的專案目錄,識別出你使用的程式語言,並自動產生該專案所需的 Docker 相關設定檔。

目前支援的語言包括:

  • Go
  • Node.js
  • Python
  • Rust
  • ASP.NET
  • Java
  • PHP (以及更多...)

如何使用 docker init?

假設你目前有一個 Node.js 或 Python 專案,請在專案根目錄執行以下指令:

docker init

互動式步驟說明:

執行後,你會進入一個簡單的問答介面:

  1. Select application platform: 選擇你的程式語言(例如:Node)。
  2. Select Node version: 選擇要使用的 Node.js 版本(通常它會自動偵測)。
  3. Which package manager do you want to use?: 選擇套件管理工具(如 npm, yarn, pnpm)。
  4. What is the command to run your app?: 輸入啟動專案的指令(例如:node app.js)。
  5. What port does your server listen on?: 你的應用程式運作在哪個埠號(例如:3000)。

完成設定後,docker init 會自動幫你產生四個檔案(如果已存在會詢問是否覆蓋):

  • Dockerfile:定義如何建置映像檔。
  • docker-compose.yaml:定義如何跑起容器服務(包含資料庫等)。
  • .dockerignore:定義哪些檔案不應被打包進映像檔(例如 node_modules)。
  • README.Docker.md:一份教學,告訴你如何跑起剛剛產生的配置。

為什麼推薦使用?

  1. 符合最佳實踐:它產生的檔案內容通常都會包含安全性與效能優化。例如,它會自動使用 Non-root 使用者來執行程式,並使用 multi-stage build(多階段建置)來縮小映像檔體積。
  2. 節省時間:你不需要再去複製貼上別人的模板,幾秒鐘就能完成基礎設定。
  3. 學習參考:對於初學者,閱讀 docker init 產生的檔案是學習撰寫高品質 Dockerfile 的最好方式。

實戰範例:Python 專案

假設你的目錄下有一個 main.pyrequirements.txt

# 執行初始化
docker init

# 產生的 Dockerfile 片段預覽:
# 它會自動幫你處理環境變數與工作目錄
FROM python:3.11-slim as base
# ... 中間省略 ...
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "main.py"]

初始化完成後,你可以直接執行以下指令啟動你的專案:

docker-compose up --build
即使你的專案語言不在清單中,你也可以選擇 Other。它會提供一個基礎的通用模板,讓你再進行微調。

docker init 是目前將專案容器化最推薦的起手式。掌握了這個工具後,開發效率將會有顯著的提昇。