Compose

27th Apr 2026

Docker Compose a Docker Swarm

Pri práci s Dockerom sa veľmi rýchlo ukáže, že reálne aplikácie netvoria jeden kontajner, ale viacero navzájom spolupracujúcich častí. Typickým príkladom je webová aplikácia, ktorá potrebuje webový server, databázu a niekedy aj cache alebo iné služby. Spúšťať každý kontajner ručne by bolo zdĺhavé a náchylné na chyby, preto vznikli nástroje, ktoré tento proces automatizujú. Docker Compose pomáha s definovaním a spúšťaním viacerých kontajnerov na jednom stroji, zatiaľ čo Docker Swarm rieši orchestráciu kontajnerov vo väčšom prostredí, teda na viacerých serveroch.

Docker Compose a YAML konfigurácia

Docker Compose umožňuje definovať celú aplikáciu pomocou jedného konfiguračného súboru. Tento súbor má najčastejšie názov docker-compose.yml a je zapísaný vo formáte YAML. YAML je jednoduchý textový formát, ktorý sa používa na konfigurácie, pretože je ľahko čitateľný aj pre človeka. Namiesto zátvoriek alebo značiek používa odsadenie pomocou medzier, pričom každá úroveň odsadenia vyjadruje vnorenie dát.

Dôležité je pochopiť, že YAML je citlivý na odsadenie. Ak sa zmení počet medzier, môže sa zmeniť význam celého súboru. Každý riadok má formu kľúč: hodnota, napríklad image: nginx, čo znamená, že sa použije image nginx.

Podrobný príklad docker-compose.yml

Pozrime sa na konkrétny príklad aplikácie, ktorá obsahuje webový server a databázu:

version: "3.9"

services:
  web:
    image: nginx
    ports:
      - "8080:80"
    depends_on:
      - db

  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Tento súbor na prvý pohľad vyzerá jednoducho, ale skrýva v sebe viacero dôležitých konceptov.

Na začiatku je uvedená verzia formátu Compose. Tá určuje, aké funkcie sú dostupné. V praxi sa často používa verzia 3.x, ktorá je kompatibilná aj s Docker Swarmom.

Najdôležitejšou časťou je sekcia services. Tá obsahuje definície jednotlivých služieb, teda kontajnerov. V našom prípade máme dve služby: web a db.

Služba web používa image nginx, čo je populárny webový server. Parameter ports definuje mapovanie portov medzi hostiteľským systémom (napr. tvoj počítač) a kontajnerom. Zápis "8080:80" znamená, že ak otvoríš prehliadač na adrese localhost:8080, požiadavka sa presmeruje na port 80 v kontajneri, kde beží nginx.

Parameter depends_on hovorí, že služba web závisí od služby db. To znamená, že Docker Compose najskôr spustí databázu a až potom webový server. Neznamená to však, že databáza je úplne pripravená na použitie, iba že kontajner bol spustený.

Služba db používa image postgres, čo je relačná databáza. V sekcii environment nastavujeme premenné prostredia. Premenná POSTGRES_PASSWORD určuje heslo pre databázu. Premenné prostredia sú bežný spôsob, ako konfigurovať aplikácie bez nutnosti meniť ich zdrojový kód.

Sekcia volumes zabezpečuje ukladanie dát mimo kontajnera. Kontajnery sú totiž dočasné – ak ich vymažeme, stratíme aj ich dáta. Volume db_data je pripojené k priečinku /var/lib/postgresql/data v kontajneri, kde Postgres ukladá svoje dáta. To znamená, že aj keď kontajner odstránime, dáta zostanú zachované.

Na konci súboru definujeme samotné volume db_data. Docker ho automaticky vytvorí a spravuje.

Ako spolu služby komunikujú

Docker Compose automaticky vytvára sieť, v ktorej sú všetky služby prepojené. To znamená, že kontajnery sa môžu navzájom oslovovať pomocou názvov služieb.

ASCII diagram môže pomôcť pochopiť túto komunikáciu:

        +-------------------+
        |      Browser      |
        |  localhost:8080   |
        +---------+---------+
                  |
                  v
        +-------------------+
        |    web (nginx)    |
        |    port 80        |
        +---------+---------+
                  |
                  v
        +-------------------+
        |   db (postgres)   |
        |    port 5432      |
        +-------------------+

Webový server prijíma požiadavky z prehliadača a následne komunikuje s databázou pomocou názvu db. Nie je potrebné nastavovať IP adresy, pretože Docker zabezpečí DNS preklad medzi kontajnermi.

Docker Swarm a jeho architektúra

Zatiaľ čo Docker Compose funguje na jednom stroji, Docker Swarm umožňuje rozložiť aplikáciu na viacero serverov. Tieto servery spolu tvoria cluster.

Každý server v clustri sa nazýva node. Existujú dva typy uzlov: manager a worker. Manager riadi celý cluster a rozhoduje, kde sa majú kontajnery spustiť. Worker vykonáva tieto úlohy a spúšťa samotné kontajnery.

Architektúru Swarmu si môžeme predstaviť takto:

             +----------------------+
             |    Manager Node      |
             |  (riadenie clusteru) |
             +----------+-----------+
                        |
        +---------------+---------------+
        |                               |
        v                               v
+---------------+               +---------------+
|  Worker Node  |               |  Worker Node  |
|  kontajnery   |               |  kontajnery   |
+---------------+               +---------------+

Manager node obsahuje plánovač (scheduler), ktorý rozhoduje, kde sa kontajnery spustia. Sleduje aj stav systému a zabezpečuje, aby bol zachovaný požadovaný počet kontajnerov.

Fungovanie Docker Swarmu

V Docker Swarme sa namiesto kontajnerov pracuje so službami. Služba definuje, aký image sa má použiť, koľko replík má bežať a aké porty majú byť dostupné.

Ak napríklad nastavíme službu s tromi replikami, Swarm zabezpečí, že budú bežať tri kontajnery, ideálne rozložené na rôznych uzloch. Každá replika je reprezentovaná tzv. taskom, čo je konkrétny bežiaci kontajner.

Dôležitým konceptom je požadovaný stav (desired state). Používateľ povie systému, ako má vyzerať, napríklad „chcem 3 kontajnery“. Swarm potom neustále kontroluje realitu a ak zistí rozdiel, automaticky ho opraví.

Príklad správania:

Požadovaný stav: 3 kontajnery

Aktuálny stav:
[ container 1 ] OK
[ container 2 ] OK
[ container 3 ] FAIL

Swarm reakcia:
→ spustí nový container 3

Tento mechanizmus sa nazýva self-healing. Okrem toho Swarm poskytuje aj load balancing, teda rozdeľovanie požiadaviek medzi kontajnery, aby sa rovnomerne využívali zdroje.

Záver

Docker Compose je vhodný najmä pre vývojárov, ktorí potrebujú rýchlo spustiť viacero služieb na jednom počítači. Vďaka YAML konfigurácii je celé prostredie jednoducho reprodukovateľné. Docker Swarm naopak rieši škálovanie aplikácií na viacerých serveroch, automatickú obnovu kontajnerov a rozdeľovanie záťaže.

Tieto nástroje spolu predstavujú dôležitý krok smerom k modernému spôsobu nasadzovania aplikácií, kde je infraštruktúra definovaná ako kód a dá sa jednoducho spravovať, zdieľať a opakovane používať.

Previous Post Next Post

Compose