Skip to content

feat: Load Balancing #106

@ProgrammingByPermutation

Description

ChatGPT, I know I know but bear with me, suggests that there is a workaround for not having load balancing in docker-compose. It seems you can use your NGINX server to do the load balancing for you.

Test the theory. It'd be really nice if we can load balance at least the UI project. The API project MIGHT be able to be load balanced (double check). But the null and twitch bot projects cannot be load balanced.

ChatGPT Response:
Docker Compose does not provide built-in load balancing in the same way that Kubernetes (K8s) does.

Key Differences in Load Balancing

Feature Docker Compose Kubernetes
Built-in Load Balancer ❌ No ✅ Yes (Service with type ClusterIP, NodePort, LoadBalancer)
DNS-based Service Discovery ✅ Yes ✅ Yes
Internal Load Balancing ❌ No true round-robin or session-aware balancing ✅ Yes
Scaling Services docker-compose up --scale ✅ Declaratively via deployments
External Load Balancer Integration Manual (e.g., NGINX, Traefik) Native with cloud provider support

How to Approximate Load Balancing in Docker Compose

You can simulate load balancing in Docker Compose using a reverse proxy like NGINX, HAProxy, or Traefik.

Example: Load balancing with NGINX

version: "3"
services:
  web:
    image: your-app
    deploy:
      replicas: 3  # Only used in Docker Swarm, not in Compose
    ports:
      - "8000"
  
  nginx:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - web
# nginx.conf
http {
  upstream backend {
    server web:8000;
    server web:8000;
    server web:8000;
  }

  server {
    listen 80;

    location / {
      proxy_pass http://backend;
    }
  }
}

Note: Compose creates one web container unless you use the --scale flag.

docker-compose up --scale web=3

Kubernetes Advantage

In Kubernetes, load balancing is first-class:

  • Each Pod gets an internal IP.
  • Services (e.g., ClusterIP or LoadBalancer) route traffic with round-robin by default.
  • Ingress controllers integrate seamlessly.

Conclusion

You can simulate load balancing in Docker Compose with a reverse proxy and multiple containers, but it’s not as dynamic or integrated as in Kubernetes. If you need advanced load balancing (auto-scaling, failover, health checks), Kubernetes is the better fit.

Would you like a working Docker Compose example with NGINX load balancing?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions