Skip to content
VDS · Docker a kontajnery

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_on s 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, nie postgres:latest. Pri latest ti jedného dňa ďalší pull prinesie 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 -v vymaže aj volumes spolu s databázou. Je to nezvratné. Pred každou operáciou s -v si 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 .env s právami 600 a necommituj ho.
  • Miešanie docker-compose a docker 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 down zmiznú. Pozri volumes.
  • Žiadne limity pamäte. Jedna služba zožerie celú pamäť stroja a kernel zabije jej susedov. Pozri limity zdrojov.