$npx -y skills add jgamaraalv/ts-dev-kit --skill dockerDocker containerization reference — multi-stage builds, Compose configs, image optimization, and container security for Yarn 4 monorepos. Use when: (1) creating or optimizing Dockerfiles, (2) configuring docker-compose for dev or production, (3) reducing image size with multi-sta
| 1 | # Docker — Containerization for Monorepos |
| 2 | |
| 3 | Docker best practices for Node.js monorepos with Yarn 4 Berry. |
| 4 | |
| 5 | <rules> |
| 6 | |
| 7 | ## Key Principles |
| 8 | |
| 9 | - **Minimal images**: Alpine-based, only runtime dependencies in final stage |
| 10 | - **Layer caching order**: system deps → package manifests → install → source → build |
| 11 | - **Non-root users**: Create `app` user, never run as root in production |
| 12 | - **One process per container**: Compose multiple containers, not multiple processes |
| 13 | - **Health checks on every service**: Use the existing `/health` endpoint |
| 14 | |
| 15 | ## Image Optimization Quick Reference |
| 16 | |
| 17 | - Use `node:22-alpine` as base |
| 18 | - Multi-stage builds: exclude build tools from final image |
| 19 | - `yarn cache clean` after install |
| 20 | - `.dockerignore`: exclude `.git`, `node_modules`, `*.md`, `.env*`, `.claude`, `__tests__`, `coverage`, `.turbo` |
| 21 | - `--production` flag for runtime dependencies only |
| 22 | - Pin base image versions (not just `latest`) |
| 23 | |
| 24 | ## Container Security Quick Reference |
| 25 | |
| 26 | - Run as non-root user (`addgroup --system app && adduser --system --ingroup app app`) |
| 27 | - Don't store secrets in images — use env vars or secrets management |
| 28 | - Scan images: `docker scout cves <image>` |
| 29 | - Set resource limits in compose: `mem_limit`, `cpus` |
| 30 | - Read-only filesystem where possible: `read_only: true` |
| 31 | - Drop capabilities: `cap_drop: [ALL]` |
| 32 | |
| 33 | </rules> |
| 34 | |
| 35 | <quick_reference> |
| 36 | |
| 37 | ## Useful Commands |
| 38 | |
| 39 | ```bash |
| 40 | docker compose build api # Build specific service |
| 41 | docker compose up -d # Start all services |
| 42 | docker compose logs -f api # Follow logs |
| 43 | docker compose exec api sh # Shell into container |
| 44 | docker images | grep myapp # Check image sizes |
| 45 | docker system df # View cache usage |
| 46 | docker system prune -a # Prune unused images |
| 47 | docker stats # Resource usage |
| 48 | ``` |
| 49 | |
| 50 | </quick_reference> |
| 51 | |
| 52 | <references> |
| 53 | |
| 54 | ## When to Load References |
| 55 | |
| 56 | | Need | Reference file | |
| 57 | | -------------------------------------------------- | ---------------------------------------------------------------------- | |
| 58 | | Writing or reviewing a Dockerfile for the monorepo | [references/monorepo-dockerfile.md](references/monorepo-dockerfile.md) | |
| 59 | | Configuring docker-compose for dev or production | [references/compose-configs.md](references/compose-configs.md) | |
| 60 | |
| 61 | </references> |