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

create-multistage-dockerfile

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

О программе

Этот навык Claude создает оптимизированные многоэтапные Dockerfile, которые разделяют окружения сборки и выполнения для создания минимальных production-образов. Он полезен, когда ваши образы слишком велики, содержат ненужные инструменты сборки или требуют развертывания в ограниченных средах. Навык охватывает разделение этапов builder/runtime, копирование артефактов и целевые образы, такие как scratch, distroless и Alpine.

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

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/create-multistage-dockerfile

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

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

造多段 Dockerfile

構多段 Dockerfile 分構與行境以生最小產像。

  • 產像過大(>500MB 為編譯語)
  • 構具(編、發頭)入終像
  • 自一 Dockerfile 生發與產異像
  • 部於限境(邊、無服)

  • :存 Dockerfile 或待容器化案
  • :語與構系(npm、pip、go build、cargo、maven)
  • :目行基(slim、alpine、distroless、scratch)
  • :終像寸預

一:別構與行依

構段行段
編譯gcc、g++、rustc不需
包理npm、pip、cargo或(解譯語)
發頭-dev不需
源碼全源樹僅編出
試架jest、pytest不需

二:構多段構

核模:構於肥像、複品至瘦像。

# ---- Build Stage ----
FROM <build-image> AS builder
WORKDIR /src
COPY <dependency-manifest> .
RUN <install-dependencies>
COPY . .
RUN <build-command>

# ---- Runtime Stage ----
FROM <runtime-image>
COPY --from=builder /src/<artifact> /<dest>
EXPOSE <port>
CMD [<entrypoint>]

三:施語專模

Node.js(剪 node_modules)

FROM node:22-bookworm AS builder
WORKDIR /src
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build && npm prune --omit=dev

FROM node:22-bookworm-slim
RUN groupadd -r app && useradd -r -g app app
WORKDIR /app
COPY --from=builder /src/dist ./dist
COPY --from=builder /src/node_modules ./node_modules
COPY --from=builder /src/package.json .
USER app
EXPOSE 3000
CMD ["node", "dist/index.js"]

Python(虛境複)

FROM python:3.12-bookworm AS builder
WORKDIR /src
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

FROM python:3.12-slim-bookworm
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
WORKDIR /app
COPY --from=builder /src .
RUN groupadd -r app && useradd -r -g app app
USER app
EXPOSE 8000
CMD ["python", "app.py"]

Go(靜二入 scratch)

FROM golang:1.23-bookworm AS builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /server ./cmd/server

FROM scratch
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /server /server
EXPOSE 8080
ENTRYPOINT ["/server"]

Rust(靜 musl 二)

FROM rust:1.82-bookworm AS builder
RUN apt-get update && apt-get install -y musl-tools && rm -rf /var/lib/apt/lists/*
RUN rustup target add x86_64-unknown-linux-musl
WORKDIR /src
COPY Cargo.toml Cargo.lock ./
RUN mkdir src && echo "fn main() {}" > src/main.rs \
    && cargo build --release --target x86_64-unknown-linux-musl \
    && rm -rf src
COPY . .
RUN touch src/main.rs && cargo build --release --target x86_64-unknown-linux-musl

FROM scratch
COPY --from=builder /src/target/x86_64-unknown-linux-musl/release/myapp /myapp
EXPOSE 8080
ENTRYPOINT ["/myapp"]

得: 終像僅含行與編品。

敗:COPY --from=builder 路。用 docker build --target builder 除構段。

四:擇行基

scratch0 MB靜 Go/Rust 二
gcr.io/distroless/static~2 MB靜二+CA 證
gcr.io/distroless/base~20 MB動二(libc)
*-slim50-150 MB解譯語
alpine~7 MB殼需時

注: Alpine 用 musl libc。某 Python wheels 與 Node native modules 或不行。解譯語宜用 -slim(glibc)。

五:跨段構引

ARG APP_VERSION=0.0.0

FROM golang:1.23 AS builder
ARG APP_VERSION
RUN go build -ldflags="-X main.version=${APP_VERSION}" -o /server .

FROM gcr.io/distroless/static
COPY --from=builder /server /server
ENTRYPOINT ["/server"]

構以:docker build --build-arg APP_VERSION=1.2.3 .

注: FROM 前之 ARG 為全。各段須重申 ARG 以用之。

六:較像寸

# Build both variants
docker build -t myapp:fat --target builder .
docker build -t myapp:slim .

# Compare sizes
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | grep myapp

得: 產像較構段小 50-90%。

  • docker build 諸段畢
  • 終像不含構具(編、發頭)
  • docker run 於瘦像正行
  • 像寸較單段顯減
  • COPY --from=builder 路正
  • 無源漏入產像

  • 缺行庫:編碼或需共庫(libclibssl)。瘦像須全試
  • COPY --from:品路須合。用 docker build --target builderdocker run --rm builder ls /path
  • Alpine musl 問:Native Node.js addons 與某 Python 包於 Alpine 敗。用 -slim
  • 全 ARG 範FROM 前申之 ARG 僅於 FROM 行可。各段用則重申
  • 忘 CA 證scratch 無證。自 builder 複 /etc/ssl/certs/ca-certificates.crt 或用 distroless

  • create-dockerfile - 單段標 Dockerfile
  • create-r-dockerfile - R 專 Dockerfile 用 rocker 像
  • optimize-docker-build-cache - 層快與 BuildKit 特
  • setup-compose-stack - 用多段像之 compose 設

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

pjt222/agent-almanac
Путь: i18n/wenyan-ultra/skills/create-multistage-dockerfile
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, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.

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