Docker Swarm

Wbudowane w Dockera narzędzie do klastrowania i orkiestracji kontenerów. Prostsza, lecz mniej funkcjonalna alternatywa dla Kubernetes.

Docker Swarm to wbudowany w Dockera tryb klastrowania i orkiestracji kontenerów. W skrócie: bierzesz kilka maszyn z zainstalowanym Dockerem, łączysz je w jeden logiczny klaster (tzw. swarm) i od tej pory zarządzasz nimi tak, jakby były jednym wielkim hostem. To prostsza, lżejsza alternatywa dla Kubernetes — mniej możliwości, ale też znacznie mniej rzeczy, które trzeba ogarnąć, zanim cokolwiek ruszy.

Jak to działa

Klaster składa się z węzłów dwóch typów: manager (zarządza stanem klastra, planuje, gdzie uruchomić kontenery) i worker (po prostu odpala zadania). Managery trzymają wspólny stan przez algorytm konsensusu Raft, dlatego dla odporności na awarie stawia się ich nieparzystą liczbę — najczęściej 3 lub 5.

Zamiast myśleć o pojedynczych kontenerach, opisujesz service: „chcę 5 replik tego obrazu”. Swarm sam rozkłada je po węzłach, a jeśli któryś kontener padnie albo cała maszyna zniknie, dba o to, żeby liczba replik wróciła do zadanej. Dorzuca też wbudowany load balancing (tzw. routing mesh) i rolling updates, czyli aktualizacje bez ubijania całej usługi naraz.

Przykład z praktyki

Najszybsza droga, żeby zobaczyć to na żywo. Inicjujesz klaster na pierwszej maszynie:

docker swarm init --advertise-addr 192.168.0.10

Dostajesz gotowy token i komendę docker swarm join ..., którą wklejasz na kolejnych serwerach, żeby dołączyły jako workery. Potem uruchamiasz usługę z trzema replikami:

docker service create --name web --replicas 3 -p 80:80 nginx

Stan sprawdzasz przez docker service ls i docker service ps web. Jeśli masz cały projekt w docker-compose.yml, wdrażasz go jednym poleceniem jako stack: docker stack deploy -c docker-compose.yml mojastrona. To duża zaleta Swarma — ten sam plik Compose, który znasz z lokalnego dev, działa na produkcji.

Na co uważać

Najczęstszy mit to „Swarm umarł”. Nie umarł — projekt żyje i jest częścią Dockera, ale rozwija się wolno, a rynek mocno przechylił się w stronę Kubernetes (zwłaszcza w ogłoszeniach o pracę). Jeśli uczysz się pod kątem zatrudnienia, K8s daje więcej. Drugi błąd to jeden manager w produkcji — gdy padnie, tracisz sterowanie klastrem. I trzeci: mylenie docker run ze światem Swarma — w klastrze operujesz na services, nie na pojedynczych kontenerach.

Pojęcia powiązane: Kubernetes, Docker Compose, orkiestracja kontenerów, węzeł (node), service, replika, load balancing, Raft, container.