Mastering Docker Build Cache: Speed Up Your Builds with Cache Mounts

前言 / Introduction 為什麼需要 Docker Cache Mount? 在 Docker 開發過程中,你是否遇到過這些困擾? 重複下載依賴:每次 build 都要重新安裝相同的套件 漫長的等待時間:大型專案的 build 時間動輒 10-20 分鐘 網路資源浪費:重複下載相同的檔案 開發效率低下:頻繁的 build 測試嚴重影響開發節奏 Docker BuildKit Cache Mount 就是解決這些問題的終極方案! 什麼是 Docker Cache Mount? 核心概念 Cache Mount 是 Docker BuildKit 提供的高級功能,它允許你: 緩存依賴目錄:將套件、編譯結果等暫存起來 跨 Build 重用:下次 build 時直接使用緩存 大幅提升速度:減少重複下載和編譯時間 節省網路資源:避免重複傳輸相同檔案 工作原理 第一次 Build → 下載依賴 → 安裝套件 → 緩存到指定目錄 ↓ 第二次 Build → 檢查緩存 → 直接使用 → 跳過下載步驟 ↓ 結果:Build 時間從 15 分鐘縮短到 2 分鐘! 基本語法與用法 語法格式 RUN --mount=type=cache,target=<緩存路徑> \ <你的安裝命令> 參數說明 參數 說明 範例 type=cache 指定緩存類型 --mount=type=cache target 緩存目標路徑 target=/root/.cache/pip id 緩存標識符 id=my-cache sharing 共享策略 sharing=locked 實戰範例:常見使用場景 1. Python pip 緩存 # 基本用法 RUN --mount=type=cache,target=/root/.cache/pip \ pip install -r requirements.txt # 進階用法:指定緩存 ID RUN --mount=type=cache,target=/root/.cache/pip,id=pip-cache \ pip install -r requirements.txt 效果:第二次 build 時,pip 會直接使用緩存的套件,跳過下載步驟。 ...

August 24, 2025 · 3 min · 471 words · Daniel Ho

Optimizing uv Docker Builds: Advanced Techniques

前言 / Introduction 在使用 uv container 開發 Python 專案時,可以透過一些技巧優化 build 時間與最終 image 的大小。 本篇將介紹三種常用方式:Intermediate Layers、Non-editable Installs、臨時使用 uv。 1. 利用 Intermediate Layers 提升 Build 速度 專案本身會頻繁變動,但依賴通常較穩定,可以將依賴安裝分離成獨立 Docker layer: FROM python:3.12-slim COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ WORKDIR /app RUN --mount=type=cache,target=/root/.cache/uv \ --mount=type=bind,source=uv.lock,target=uv.lock \ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ uv sync --locked --no-install-project ADD . /app RUN --mount=type=cache,target=/root/.cache/uv \ uv sync --locked Note: --no-install-workspace:排除 workspace 成員 --no-install-package <name>:排除特定套件 pyproject.toml 必須複製進 image,以識別專案根目錄和名稱 2. 非編輯模式安裝(Non-editable Installs) 使用 –no-editable 可以只安裝虛擬環境,減少最終 image 大小: ...

August 24, 2025 · 1 min · 177 words · Daniel Ho