FOSSA Logo

Dockerfile Best Practices Checker

Analyze your Dockerfile for common anti-patterns and get recommendations for following best practices.

Paste a Dockerfile and click "Analyze Dockerfile" to check for best practices

Dockerfile Best Practices

A well-crafted Dockerfile ensures that your containers are efficient, secure, and maintainable. Here are some best practices to follow when writing Dockerfiles:

Use Multi-stage Builds

Multi-stage builds allow you to use multiple FROM statements in your Dockerfile. This is useful for creating smaller production images by separating build-time dependencies from runtime dependencies.

FROM node:18 AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM node:18-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
CMD ["node", "dist/index.js"]

Minimize Layer Count and Size

  • Group related commands in a single RUN instruction to reduce layers
  • Clean up package manager caches in the same RUN instruction
  • Use .dockerignore to exclude unnecessary files
  • Choose smaller base images (e.g., alpine variants)

Security Best Practices

  • Avoid running containers as root by using the USER instruction
  • Set proper file permissions
  • Never store secrets in the Dockerfile (use environment variables or secrets management)
  • Scan images for vulnerabilities
  • Use specific version tags instead of 'latest'

Additional Recommendations

  • Use COPY instead of ADD for simple file copying
  • Set WORKDIR instead of using RUN cd
  • Use ENTRYPOINT with CMD for better container execution
  • Include HEALTHCHECK instructions to monitor container health
  • Sort multi-line arguments alphanumerically to avoid duplication

Pro Tip

For production containers, always use a non-root user, pin all dependency versions (including base images), and keep your container images as small as possible. This improves security, reproducibility, and performance.

Get started with FOSSA

Start managing your dependencies, licenses, and vulnerabilities today.