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.