Skip to content

Instantly share code, notes, and snippets.

@bcremer
Created November 26, 2024 10:19
Show Gist options
  • Save bcremer/778b37d5c743b1900dff64f868744230 to your computer and use it in GitHub Desktop.
Save bcremer/778b37d5c743b1900dff64f868744230 to your computer and use it in GitHub Desktop.
Docker Compose Scale Demo

Docker Compose scale demo

# start with 3 workers
docker compose up -d --scale worker=3

# verify that nginx and 3 workers are runing
docker compose ps

# requests are distributed accross the workers
curl -s 127.0.0.1:80/api | jq '.ip'

# cleanup
docker compose down

This will produce the following output

$ docker compose up -d --scale worker=3; docker compose ps; curl -s 127.0.0.1:80/api | jq '.ip'; curl -s 127.0.0.1:80/api | jq '.ip'; curl -s 127.0.0.1:80/api | jq '.ip'; docker compose down
[+] Running 5/5
 ✔ Network docker-compose-scale-test_default           Created                                                                                                                                                                                                                        0.1s
 ✔ Container docker-compose-scale-test-nginx-master-1  Started                                                                                                                                                                                                                        0.2s
 ✔ Container docker-compose-scale-test-worker-3        Started                                                                                                                                                                                                                        0.3s
 ✔ Container docker-compose-scale-test-worker-1        Started                                                                                                                                                                                                                        0.2s
 ✔ Container docker-compose-scale-test-worker-2        Started                                                                                                                                                                                                                        0.4s
NAME                                       IMAGE                   COMMAND                  SERVICE        CREATED        STATUS                  PORTS
docker-compose-scale-test-nginx-master-1   nginx:latest            "/docker-entrypoint.…"   nginx-master   1 second ago   Up Less than a second   127.0.0.1:80->80/tcp
docker-compose-scale-test-worker-1         traefik/whoami:latest   "/whoami"                worker         1 second ago   Up Less than a second   80/tcp
docker-compose-scale-test-worker-2         traefik/whoami:latest   "/whoami"                worker         1 second ago   Up Less than a second   80/tcp
docker-compose-scale-test-worker-3         traefik/whoami:latest   "/whoami"                worker         1 second ago   Up Less than a second   80/tcp
[
  "127.0.0.1",
  "::1",
  "192.168.97.4"
]
[
  "127.0.0.1",
  "::1",
  "192.168.97.3"
]
[
  "127.0.0.1",
  "::1",
  "192.168.97.4"
]
[+] Running 5/5
 ✔ Container docker-compose-scale-test-worker-2        Removed                                                                                                                                                                                                                        0.1s
 ✔ Container docker-compose-scale-test-worker-1        Removed                                                                                                                                                                                                                        0.1s
 ✔ Container docker-compose-scale-test-worker-3        Removed                                                                                                                                                                                                                        0.1s
 ✔ Container docker-compose-scale-test-nginx-master-1  Removed                                                                                                                                                                                                                        0.2s
 ✔ Network docker-compose-scale-test_default           Removed    
services:
nginx-master:
ports:
- 127.0.0.1:80:80
image: nginx:latest
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
worker:
image: traefik/whoami:latest
events { }
http {
server {
listen 80;
location / {
proxy_pass http://worker:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment