Naposledy aktivní 5 months ago

這組 Dockerfile 和 docker-compose.yml 範本,幫你輕鬆將 Python 應用程式打包成 Docker 映像檔。它會自動處理相依套件安裝、Playwright 瀏覽器設定,並將程式碼即時同步到容器內,讓你在 Docker 環境下開發、部署都更順手。

Dockerfile Raw
1# Dockerfile
2
3# 使用 Python 官方的 slim-bookworm 映像作為基礎 (Python 3.12, Debian 12)
4# slim 版本比較輕量,適合部署
5FROM python:3.12-slim-bookworm
6
7# 安裝系統依賴套件。這些是常見用於網頁自動化 (Playwright) 和影像處理 (OpenCV) 的依賴。
8# 請根據你的專案需求,移除不需要的套件,以減少映像檔大小。
9# apt-get update 用來更新套件清單,apt-get install -y --no-install-recommends 安裝指定的套件
10# --no-install-recommends 會避免安裝非必要的建議套件
11RUN apt-get update && apt-get install -y --no-install-recommends \
12 build-essential \
13 libsecret-1-0 \
14 libgtk-3-0 \
15 libgdk-pixbuf2.0-0 \
16 libxss1 \
17 libasound2 \
18 libdrm-dev \
19 libgbm-dev \
20 libnss3-dev \
21 libatk-bridge2.0-0 \
22 libcups2 \
23 libxrandr2 \
24 libxcomposite1 \
25 libxcursor1 \
26 libxdamage1 \
27 libxext6 \
28 libxfixes3 \
29 libxi6 \
30 libxrender1 \
31 libxtst6 \
32 curl \
33 gnupg \
34 ca-certificates \
35 libgl1 \
36 tesseract-ocr \
37 tesseract-ocr-eng \
38 && rm -rf /var/lib/apt/lists/* # 清理 apt 快取,讓映像檔更小
39
40# 設定應用程式在容器內的工作目錄
41WORKDIR /app
42
43# 複製你的 Python 依賴清單到工作目錄
44COPY requirements.txt ./
45
46# 安裝 Python 依賴套件
47# --no-cache-dir 會避免快取 pip 下載的套件,再次減少映像檔大小
48RUN pip install --no-cache-dir -r requirements.txt
49
50# 如果你的應用程式需要用到 Playwright,這裡會安裝其瀏覽器驅動。
51# 如果不需要,你可以把這行註解掉或移除。
52# 這會把瀏覽器安裝到 /root/.cache/ms-playwright
53RUN python -m playwright install chromium firefox webkit
54
55# 如果使用 Playwright,設定環境變數,讓 Playwright 知道瀏覽器在哪裡
56# 如果不需要 Playwright,這行也可以移除。
57ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
58
59# 複製你的應用程式碼到 Image 中
60# 通常會把整個專案複製進去
61# 請記得更新這裡的來源和目的地,例如 `COPY . .` 如果你的 Dockerfile 在專案根目錄
62# COPY . .
63
64# 定義容器啟動時執行的命令
65# 將 'your_main_app_file.py' 替換成你的主要執行檔名稱
66CMD ["python", "your_main_app_file.py"]
67
docker-compose.yml Raw
1# docker-compose.yml
2
3# 定義你的服務
4services:
5 # 這是你的服務名稱,請改成你專案實際的服務名稱,例如 web-app 或 api-service
6 your-service-name:
7 # 告訴 Compose 在當前目錄尋找 Dockerfile 來建構映像檔
8 build: .
9 # 指定容器名稱,方便辨識和管理
10 container_name: your-container-name
11 # 容器停止或 Docker 服務重啟時,自動重啟此服務
12 restart: always
13
14 # 掛載卷宗 (volumes) - 將主機上的程式碼映射到容器內部
15 # 這裡的 ./ 是指 docker-compose.yml 所在目錄 (通常是你的專案根目錄)
16 # /app 是容器內的工作目錄 (Dockerfile 中設定的 WORKDIR)
17 # 這樣主機上的程式碼變動會即時反映到容器內,方便開發和偵錯
18 volumes:
19 - ./:/app
20
21 # 環境變數 - 載入 .env 檔案中的變數
22 # docker-compose 預設會自動讀取與 docker-compose.yml 同目錄下的 .env 檔案
23 env_file:
24 - .env
25
26 # 這裡不需要 command,因為 Dockerfile 裡面的 CMD 或 ENTRYPOINT 已經指定了啟動命令
27 # 如果你的服務需要覆寫 Dockerfile 中的 CMD,可以在這裡定義 command:
28 # command: ["python", "another_main_file.py"]
29
30 # 如果你的服務需要公開埠號,可以在這裡設定 ports:
31 # ports:
32 # - "8000:8000" # 將主機的 8000 埠映射到容器的 8000 埠
33
34 # 如果你的服務依賴其他服務(例如資料庫),可以在這裡設定 depends_on:
35 # depends_on:
36 # - your-database-service
37
requirements.txt Raw
1loguru
2opencv-python
3numpy
4pendulum
5Pillow
6playwright
7pytesseract
8python-dotenv
9schedule