MCP HubMCP Hub
Вернуться к навыкам

optimize-docker-build-cache

pjt222
Обновлено 6 days ago
14 просмотров
17
2
17
Посмотреть на GitHub
Метаdesign

О программе

Этот навык Claude оптимизирует сборку Docker-образов за счёт реализации кэширования слоёв, многоступенчатых сборок и функций BuildKit для сокращения времени сборки и уменьшения размеров образов. Он предназначен для проектов на R, Node.js и Python, где повторные установки зависимостей или крупные образы замедляют разработку. Используйте его, когда изменения в коде вызывают полные пересборки или когда CI/CD-процессы замедляются из-за долгой сборки Docker.

Быстрая установка

Claude Code

Рекомендуется
Основной
npx skills add pjt222/agent-almanac -a claude-code
Команда плагинаАльтернативный
/plugin add https://github.com/pjt222/agent-almanac
Git клонированиеАльтернативный
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/optimize-docker-build-cache

Скопируйте и вставьте эту команду в Claude Code для установки этого навыка

Документация

省 Docker 構快取

藉層快取、多階構、BuildKit、依先模減 Docker 構時。

  • 構緩、復裝包
  • 改碼即重裝諸依
  • 像過大
  • CI/CD 構為瓶

  • :現 Dockerfile
  • :構時改善標
  • :像縮減標

一:依變率排層

少變者先:

# 1. Base image (rarely changes)
FROM rocker/r-ver:4.5.0

# 2. System dependencies (change occasionally)
RUN apt-get update && apt-get install -y \
    libcurl4-openssl-dev \
    libssl-dev \
    && rm -rf /var/lib/apt/lists/*

# 3. Dependency files only (change when deps change)
COPY renv.lock renv.lock
COPY renv/activate.R renv/activate.R
RUN R -e "renv::restore()"

# 4. Source code (changes frequently)
COPY . .

要則:Docker 各層皆快取。一層變則諸後重構。依裝必先於碼複。

得: 層由少變至多變、依鎖文於全源前。

敗: 改碼仍重裝→確 COPY . .RUN 裝後、非前。

二:依與碼分

(碼變則重裝):

COPY . .
RUN R -e "renv::restore()"

(鎖變乃重裝):

COPY renv.lock renv.lock
RUN R -e "renv::restore()"
COPY . .

Node.js 同理:

COPY package.json package-lock.json ./
RUN npm ci
COPY . .

得: 鎖文(renv.lock、package-lock.json、requirements.txt)於 COPY . . 前獨層複裝。

敗: 鎖複敗→確文在構境且未為 .dockerignore 排。

三:用多階構

構依與運分:

# Build stage - includes dev tools
FROM rocker/r-ver:4.5.0 AS builder
RUN apt-get update && apt-get install -y \
    libcurl4-openssl-dev libssl-dev build-essential
COPY renv.lock .
RUN R -e "install.packages('renv'); renv::restore()"

# Runtime stage - minimal image
FROM rocker/r-ver:4.5.0
RUN apt-get update && apt-get install -y \
    libcurl4 libssl3 \
    && rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/lib/R/site-library /usr/local/lib/R/site-library
COPY . /app
WORKDIR /app
CMD ["Rscript", "main.R"]

得: Dockerfile 有 builder 階+運階、終像顯小於單階。

敗: COPY --from=builder 不見庫→確兩階裝路同。docker build --target builder . 獨調 builder。

四:合 RUN 命

RUN 生層。合相關:

(3 層、apt 快取留):

RUN apt-get update
RUN apt-get install -y curl git
RUN rm -rf /var/lib/apt/lists/*

(1 層、淨快取):

RUN apt-get update && apt-get install -y \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

得: 相關 apt-get 或裝命合一 RUN、皆以快取清(rm -rf /var/lib/apt/lists/*)終。

敗:RUN 中敗→暫拆識敗命、修後再合。

五:用 .dockerignore

阻無謂文入構境:

.git
.Rproj.user
.Rhistory
.RData
renv/library
renv/cache
node_modules
docs/
*.tar.gz
.env

得: 根有 .dockerignore、排 .gitnode_modulesrenv/library、構物、環文。構境顯小。

敗: 容器內缺需文→查 .dockerignore 之過寬模。docker build 詳輸驗送 daemon 之文。

六:啟 BuildKit

DOCKER_BUILDKIT=1 docker build -t myimage .

docker-compose.yml

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile

COMPOSE_DOCKER_CLI_BUILD=1 + DOCKER_BUILDKIT=1 環變。

BuildKit 啟:

  • 並行階構
  • 快取管優
  • --mount=type=cache 為持包快取

得: 構以 BuildKit(輸示 #1 [internal] load build definition)。多階盡能並行。

敗: BuildKit 未行→確環變於構命前已導。Docker 舊版→升至 18.09+。

七:包管用 cache mount

# R packages with persistent cache
RUN --mount=type=cache,target=/usr/local/lib/R/site-library \
    R -e "install.packages('dplyr')"

# npm with persistent cache
RUN --mount=type=cache,target=/root/.npm \
    npm ci

得: 後構用 mount 快取、層失效裝時亦速。快取跨構持。

敗: --mount=type=cache 不識→確 BuildKit 啟(DOCKER_BUILDKIT=1)—舊構器不支。

  • 但碼變後重構顯速
  • 鎖未變時依層自快取
  • .dockerignore 排無謂文
  • 像比未省者小
  • 多階(如用)構↔運分

  • 裝依前複全文:每碼變使依快取失效
  • .dockerignore:構境大則諸構皆緩
  • 層過多:各 RUN/COPY/ADD 為一層—邏輯處合之
  • 不淨 apt 快取apt-get install 必以 && rm -rf /var/lib/apt/lists/*
  • 平台特快取:層快取依平台—CI 工或不得益於本地快取

  • create-r-dockerfile
  • setup-docker-compose
  • containerize-mcp-server

GitHub репозиторий

pjt222/agent-almanac
Путь: i18n/wenyan-ultra/skills/optimize-docker-build-cache
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Похожие навыки

content-collections

Мета

Этот навык предоставляет проверенную в продакшене настройку для Content Collections — TypeScript-ориентированного инструмента, который преобразует файлы Markdown/MDX в типобезопасные коллекции данных с валидацией Zod. Используйте его при создании блогов, сайтов документации или контентных приложений на Vite + React для обеспечения типобезопасности и автоматической проверки содержимого. Он охватывает всё: от настройки плагина Vite и компиляции MDX до оптимизации развертывания и валидации схем.

Просмотреть навык

polymarket

Мета

Этот навык позволяет разработчикам создавать приложения на платформе прогнозных рынков Polymarket, включая интеграцию с API для торговли и получения рыночных данных. Он также обеспечивает потоковую передачу данных в реальном времени через WebSocket для отслеживания текущих сделок и рыночной активности. Используйте его для реализации торговых стратегий или создания инструментов, обрабатывающих обновления рынка в реальном времени.

Просмотреть навык

creating-opencode-plugins

Мета

Этот навык помогает разработчикам создавать плагины OpenCode, которые подключаются к более чем 25 типам событий, таким как команды, файлы и операции LSP. Он предоставляет структуру плагина, спецификации API событий и шаблоны реализации для модулей на JavaScript/TypeScript. Используйте его, когда вам нужно перехватывать, отслеживать или расширять жизненный цикл ассистента OpenCode AI с помощью пользовательской событийно-ориентированной логики.

Просмотреть навык

sglang

Мета

SGLang — это высокопроизводительный фреймворк для обслуживания больших языковых моделей (LLM), специализирующийся на быстрой структурированной генерации JSON, regex и рабочих процессов агентов с использованием кэширования префиксов RadixAttention. Он обеспечивает значительно более высокую скорость вывода, особенно для задач с повторяющимися префиксами, что делает его идеальным для сложных структурированных результатов и многократных диалогов. Выбирайте SGLang вместо альтернатив, таких как vLLM, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.

Просмотреть навык