Reviews Dockerfiles for build performance, image size, and security issues. Use when optimizing, validating, or improving Dockerfiles.
STARTER_CHARACTER = 🐳
When starting, announce: "🐳 Using DOCKERFILE-REVIEW skill".
Dependency files (package.json, requirements.txt, go.mod) must be copied and installed BEFORE application source code. Violations cause full dependency reinstalls on every code change.
Anti-pattern: COPY . . followed by RUN pip install or RUN npm ci. The entire dependency layer rebuilds on any source change.
Impact: builds that should take seconds take minutes. With frequent builds, this compounds to hours per week.
Three tiers exist: full (includes compilers, tools), slim (minimal OS, basic tooling), distroless (application only, no shell).
Anti-patterns:
Without .dockerignore, COPY . . sends everything to the build context: node_modules (50-500MB), .git (100MB+), coverage reports, IDE configs, .env files.
Anti-patterns:
Build tools, compilers, and dev dependencies should not exist in the final image. Multi-stage builds separate construction from execution.
Anti-patterns:
Tags like latest or unpinned package versions create non-reproducible builds.
Anti-patterns:
FROM ubuntu:latest or FROM node:ltsapt-get install -y curl without version pinningEach RUN, COPY, ADD creates a layer. Deletions in later layers don't reduce image size — the previous layer still contains the data.
Anti-pattern: separate RUN instructions for install and cleanup. RUN apt-get update then RUN rm -rf /var/lib/apt/lists/* preserves the cache in the first layer.
Fix direction: combine install and cleanup in a single RUN with &&.
Credentials, API keys, and tokens embedded in layers are permanently accessible via docker history or registry inspection.
Anti-patterns:
ENV API_KEY=... or ARG with secrets passed at build timeFix direction: use --mount=type=secret with BuildKit for build-time secrets. Never bake secrets into layers.
Running as root means a container escape or application vulnerability grants full system access.
Anti-patterns:
Fix direction: create a dedicated user with useradd, chown application files, then switch with USER — placed after all file operations that need root.