К основному содержанию
скилл CX Codex

docker · codewithmukesh — скилл для Claude Code: что делает и как установить

Скилл настраивает контейнеризацию приложений на .NET 10: многоэтапную сборку, запуск под непривилегированным пользователем и проверку работоспособности.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add codewithmukesh/dotnet-claude-kit --skill docker -a claude-code
Открыть на GitHub

Что делает docker

Скилл даёт правила для сборки контейнеров .NET 10 через Dockerfile и настройки локального окружения в docker-compose. Он разделяет компиляцию в тяжеловесном образе mcr.microsoft.com/dotnet/sdk:10.0 и запуск в компактном mcr.microsoft.com/dotnet/aspnet:10.0. Сначала копируются файлы проектов .csproj или .slnx для кэширования пакетов NuGet, а исходный код переносится отдельным слоем.

В рантайме контейнер переключается на непривилегированного пользователя USER app, доступного по умолчанию с .NET 8. Для проверки состояния скилл предписывает выносить пробы наружу — в Kubernetes или Compose к эндпоинту /health/live. В дистрибутивах aspnet и chiseled-образах нет shell или curl. Встроенная директива HEALTHCHECK внутри такого контейнера просто не запустится.

Если нужна сборка без Dockerfile через встроенную команду dotnet publish /t:PublishContainer, этот набор инструкций не подойдёт — для неё используют скилл container-publish.

Какие задачи решает

  • настроить многоэтапный Dockerfile для ASP.NET Core и .NET 10
  • кэшировать зависимости NuGet при сборке слоёв Docker
  • обеспечить запуск контейнера под непривилегированным пользователем app
  • настроить healthcheck в docker-compose для shell-less контейнера

Примеры запросов агенту

  • Напиши multi-stage Dockerfile для проекта src/MyApp.Api на .NET 10 с пользователем USER app.
  • Сделай docker-compose с сервисом API на .NET 10 и Postgres с проверкой healthcheck.
  • Как оптимизировать кэширование NuGet в Dockerfile для решения с .slnx?

Как установить docker

1Через Skills CLI (Vercel)

npx skills add codewithmukesh/dotnet-claude-kit --skill docker -a claude-code

2Вручную: положить файлы

~/.claude/skills/docker/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/docker/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о docker

Как установить docker в Claude Code?

Выполните команду npx skills add codewithmukesh/dotnet-claude-kit --skill docker -a claude-code. Конфигурация запишется в файл ~/.claude/skills/docker/SKILL.md.

Что делает скилл docker?

Он помогает создавать Dockerfile и docker-compose для .NET 10, разделяя этапы SDK и runtime. Скилл внедряет запуск от USER app, кэширование NuGet и маршруты /health/live.

Почему скилл запрещает HEALTHCHECK внутри контейнера?

Образы ASP.NET и chiseled-сборки .NET 10 поставляются без командной оболочки и curl. Проверка внутри контейнера завершится ошибкой, поэтому опрос состояния переносится на уровень оркестратора.

Исходный текст

SKILL.md · MIT
---
name: docker
description: >
  Docker containerization for .NET 10 applications. Covers multi-stage builds,
  .NET container images, non-root user configuration, health checks, and
  .dockerignore.
  Load this skill when containerizing an application with a Dockerfile,
  optimizing image size, setting up Docker Compose for local development, or
  when the user mentions "Docker", "Dockerfile", "container", "docker-compose",
  "image", "multi-stage", "non-root", ".dockerignore", or "container health
  check". For Dockerfile-less SDK publishing (`dotnet publish /t:PublishContainer`),
  load the container-publish skill instead.
---

# Docker

## Core Principles

1. **Multi-stage builds always** — Separate build and runtime stages. Build in the SDK image, run in the ASP.NET runtime image.
2. **Non-root by default** — .NET container images support `USER app` by default since .NET 8. Never run as root in production.
3. **Layer caching matters** — Copy `.csproj` files and restore before copying source code. This caches NuGet dependencies across builds.
4. **Health probes at the orchestrator level** — Expose a `/health/live` endpoint and let Kubernetes/Compose probe it. Chiseled and default aspnet images have no shell or curl, so in-image `HEALTHCHECK` commands have nothing to run with.

## Patterns

### Multi-Stage Dockerfile for Web API

```dockerfile
# Stage 1: Build
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src

# Copy project files and restore (cached layer)
COPY ["src/MyApp.Api/MyApp.Api.csproj", "src/MyApp.Api/"]
COPY ["src/MyApp.Domain/MyApp.Domain.csproj", "src/MyApp.Domain/"]
COPY ["Directory.Build.props", "."]
COPY ["Directory.Packages.props", "."]
RUN dotnet restore "src/MyApp.Api/MyApp.Api.csproj"

# Copy everything and build
COPY . .
RUN dotnet publish "src/MyApp.Api/MyApp.Api.csproj" \
    -c Release \
    -o /app/publish \
    --no-restore

# Stage 2: Runtime
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
WORKDIR /app

# Non-root user (default in .NET 8+ images)
USER app

COPY --from=build /app/publish .

EXPOSE 8080

ENTRYPOINT ["dotnet", "MyApp.Api.dll"]
```

### Container Health Probes

Prefer orchestrator-level probes (Kubernetes `livenessProbe`, Compose
`healthcheck`) over a Dockerfile `HEALTHCHECK` — the standard `aspnet` and
chiseled images ship no shell, no curl, and no wget, so there is nothing inside
the container to run the probe with. Point the orchestrator at `/health/live`:

```yaml
# docker-compose — probe from outside the app process
services:
  api:
    healthcheck:
      test: ["CMD-SHELL", "wget -qO- http://localhost:8080/health/live || exit 1"]
      interval: 30s
      timeout: 3s
      retries: 3
# Note: CMD-SHELL requires a shell + wget in the image. Use a non-chiseled
# variant for this, or better: let Kubernetes httpGet probes do it —
# they run from the kubelet, needing nothing inside the image.
```

If you must have an in-image HEALTHCHECK, base the runtime stage on a
non-chiseled image that includes `wget` — never re-run the app binary as the
probe command; that starts a second instance instead of checking the first.

### .dockerignore

```
**/.git
**/.vs
**/bin
**/obj
**/node_modules
**/Dockerfile*
**/docker-compose*
**/tests
```

### Docker Compose for Local Development

Key .NET-specific concerns — pass connection strings via environment, use `depends_on` with health checks:

```yaml
services:
  api:
    build:
      context: .
      dockerfile: src/MyApp.Api/Dockerfile
    ports:
      - "5000:8080"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ConnectionStrings__Default=Host=postgres;Database=myapp;Username=postgres;Password=postgres
      - ConnectionStrings__Redis=redis:6379
    depends_on:
      postgres:
        condition: service_healthy
  # Add postgres/redis services with healthcheck — standard boilerplate
```

### Optimized Build with .slnx

For solutions with multiple projects, restore only the necessary projects.

```dockerfile
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src

# Copy solution and all project files
COPY *.slnx .
COPY Directory.Build.props .
COPY Directory.Packages.props .
COPY src/**/*.csproj ./src/

# Restore project structure
RUN for file in src/**/*.csproj; do \
    mkdir -p $(dirname $file) && mv $file $(dirname $file)/; \
    done
RUN dotnet restore

COPY . .
RUN dotnet publish src/MyApp.Api -c Release -o /app/publish --no-restore
```

### Health Check Endpoint

```csharp
// In Program.cs — lightweight health endpoint for Docker
app.MapGet("/health/live", () => Results.Ok("healthy"))
    .ExcludeFromDescription();
```

## Anti-patterns

### Don't Use SDK Image for Runtime

```dockerfile
# BAD — SDK image is 900MB+, includes compilers
FROM mcr.microsoft.com/dotnet/sdk:10.0
COPY . .
RUN dotnet run

# GOOD — separate build and runtime, runtime image is ~200MB
FROM mcr.microsoft.com/dotnet/aspnet:10.0
```

### Don't Copy Everything Before Restore

```dockerfile
# BAD — any source change invalidates the NuGet cache
COPY . .
RUN dotnet restore

# GOOD — copy only project files first, then restore
COPY ["src/MyApp.Api/MyApp.Api.csproj", "src/MyApp.Api/"]
RUN dotnet restore "src/MyApp.Api/MyApp.Api.csproj"
COPY . .
```

### Don't Run as Root

```dockerfile
# BAD — running as root (security risk)
FROM mcr.microsoft.com/dotnet/aspnet:10.0
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.Api.dll"]

# GOOD — use the built-in non-root user
FROM mcr.microsoft.com/dotnet/aspnet:10.0
USER app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.Api.dll"]
```

## Decision Guide

| Scenario | Recommendation |
|----------|---------------|
| Web API container | Multi-stage build with aspnet runtime image |
| Worker service | Multi-stage build with dotnet/runtime image |
| Local development | Docker Compose with service dependencies |
| CI builds | Multi-stage build (self-contained) |
| Image size optimization | Use Alpine variant + trimming for small images |
| Health monitoring | `/health` endpoint + orchestrator probe (K8s `httpGet` / Compose healthcheck) |
| Secrets | Environment variables or mounted secrets, never in image |

© codewithmukesh · MIT · codewithmukesh/dotnet-claude-kit

Похожие скиллы

Всё по теме «DevOps и инфраструктура» →

Сначала — docker от других авторов.

docker bobmatnyc Скилл по Docker: помогает агенту писать Dockerfile, собирать образы и поднимать сервисы через Compose. Пригодится, когда проект надо упаковать одинаково для разработки и продакшена. CX Codex +1 1 000установок docker-project-foundations docker Скилл настраивает первичное окружение Docker для нового проекта. Он сразу создаёт базовую тройку файлов: .dockerignore, Dockerfile и compose.yaml. CX Codex +1 1 000установок bun-docker secondsky Скилл подсказывает, как собрать Dockerfile и docker-compose для приложения на Bun: официальные образы oven/bun, многоэтапные сборки, hot reload. CX Codex +1 408установок docker-development Alireza Rezvani Скилл анализирует Dockerfile, Docker Compose и контейнеры: ищет проблемы с размером, сборкой и безопасностью. Подойдёт для настройки контейнеризации. 702установок docker-expert PCL Team Скилл для работы с Docker: подсказывает, как собирать образы, чинить Dockerfile и настраивать Compose. Пригодится, когда контейнер раздулся или падает на старте. CX Codex +1 365установок docker-containerization ailabs-393 Скилл генерирует Dockerfile, docker-compose и скрипты для сборки, запуска и пуша контейнеров. Пригодится, когда нужно упаковать Next.js или Node.js проект. CX Codex +1 1 100установок docker-compose-patterns docker Набор правил для сборки, отладки и связывания сервисов в compose.yaml. Помогает настроить проверки готовности, тома и оверрайды под локальную разработку. CX Codex +1 1 400установок

Из того же набора46

testing Скилл задаёт стратегию тестирования приложений .NET 10: интеграционные тесты через WebApplicationFactory, реальные базы в Testcontainers, снапшоты Verify. CX Codex +1 2 800установок ef-core Набор паттернов Entity Framework Core для .NET 10. Помогает настроить DbContext, пакетные обновления, миграции и проекции запросов без лишней нагрузки на базу данных. CX Codex +1 2 800установок error-handling Задаёт стратегию обработки ошибок в .NET 10: Result, ProblemDetails, валидация и глобальный перехват исключений. Нужен при проектировании контрактов API. CX Codex +1 2 800установок architecture-advisor Задаёт вопросы про домен, команду и срок жизни системы, а потом советует архитектуру для .NET-проекта. Пригодится до того, как разложить решение по папкам. CX Codex +1 2 800установок serilog Скилл помогает настроить структурированное логирование Serilog в приложении .NET 10: уровни, приёмники, свойства событий и журналы HTTP-запросов. CX Codex +1 2 900установок vertical-slice Скилл помогает проектировать и писать .NET-приложения по принципам Vertical Slice Architecture вместо слоистой структуры. Пригодится при переносе логики в папки фич и настройке хэндлеров. CX Codex +1 2 900установок modern-csharp Подсказывает агенту синтаксис C# 14: первичные конструкторы, коллекционные выражения, ключевое слово field, блоки расширений. Пригодится, когда пишете новый код на C# или чистите старый. CX Codex +1 2 900установок outdated Собирает отчёт о здоровье зависимостей .NET: устаревшие NuGet-пакеты, уязвимые версии и ловушки с коммерческими лицензиями. CX Codex +1 2 800установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой