Publishing Without Docker Hub

The wake-up call

In November 2024, Docker announced pricing changes that made us all nervous. Pro plans jumped from $5 to $9/month. Team plans went from $9 to $15/user/month. Then came the real kicker: consumption-based pricing for image pulls and storage.

Docker walked most of it back by February 2025. No pull charges after all. Rate limits cancelled. But the message was clear: your infrastructure depends on someone else's business decisions.

Why we self-host now

Docker Hub isn't going anywhere. But relying only on it? That's a risk we stopped taking.

We run our own registry now. Same infrastructure we're already paying for, full control, no surprises.

The setup

Docker's open-source registry running in Swarm. One container, minimal config, zero extra cost.

services:
  registry:
    image: registry:2
    ports:
      - "5000:5000"
    volumes:
      - registry-data:/var/lib/registry
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]

Deploy:

docker stack deploy -c registry.yml registry

Push and pull like normal:

docker tag app:latest registry.local/app:latest
docker push registry.local/app:latest

What we learned

1. External dependencies are risks. Terms change. Limits appear. Your pipeline shouldn't depend on "probably won't happen."

2. Self-hosting is simpler than it looks. Modern tools make it straightforward. The overhead is worth the peace of mind.

3. Hybrid works. We still use Docker Hub for base images (Ubuntu, Node, etc.). Our custom images? Those live on our registry.

The real point

This isn't about avoiding fees. It's about owning your infrastructure. When Docker announced those changes, teams scrambled to find alternatives. We just kept deploying.

Your images are your infrastructure. Host them somewhere you control.


What's your registry setup? Still on Docker Hub, or have you moved?