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 kontajnerydocker compose logs -f web— sleduje logy konkrétnej službydocker compose ps— zobrazí stav služiebdocker compose exec db psql -U postgres— spustí príkaz v bežiacom kontajneridocker 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_onscondition: service_healthypre správne poradie štartu - Secrets nikdy nepíšte priamo do YAML — použite
.envsúbor alebo Docker secrets - Pomenúvajte volumes explicitne, aby ste predišli strate dát
- Pre produkciu zvážte
restart: unless-stoppedna 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.