Docker Compose: viac služieb jedným príkazom
Ako opísať aplikáciu, databázu a webový server v jednom súbore, spustiť ich jedným príkazom a aktualizovať bez ručného prebuildovania.
Aktualizované 23. augusta 2026
Jednu službu spustíš jedným dlhým príkazom docker run. Dve služby, ktoré sa musia navzájom vidieť — to už nefunguje: na parametre na druhý deň zabudneš. Compose presúva celý popis do súboru, ktorý si môžeš prečítať, upraviť a udržiavať v repozitári.
Minimálny príklad
Adresár /opt/myapp, v ňom compose.yaml:
services:
db:
image: postgres:17
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: app
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
retries: 5
app:
image: ghcr.io/example/app:1.4.2
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DATABASE_URL: postgres://postgres:${DB_PASSWORD}@db:5432/app
ports:
- "127.0.0.1:8080:8080"
volumes:
db-data:
Vedľa neho súbor .env:
DB_PASSWORD=long-random-password
chmod 600 .env
docker compose up -d
docker compose ps
docker compose logs -f app
Na čom tu záleží
- Názvy namiesto adries. Aplikácia sa k databáze dostane pod názvom
db— Compose vytvorí zdieľanú sieť, v ktorej sa názvy služieb prekladajú automaticky. Port databázy nemusíš zverejňovať navonok a ani by si nemal. restart: unless-stopped. Bez toho sa po reštarte stroja nič nenahodí.depends_ons health checkom. Bežnédepends_ončaká len na spustenie kontajnera, nie na to, kým databáza začne prijímať spojenia. Aplikácia sa spustí skôr a spadne.- Presné verzie image.
postgres:17, niepostgres:latest. Prilatestti jedného dňa ďalšípullprinesie hlavnú verziu, ktorá neotvorí staré dáta. - Zverejnenie na
127.0.0.1. Port vystavuj navonok len cez webový server s certifikátom.
Každodenné príkazy
docker compose up -d # bring up or apply changes
docker compose down # stop and remove containers (volumes intact)
docker compose down -v # ...and remove volumes too
docker compose restart app # restart one service
docker compose exec app sh # go inside
docker compose pull && docker compose up -d # update images
docker compose config # show final file with substitutions
docker compose config je najlepší spôsob, ako skontrolovať súbor pred spustením: ukáže, na čo sa premenné rozvinuli a či sa niekde nestratilo odsadenie.
docker compose down -vvymaže aj volumes spolu s databázou. Je to nezvratné. Pred každou operáciou s-vsi over, že máš kópiu — pozri zálohy.
Súbory s premennými prostredia
Ten istý stack pre testovanie a produkciu je pohodlné oddeliť overlaymi:
docker compose -f compose.yaml -f compose.prod.yaml up -d
Druhý súbor prepisuje len rozdiely: limity pamäte, zverejnené porty a úroveň logovania.
Časté chyby
- Tajomstvá v
compose.yaml, ktorý je v repozitári. Drž ich v.envs právami 600 a necommituj ho. - Miešanie
docker-composeadocker compose. Stará verzia v1 nerozumie niektorej syntaxi a projekty ukladá pod inými názvami. Nainštaluj plugin — pozri inštalácia Dockeru. - Dáta v kontajneri namiesto vo volume. Po
docker compose downzmiznú. Pozri volumes. - Žiadne limity pamäte. Jedna služba zožerie celú pamäť stroja a kernel zabije jej susedov. Pozri limity zdrojov.