Dockerfile 是一個文字檔案,包含一系列指令,用於自動化 Docker 映像檔的建立過程。
以下是 Dockerfile 的基本概念和常用指令:
Dockerfile 的作用
- 自動化映像檔建立: Dockerfile 允許您以程式化的方式定義映像檔的內容,從而實現映像檔建立的自動化和可重複性。
- 版本控制: 您可以將 Dockerfile 納入版本控制系統,以便追蹤映像檔的變更歷史。
- 環境一致性: Dockerfile 確保應用程式在不同的環境中(例如開發、測試和生產環境)以相同的方式執行。
Dockerfile 的基本結構
Dockerfile 由一系列指令組成,每個指令都會在映像檔中建立一個新的層。以下是一些常用的 Dockerfile 指令:
- FROM: 指定基礎映像檔,所有後續指令都基於此映像檔執行。
- RUN: 在映像檔中執行命令,例如安裝軟體套件或執行腳本。
- COPY: 將檔案或目錄從主機複製到映像檔中。
- ADD: 類似於 COPY,但具有額外功能,例如自動解壓縮壓縮檔。
- WORKDIR: 設定工作目錄,所有後續指令都在此目錄中執行。
- EXPOSE: 指定容器將在其上監聽的埠。
- CMD: 指定容器啟動時執行的預設命令。
- ENTRYPOINT: 配置一個可執行容器。
- ENV: 設定環境變數。
- VOLUME: 建立掛載點,用於持久化資料。
使用 Dockerfile 的步驟
- 建立 Dockerfile: 在文字編輯器中建立一個名為 Dockerfile 的檔案。
- 撰寫 Dockerfile 指令: 在 Dockerfile 中撰寫所需的指令,以定義映像檔的內容。
- 建置映像檔: 使用
docker build
命令根據 Dockerfile 建立映像檔。 - 執行容器: 使用
docker run
命令從映像檔啟動容器。
Dockerfile 的最佳實踐
- 盡量使用官方提供的映像檔作為基礎映像檔。
- 將相關的指令組合在一起,以減少映像檔的層數。
- 使用
.dockerignore
檔案排除不必要的檔案,以縮小映像檔的大小。 - 使用多階段建置(multi-stage builds)來優化映像檔的大小。
- 為映像檔新增TAG,方便管理。
範例 Dockerfile
Dockerfile
# 使用官方的 Python 映像檔作為基礎映像檔
FROM python:3.9-slim-buster
# 設定工作目錄
WORKDIR /app
# 將應用程式程式碼複製到映像檔中
COPY . /app
# 安裝應用程式的相依套件
RUN pip install --no-cache-dir -r requirements.txt
# 指定容器啟動時執行的預設命令
CMD ["python", "app.py"]
沒有留言:
張貼留言