🟡 Intermediate

Docker Swarm — Natívna orchestrácia kontajnerov

Docker Swarm je natívny orchestračný nástroj zabudovaný priamo v Docker Engine. Umožňuje vytvoriť cluster z viacerých Docker hostov a spravovať ich ako jeden virtuálny systém. Pre tímy, ktoré už používajú Docker a potrebujú jednoduchú orchestráciu bez komplexity Kubernetes, je Swarm ideálnou voľbou.


Ako Docker Swarm funguje

Swarm cluster sa skladá z dvoch typov uzlov:

Manager nodes — riadia stav clustra, plánujú úlohy a udržiavajú konzistentný stav pomocou Raft consensus algoritmu. Pre vysokú dostupnosť sa odporúča nepárny počet managerov (3 alebo 5).

Worker nodes — vykonávajú kontajnerové úlohy (tasks), ktoré im pridelí manager. Worker uzly nemajú prístup k riadeniu clustra, ale môžu byť kedykoľvek povýšené na managerov.

# Inicializácia Swarm clustra
docker swarm init --advertise-addr 192.168.1.10

# Pridanie worker uzla (token získate z manager nodu)
docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377

# Zobrazenie uzlov v clustri
docker node ls

Services, Tasks a Replicas

Základnou jednotkou nasadenia v Swarm je service — definícia požadovaného stavu aplikácie.

Service — deklaratívny popis toho, čo má bežať (image, počet replík, porty, premenné prostredia).

Task — jednotlivá inštancia kontajnera v rámci service. Každá replika = jedna task.

Replicas — počet identických inštancií service bežiacich naprieč clustrom.

# Vytvorenie service s 3 replikami
docker service create \
  --name web-app \
  --replicas 3 \
  --publish 80:3000 \
  nginx:alpine

# Zobrazenie bežiacich services
docker service ls

# Detail o tasks v service
docker service ps web-app

Swarm automaticky zabezpečí, že požadovaný počet replík vždy beží. Ak uzol vypadne, tasks sa automaticky presunú na zdravé uzly.


Networking — Overlay a Ingress

Docker Swarm poskytuje dva kľúčové typy sietí:

Ingress network — automaticky vytvorená sieť, ktorá zabezpečuje routing mesh. Akýkoľvek uzol v clustri môže prijať požiadavku na publikovaný port, aj keď na ňom daný kontajner nebeží. Load balancer automaticky presmeruje traffic na správny kontajner.

Overlay network — umožňuje komunikáciu medzi kontajnermi naprieč rôznymi hostami. Šifrovaná komunikácia medzi uzlami je voliteľná cez --opt encrypted.

# Vytvorenie overlay siete
docker network create \
  --driver overlay \
  --opt encrypted \
  backend-net

# Service s vlastnou overlay sieťou
docker service create \
  --name api \
  --network backend-net \
  --replicas 2 \
  my-api:latest

Scaling a Load Balancing

Škálovanie v Swarm je triviálne — stačí jeden príkaz:

# Škálovanie na 10 replík
docker service scale web-app=10

# Škálovanie viacerých services naraz
docker service scale web-app=5 api=3 worker=8

Swarm obsahuje vstavaný interný load balancer, ktorý distribuuje požiadavky medzi repliky service pomocou round-robin algoritmu. Externý traffic prechádza cez ingress routing mesh — klient sa pripojí na ľubovoľný uzol a Swarm zabezpečí doručenie na správny kontajner.


Rolling Updates a Rollback

Swarm podporuje rolling updates — postupnú aktualizáciu kontajnerov bez výpadku:

# Aktualizácia image s rolling update
docker service update \
  --image nginx:1.27-alpine \
  --update-parallelism 2 \
  --update-delay 10s \
  --update-failure-action rollback \
  web-app

# Manuálny rollback na predchádzajúcu verziu
docker service rollback web-app

--update-parallelism — koľko tasks sa aktualizuje súčasne.

--update-delay — pauza medzi aktualizáciou ďalšej skupiny.

--update-failure-action — čo robiť pri zlyhaní (pause, continue, alebo rollback).


Secrets a Configs Management

Swarm má vstavanú správu citlivých údajov — secrets sú šifrované v Raft logu a dostupné kontajnerom iba cez RAM filesystem (/run/secrets/).

# Vytvorenie secret
echo "SuperTajneHeslo123" | docker secret create db_password -

# Použitie secret v service
docker service create \
  --name db \
  --secret db_password \
  --env POSTGRES_PASSWORD_FILE=/run/secrets/db_password \
  postgres:16-alpine

# Konfiguračné súbory cez configs
docker config create nginx_conf ./nginx.conf

docker service create \
  --name proxy \
  --config source=nginx_conf,target=/etc/nginx/nginx.conf \
  nginx:alpine

Configs fungujú podobne, ale nie sú šifrované — slúžia na distribúciu konfiguračných súborov naprieč clustrom.


Docker Stack — Deklaratívne nasadenie

Pre komplexnejšie aplikácie sa používa docker stack s Compose súborom:

# docker-stack.yml
version: "3.8"
services:
  web:
    image: my-app:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
    ports:
      - "80:3000"
    networks:
      - frontend
    secrets:
      - db_password

networks:
  frontend:
    driver: overlay

secrets:
  db_password:
    external: true
# Nasadenie stacku
docker stack deploy -c docker-stack.yml myapp

# Zobrazenie stavu
docker stack services myapp

Swarm vs Kubernetes — Kedy čo použiť

Aspekt Docker Swarm Kubernetes
Zložitosť Jednoduchý, rýchly štart Komplexný, strmá krivka učenia
Setup docker swarm init — hotovo Vyžaduje kubeadm, managed službu alebo distribúciu
Škálovanie Desiatky uzlov Tisíce uzlov
Ekosystém Základný, vstavaný Obrovský (Helm, Operators, CRDs)
Auto-scaling Manuálny HPA, VPA, Cluster Autoscaler
Service mesh Nie je Istio, Linkerd, Cilium
Ideálne pre Malé/stredné tímy, jednoduché nasadenia Enterprise, microservices vo veľkom

Kedy Swarm: Máte malý tím (1–5 ľudí), jednoduchšiu architektúru, chcete rýchlo začať bez mesiaca učenia a nepotrebujete pokročilý auto-scaling.

Kedy Kubernetes: Potrebujete škálovanie na stovky služieb, pokročilé networking politiky, service mesh, alebo máte dedikovaný platform tím.


Výhody Swarm pre menšie tímy

  • Nulová dodatočná inštalácia — Swarm je súčasťou Docker Engine
  • Známe nástroje — ak poznáte Docker CLI a Compose, poznáte aj Swarm
  • Rýchly setup — produkčný cluster za minúty, nie dni
  • Nízka prevádzková réžia — menej komponentov = menej vecí na monitorovanie
  • Dostatočný pre 80 % prípadov — väčšina aplikácií nepotrebuje Kubernetes

Zhrnutie

Docker Swarm je pragmatická voľba pre orchestráciu kontajnerov. Ponúka services s replikami, overlay networking, rolling updates, secrets management a vstavaný load balancing — všetko bez externých závislostí. Nie je náhradou Kubernetes pre veľké enterprise nasadenia, ale pre tímy, ktoré chcú orchestráciu bez zbytočnej komplexity, je vynikajúcim riešením.