There are hundreds of thousands of images on Docker Hub. Seriously, literally… Going in there without a compass is like looking for a needle in a haystack.
But when you get into it deeply, you really end up using the same 10 or 12 base images 90% of the time. They are your favorite images, the ones we build almost everything with.
In this article, we will see the definitive list of essential images. If you are going to work with Docker, these are the ones you need to know.
The Base Operating Systems
These are the “empty” images on which you install your stuff. They are the blank canvas.
Alpine Linux (alpine)
The crown jewel of the Docker world. A complete Linux distribution that takes up… 5 MB! (Yes, you read that right).
What is it for?:
- It is the standard base for production. If you create an application in Go, Node, or Python and want the final image to be tiny, you start
FROM alpine.
docker run -it alpine /bin/sh
It doesn’t use apt (like Ubuntu), it uses apk.
Ubuntu / Debian (ubuntu, debian)
The classic Ubuntu and Debian. If you come from using Linux on desktop or server, you’ll feel right at home here.
What is it for?:
- For development environments or when you need absolute compatibility with
glibclibraries. They are heavier (between 30MB and 80MB), but they save you compilation fights that Alpine sometimes gives.
BusyBox (busybox)
The Swiss Army knife of embedded systems. It’s a single executable that contains “mini” versions of the most used Unix commands (ls, cp, cat, ping…). It weighs 1.2 MB.
What is it for?:
- For Debugging. Is your web container not connecting to the database? You launch a BusyBox container on the same network and do a
pingortelnetto test.
Scratch (scratch)
The most minimalist image possible: literally empty. It has no shell, no libraries, nothing. It weighs 0 bytes.
What is it for?:
- It is the final destination for statically compiled binaries in Go or Rust. You compile your application in a previous stage (Multi-stage build) and copy the executable to
scratch. The result is an image that only contains your program and nothing else.
The Runtimes
As developers, these are the ones you will use in your day-to-day to run your code.
Node.js (node)
Essential for web development, both Backend and Frontend (for compiling React/Vue/Angular). Comes with node and npm (or yarn) preinstalled.
Variants:
- You have
node:lts(Long Term Support),node:lts-alpine(the lightweight one).
Python (python)
Python ready to use. No more struggling to install Python on Windows or dirtying your system with 4 different versions of pip.
When using Python in Docker, use the environment variable PYTHONUNBUFFERED=1 to see logs in real time.
.NET (mcr.microsoft.com/dotnet/sdk and aspnet)
The Microsoft ecosystem has embraced Docker spectacularly. If you program in C#, these are your images (hosted in Microsoft’s official registry, MCR, not on Docker Hub).
What is it for?:
- The
sdkimage contains the entire compiler and tools to build your application. - The
aspnet(orruntime) image contains only what is necessary to run it in production, being much lighter. It is the perfect example of the “Multi-stage build” pattern.
Go (golang) / Rust (rust)
Modern compiled languages. Especially popular in Docker because they generate static binaries that end up in scratch or alpine images of a few MB.
What is it for?:
- The
golangorrustimage is almost always used as a compilation stage in a Multi-stage build, never as a final image. You compile in it and copy the resulting binary to a minimal image.
The golang:alpine → scratch pattern is one of the most used for ultralight microservices.
Web Servers and Proxies
Nginx (nginx)
The fastest and most popular web server in the world.
What is it for?:
- Serving static files (HTML, JS, CSS) of your website.
- Reverse Proxy: Putting it in front of your application (Node, .NET) to manage SSL, Gzip compression, and load balancing.
Alpine: Its nginx:alpine version is ridiculously efficient.
Traefik (traefik)
A modern reverse proxy designed specifically for microservices and containers.
It listens to the Docker Daemon. If you start a new container, Traefik automatically notices it and exposes it to the internet, generates an SSL certificate (Let’s Encrypt) for it, and routes it. Without restarting anything. Magic.
Databases
PostgreSQL (postgres) / MariaDB (mariadb)
SQL relational databases. Instead of installing an SQL server and dirtying your Windows registry, you launch this and in 2 seconds you have a clean DB. When you’re done, you delete it.
Redis (redis)
In-memory database (cache). Very used for session management, job queues, or fast cache. Its default configuration in Docker is perfect for development.
MongoDB (mongo)
The most popular NoSQL database. Essential in JavaScript/Node.js stacks (the MEAN or MERN stack). It stores data in JSON documents, making it very natural for REST APIs.
What is it for?:
- Local development without installing anything. You spin up a
mongowith Docker Compose alongside your Node API and have the complete stack in seconds.
Elasticsearch (elasticsearch)
The search engine and log analysis engine par excellence. The base of the ELK stack (Elasticsearch + Logstash + Kibana).
What is it for?:
- Advanced full-text search in applications.
- Centralizing and analyzing logs from all your containers.
It’s quite RAM-hungry. In development, add ES_JAVA_OPTS="-Xms512m -Xmx512m" to limit it.
Management Tools
Portainer (portainer/portainer-ce)
A Graphical Interface (Web UI) for managing Docker. If you get tired of the terminal, Portainer allows you to see your containers, logs, CPU/RAM statistics, and manage networks with clicks. Visually it’s excellent for understanding what’s going on.
Watchtower (containrrr/watchtower)
Automation taken to the extreme. Watchtower is a container that watches your other containers.
What is it for?:
- Every so often it checks Docker Hub to see if there is a newer version of the images you are using. If there is, it stops your container, downloads the new image, and restarts it with the same configuration.
Self-Hosted
Gitea (gitea/gitea)
Your own self-hosted GitHub, lightweight and fast. Git repositories, pull requests, issues, actions… everything in an image that consumes very few resources.
What is it for?:
- Hosting private code on your server without depending on GitHub or paying for private repos. It is the reference self-hosted for small teams or personal use.
Grafana (grafana/grafana) + Prometheus (prom/prometheus)
The standard monitoring stack. Prometheus collects metrics from your containers and services; Grafana turns them into visual dashboards.
What is it for?:
- Knowing at all times the state of your infrastructure: CPU, RAM, latency, errors… If you already have Portainer for managing containers, Grafana+Prometheus is the next natural step for serious monitoring.
Combine them with cAdvisor to get automatic metrics from all your Docker containers without extra configuration.
WordPress (wordpress)
The most used CMS in the world. Instead of installing Apache, PHP, and configuring everything manually, you download this image, connect it to a MySQL database (with Docker Compose), and have a blog running in 3 minutes.
For Your Home
Home Assistant (homeassistant/home-assistant)
The king of Open Source home automation. Installing it “bare metal” can be a nightmare of Python dependencies and libraries.
With Docker, you run a single command and have the smart control center of your home ready to use and isolated from the rest of the system.
Nextcloud (nextcloud)
Your own private Google Drive / iCloud.
What is it for?:
- Tired of paying monthly subscriptions for cloud storage? Nextcloud allows you to have your own private cloud to sync files, photos from your phone, contacts, and calendars. Everything hosted on your own hard drive, where you are the sole owner of your data.
Pi-hole (pihole/pihole)
A “black hole” for ads on your entire local network.
What is it for?:
- It works as a private DNS server. When you install it, it blocks advertising and trackers at the network level. This means ads disappear from all devices in your home (Smart TVs, phones, tablets, and PCs) without having to install any browser extensions. It’s pure magic.
Jellyfin (jellyfin/jellyfin) or Plex (plexinc/pms-docker)
Your own personal Netflix.
What is it for?:
- You tell this container on which volume you have your downloaded movies and series. It automatically takes care of downloading the covers, synopses, subtitles, and creating a beautiful interface (Netflix style) so you can play them from the living room TV, your phone, or any browser.
Jellyfin is the 100% free and open-source alternative. Plex is more famous, but has paid features. Both images are spectacular.
