Open-Awesome
CategoriesAlternativesStacksSelf-HostedExplore
Open-Awesome

© 2026 Open-Awesome. Curated for the developer elite.

TermsPrivacyAboutGitHubRSS
  1. Home
  2. Docker
  3. Dockerfile best practices

Dockerfile best practices

NOASSERTIONDockerfile

A production-ready Dockerfile template with security-focused best practices for building reliable container images.

GitHubGitHub
4.1k stars154 forks0 contributors

What is Dockerfile best practices?

Dockerfile is a curated collection of best practices and a template Dockerfile for creating production-ready container images. It addresses common security and reliability issues in Docker image creation by providing specific guidance on user management, version pinning, signal handling, and file permissions.

Target Audience

Developers, DevOps engineers, and platform teams who build and maintain Docker images for production environments and want to avoid common security pitfalls.

Value Proposition

It offers battle-tested recommendations from real production experience at companies like Sourcegraph, providing a ready-to-use template that balances security, maintainability, and practical deployment concerns better than generic Docker documentation.

Overview

Dockerfile best-practices for writing production-worthy Docker images.

Use Cases

Best For

  • Securing Docker images against privilege escalation attacks
  • Establishing consistent file permission patterns across containers
  • Implementing reliable signal handling in containerized applications
  • Creating reproducible builds while maintaining security updates
  • Onboarding teams to Docker best practices quickly
  • Auditing existing Dockerfiles for security improvements

Not Ideal For

  • Projects requiring absolute build reproducibility via SHA pinning, as the template favors major.minor tags for security updates
  • Large organizations with established container security pipelines that already enforce custom best practices
  • Applications that must run as root for legitimate reasons, such as accessing privileged ports or system resources

Pros & Cons

Pros

Security-First Approach

Enforces non-root user execution and UIDs above 10,000 to mitigate privilege escalation risks, backed by references to Docker docs and Bitnami's security analysis.

Production-Tested Template

Provides a ready-to-copy Dockerfile with detailed comments derived from real-world experience at companies like Sourcegraph, saving setup time and reducing common errors.

Balanced Version Management

Recommends major.minor image tags to receive security updates while maintaining stability, and suggests tools like docker-lock for reproducibility without manual SHA tracking.

Reliable Signal Handling

Integrates tini as the ENTRYPOINT to ensure proper signal processing and prevent zombie processes, even in environments like Kubernetes where Docker's --init is not default.

Cons

Opinionated Configuration

Fixed UID/GID of 10000:10001 may conflict with existing system users or container orchestration standards, requiring manual adjustments for integration.

Added Complexity

Includes dependencies like tini and bind-tools (for Alpine) which add layers and maintenance overhead, potentially over-engineering simple containerized applications.

Reproducibility Limitations

The major.minor pinning strategy introduces build variability, which might be unacceptable for strict compliance or auditing needs that demand SHA-based reproducibility.

Frequently Asked Questions

Quick Stats

Stars4,079
Forks154
Contributors0
Open Issues3
Last commit5 years ago
CreatedSince 2020

Tags

#container-security#containerization#devops#production#oci#dockerfile#kubernetes#security#ci-cd#best-practices#docker#containers

Included in

Docker35.8k
Auto-fetched 8 hours ago

Related Projects

Docker CaveatsDocker Caveats

What You Should Know About Running Docker In Production (written 11 APRIL 2016) MUST SEE

Stars0
Forks0
Last commit
GUI Apps with DockerGUI Apps with Docker

by fgrehm

Stars0
Forks0
Last commit
Docker vs. VMs? Combining Both for Cloud Portability NirvanaDocker vs. VMs? Combining Both for Cloud Portability Nirvana

Stars0
Forks0
Last commit
Don't Repeat Yourself with Anchors, Aliases and Extensions in Docker Compose FilesDon't Repeat Yourself with Anchors, Aliases and Extensions in Docker Compose Files

by King Chung Huang

Stars0
Forks0
Last commit
Community-curated · Updated weekly · 100% open source

Found a gem we're missing?

Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.

Submit a projectStar on GitHub