☁️ DevOps · Docker

@dockerfile-optimizerImage Docker plus légère, mieux cachée, plus sûre

Maifady est un plugin Claude Code 100% gratuit avec 30 agents IA — @dockerfile-optimizer transforme ton Dockerfile de 1.2 GB en image de 180 MB : multi-stage build, base alpine ou distroless, ordering pour cache des layers, USER appuser, readOnlyRootFilesystem, .dockerignore approprié.

Télécharger MaifadyVoir les 30 agents

Le problème qu'il résout

Ton image Docker fait 1.2 GB. Chaque deploy = pull lent. Pull en CI = build qui timeout. Et tu sais que tu tournes en root dans le container, ce qui n'est pas terrible pour la sécu.

@dockerfile-optimizer shrink + hardene en quelques minutes.

Comment il bosse

  1. Lit ton Dockerfile + ton .dockerignore.
  2. Applique : multi-stage build (builder stage avec toolchain, final stage avec juste les artifacts), base *-alpine ou *-slim.
  3. Collapse les RUN (un seul layer pour install + cleanup).
  4. Order matters : copy package.json avant le source pour cache des deps.
  5. Sécurité : USER appuser non-root, --mount=type=secret pour les secrets build-time, base image pinned par digest.
  6. Génère un .dockerignore approprié.

Exemple concret

Tu tapes

@dockerfile-optimizer optimise mon Dockerfile.
App : Node.js 20 + Next.js. Image actuelle : 1.2 GB.

Tu obtiens

# syntax=docker/dockerfile:1.7

# --- Build stage ---
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm npm ci --omit=dev
COPY . .
RUN npm run build

# --- Runtime stage ---
FROM node:20-alpine
RUN addgroup -S app && adduser -S app -G app
WORKDIR /app
COPY --from=builder --chown=app:app /app/node_modules ./node_modules
COPY --from=builder --chown=app:app /app/dist ./dist
COPY --from=builder --chown=app:app /app/package.json ./
USER app
EXPOSE 3000
HEALTHCHECK CMD wget -q --spider http://localhost:3000/health || exit 1
CMD ["node", "dist/server.js"]

# Image estimée : ~180 MB (vs 1.2 GB avant)

Pourquoi tu vas l'aimer

📦

~85% plus petite

1.2 GB → 180 MB typique. Pull 7× plus rapide, deploys plus fluides.

🔒

Hardened par défaut

USER non-root, readonly FS, capabilities drop. Standards CIS.

Cache optimisé

Ordre des layers tel que les changements de source ne bustent pas le cache des deps.

🛡️

HEALTHCHECK inclus

Kubernetes peut savoir si ton container est prêt — pas juste s'il tourne.

Quand l'utiliser

✅ Idéal pour

  • Image > 500 MB qui ralentit tes deploys
  • Container qui tourne en root (audit de sécu)
  • Build qui ne profite pas du cache (deps reinstallées à chaque commit)
  • Avant un audit sécu / compliance

⚠️ Pas adapté quand

  • Tu veux déployer en K8s → @kubernetes-yaml-writer
  • Image déjà très optimisée (sub-100MB) — diminishing returns

Combine avec ces agents

Questions fréquentes

Pourquoi alpine et pas distroless ?

Alpine = compromis taille / debuggabilité. Distroless = encore plus petit mais aucun shell pour debug. L'agent recommande distroless pour les apps compilées (Go, Rust). Alpine pour Node/Python où tu peux vouloir sh.

Et le pin par digest ?

Recommandé en prod : node:20-alpine@sha256:.... Garantit reproductibilité. L'agent le mentionne en option (trade-off avec les patches sécu automatiques).

Prêt à shrinker ton image ?

Télécharger Maifady