🟢 Beginner

Docker Compose — Multi-container orchestrácia

Docker Compose je nástroj na definovanie a spúšťanie multi-kontajnerových aplikácií. Pomocou jedného YAML súboru opíšete celú infraštruktúru — služby, siete, volumes — a spustíte ju jediným príkazom.


Čo je Docker Compose?

Väčšina reálnych aplikácií pozostáva z viacerých komponentov: webový server, databáza, cache, message broker. Docker Compose umožňuje tieto komponenty definovať v súbore docker-compose.yml a spravovať ich ako jeden celok. Namiesto manuálneho spúšťania každého kontajnera zvlášť stačí jeden docker compose up.

Ako funguje docker-compose.yml

Súbor docker-compose.yml definuje tri hlavné sekcie:

Services — jednotlivé kontajnery s ich konfiguráciou (image, porty, premenné prostredia):

services:
  web:
    build: .
    ports:
      - "8080:3000"
    environment:
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: postgres:16-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=secret

Volumes — perzistentné úložisko pre dáta, ktoré prežije reštart kontajnera:

volumes:
  pgdata:

Networks — vlastné siete pre izoláciu komunikácie medzi službami:

networks:
  frontend:
  backend:

Docker Compose automaticky vytvára defaultnú sieť pre všetky služby v projekte. Služby sa navzájom nájdu podľa mena — web sa pripojí na db jednoducho cez hostname db.

Praktické použitie

  • docker compose up -d — spustí všetky služby na pozadí
  • docker compose down — zastaví a odstráni kontajnery
  • docker compose logs -f web — sleduje logy konkrétnej služby
  • docker compose ps — zobrazí stav služieb
  • docker compose exec db psql -U postgres — spustí príkaz v bežiacom kontajneri
  • docker compose build --no-cache — prebuduje images od nuly

Profiles umožňujú definovať voliteľné služby (napr. debug nástroje), ktoré sa spustia len keď ich explicitne aktivujete: docker compose --profile debug up.

Watch mode (od Compose v2.22) automaticky synchronizuje zmeny v kóde do kontajnera bez reštartu — ideálne pre vývoj.

Best Practices

  • Používajte depends_on s condition: service_healthy pre správne poradie štartu
  • Secrets nikdy nepíšte priamo do YAML — použite .env súbor alebo Docker secrets
  • Pomenúvajte volumes explicitne, aby ste predišli strate dát
  • Pre produkciu zvážte restart: unless-stopped na automatický reštart služieb
  • Oddeľte dev a prod konfiguráciu cez docker-compose.override.yml
  • Obmedzte resources (CPU, RAM) pre každú službu pomocou deploy.resources.limits

Docker Compose je nenahraditeľný pre lokálny vývoj a testovanie. Pre produkčné nasadenie vo väčšom meradle sa zvyčajne kombinuje s Kubernetes alebo Docker Swarm.