Minimal Docker images containing only your application and runtime dependencies, without package managers or shells.
Distroless is a collection of language-focused Docker images that strip away the operating system, leaving only the essential runtime dependencies for an application. It solves the problem of bloated container images by removing package managers, shells, and other standard Linux distribution components, resulting in significantly smaller images and a reduced attack surface. This approach follows security best practices established by Google and other tech giants using containers at scale.
Developers and DevOps engineers building production-ready containerized applications who prioritize security, minimal image size, and adherence to container best practices. It is particularly relevant for teams deploying applications on Kubernetes, Knative, Tekton, or similar container orchestration platforms.
Developers choose Distroless over alternatives like Alpine or Debian base images because it provides the smallest possible runtime images (as small as 2 MiB), drastically reduces the attack surface by eliminating unnecessary components, and improves the signal-to-noise ratio for vulnerability scanners. Its language-specific runtimes and support for non-root execution offer a secure, production-optimized foundation without the overhead of a full OS.
🥑 Language focused docker images, minus the operating system.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
The smallest image is around 2 MiB, which is 50% smaller than Alpine and less than 2% the size of Debian, reducing storage and network costs significantly.
Images exclude shells, package managers, and unnecessary OS components, drastically reducing the attack surface and improving vulnerability scanner efficiency by removing noise.
Provides images for amd64, arm64, arm, s390x, ppc64le, and riscv64 architectures, enabling broad compatibility across different hardware platforms.
Includes tailored images for Java, Python, Node.js, Go, and C/C++ with appropriate runtimes, ensuring minimal overhead for common application stacks.
Offers nonroot tags and configurations to run applications as non-root users, aligning with security best practices for containerized environments.
The absence of a shell by default makes interactive debugging difficult; users must switch to debug images with BusyBox, adding steps to troubleshooting workflows.
Adding packages or custom dependencies requires using Bazel with rules_distroless, which has a steeper learning curve compared to standard apt-get in full OS images.
While Docker multi-stage builds work, advanced features and optimizations are geared towards Bazel, potentially locking teams into specific build ecosystems.
Images are explicitly tied to Debian versions (e.g., -debian12), and future updates may break builds if not managed carefully, as noted in the README about distribution changes.