TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #375 6.1K
Масштабируем сервисы через docker compose --scale

Хочешь, чтобы твой API обрабатывал больше запросов? Или нужно поднять несколько воркеров параллельно? Всё это можно сделать одной командой:


docker compose up --scale <сервис>=<кол-во>


Как это работает

Команда "--scale" запускает несколько контейнеров одного сервиса по конфигурации "docker-compose.yml":


docker compose up --scale api=3


Создаст 3 независимых контейнера api, которые используют один и тот же образ, переменные, порты и т.д.

Варианты использования

Пример docker-compose.yml:


version: "3.8"
services:
api:
image: myapp:latest
build: .
ports:
- "8000"



Важно: если nginx поднят в докере и в одной сети с апи, то порт не должен быть жёстко задан как "8000:8000", иначе только один контейнер сможет его занять. Используй:


ports:
- "8000"


А в nginx конфиге:


upstream backend {
server api:8000;
server api:8001;
server api:8002;
}



Обычно внутри Docker все контейнеры сервиса находятся под одним именем (например, api), и Docker DNS сам решает, кому из них отдать запрос (round-robin). Если же nginx вне докер сети, то в docker-compose.yml нужно прописать все порты:


ports:
- "8001:8000"
- "8002:8000"
- "8003:8000"


И затем настроить nginx конфиг так:


upstream backend {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}

server {
listen 80;

location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}


Теперь Nginx равномерно распределяет входящие запросы между 3 контейнерами, которые слушают на разных портах.

Ограничения и подводные камни

1) Порты: нужно либо жестко прописывать порты для каждого инстанса, либо не прописывать порты жестко вообще при масштабировании;

2) Состояние контейнеров не сохраняется — это одинаковые инстансы, а не кластеры;

3) Не путай с кластеризацией — это просто локальное масштабирование;

Про полноценную кластеризацию через Docker Swarm будет в одном из следующих постов :)

LinuxCamp | #devops #docker
  • 👍 23
  • 🔥 11
  • ❤ 6
  • 🦄 3
More from @linuxcamp_tg
  1. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  2. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  3. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  4. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Sep 22, 2026Ещё одна рекордная неделя для AI-разработки в Linux. На прошлой неделе в ядро попало 1 634…
  6. Sep 17, 2026Открыл плейлист, а как выйти - непонятно 😁 LinuxCamp | #memes
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →