跳轉到主要內容
Dockerfile Image Dockerfile 是一份「建映像的腳本」:一行一條指令,從基底映像開始,一步步複製檔案、裝相依、設定環境,最後產出一張可重現的映像。這頁講它跟 build context 的關係,並從零搭一個。前提是你已會基本 docker 指令(見 CLI 指令)。

build context 與 tag

docker build -t myapp:1.0 . 這行:
  • -t myapp:1.0:映像 tag(名稱:版本,省略版本預設 latest)。
  • 結尾的 .build context。builder 只能看到 context 內的檔案,context 外的路徑讀不到。
  • -f:指定 Dockerfile 位置(預設是 context 根目錄的 Dockerfile)。
專案目錄(build context)
├── Dockerfile          ← 指令清單
├── .dockerignore       ← 排除清單
├── app.py
└── requirements.txt

.dockerignore

語法同 .gitignore,放在 context 根目錄,把不該送進 builder 的東西擋掉,縮小 context 也避免無謂的 cache 失效:
.git
__pycache__
*.pyc
.env
.venv
node_modules
*.md
tmp/
支援 ** 多層萬用與 ! 否定(例外保留)。context 越大送得越慢,.dockerignore 是該預設準備的一個檔。

從零搭一個 Dockerfile

1

挑基底映像(FROM)

從一個合適的基底開始,固定版本 tag 不要用 latest(選映像見 選擇映像):
FROM python:3.12-slim
2

設工作目錄(WORKDIR)

後續的 COPY / RUN 都以此為基準,目錄不存在會自動建:
WORKDIR /app
3

裝相依、複製程式(COPY + RUN)

先複製相依清單、裝好,再複製原始碼(順序有講究,見 layer cache):
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
4

設定啟動指令(CMD)

容器啟動時跑什麼:
CMD ["python", "app.py"]
5

build 成映像

在 Dockerfile 所在目錄執行,. 是 build context:
docker build -t myapp:1.0 .
build 跑起來(BuildKit)長這樣,每一層對應一條指令:

接下來

官方參考:docs.docker.com/build/concepts/context