Generator stacku Docker Swarm
Manifest YAML z replikami, rolling update, sekretami i siecią overlay
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Ograniczenia węzłów
Jedno wyrażenie == lub != w każdym wierszu, np. node.role == worker.
Opcje zaawansowane
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator stacku Docker Swarm — manifest gotowy do przeglądu
Generator stacku Docker Swarm tworzy plik stack.yml dla jednej replikowanej usługi. Podajesz obraz z jawnym tagiem lub digestem, porty i ograniczenia węzłów, a narzędzie składa sekcję deploy, rolling update z rollbackiem, zasoby, sekrety zewnętrzne oraz opcjonalną sieć overlay.
Stack korzysta ze składni Compose 3.8, ponieważ polecenie docker stack deploy nadal obsługuje starszy format Compose v3. Nie jest to plik do lokalnego docker compose up: Swarm interpretuje deploy.replicas, placement i routing mesh na poziomie klastra. Jeśli potrzebujesz środowiska deweloperskiego, lepszym punktem startu jest generator Docker Compose.
Co trafia do wygenerowanego YAML
| Fragment | Działanie | Co sprawdzić |
|---|---|---|
image | Obraz pobierany przez każdy węzeł | tag nie może być latest; najlepiej przypiąć digest |
replicas | Liczba zadań usługi | rezerwacje CPU i RAM muszą mieścić się na węzłach |
placement | Filtruje węzły przez role i etykiety | etykiety muszą istnieć przed deployem |
update_config | Aktualizuje po jednej replice | monitoruje błąd i uruchamia rollback |
healthcheck | Pyta endpoint /health | obraz musi zawierać wget |
secrets | Montuje pliki w /run/secrets | sekrety są zewnętrzne i muszą już istnieć |
Obraz, tag i użytkownik non-root
docker stack deploy nie buduje obrazu z pola build. Najpierw zbuduj go w CI, wyślij do rejestru i wpisz pełną nazwę, np. registry.example.com/api:1.4.2. Generator odrzuca brak tagu, latest, białe znaki i próby dopisania kolejnej linii YAML. Dla niezmiennych wdrożeń po testach zamień tag na @sha256:….
Manifest Swarm nie ustawia dyrektywy USER; robi to Dockerfile. Proces w obrazie powinien działać jako konto bez uprawnień roota, a kopiowane artefakty muszą należeć do tego konta. Bezpieczny szablon obrazu przygotujesz w generatorze Dockerfile.
Wdrożenie stacku krok po kroku
- Oznacz węzły, których używasz w constraints, np.
docker node update --label-add env=production worker-1. - Utwórz sekrety o nazwach pokazanych na końcu YAML. Nie zapisuj plików z hasłami w repozytorium.
- Zaloguj węzły do prywatnego rejestru lub podczas deployu użyj
--with-registry-auth. - Zapisz wynik jako
stack.ymli sprawdź wcięcia w walidatorze YAML. - Uruchom
docker stack deploy --with-registry-auth -c stack.yml myapp, potem sprawdźdocker stack services myapporazdocker service ps myapp_myapp.
Port ingress, overlay i usługa bez portu publicznego
Port publikowany większy od zera tworzy wpis long syntax z trybem ingress. Routing mesh przyjmuje ruch na każdym węźle i kieruje go do dostępnej repliki. Wartość zero całkowicie pomija sekcję ports; nie dodaje pozornego expose, bo w Swarm usługi tej samej sieci i tak komunikują się po porcie kontenera.
Sieć overlay łączy zadania uruchomione na różnych hostach. Generator nie ustawia attachable, więc samodzielny kontener nie dołączy do niej bez potrzeby. Przy większym systemie dodaj kolejne usługi i osobne sieci frontend/backend, zamiast umieszczać wszystko w jednej domenie komunikacji.
Healthcheck, rolling update i rollback
Próba zdrowia wywołuje wget na 127.0.0.1 i ścieżce /health. Zmień ją, jeśli aplikacja używa innego endpointu, albo wyłącz opcję dla workera i bazy. Sam poprawny YAML nie gwarantuje poprawnej próby — polecenie musi istnieć w obrazie, a endpoint nie może zależeć od zewnętrznej usługi.
Aktualizacja startuje jedną nową replikę naraz, obserwuje ją przez 30 sekund i przy pierwszym błędzie przechodzi do rollbacku. Tryb start-first chwilowo wymaga miejsca na starą i nową replikę. Rezerwacje pomagają schedulerowi, a limity zatrzymują pojedynczy kontener przed zajęciem całego hosta.
Bezpieczeństwo sekretów i ograniczeń węzłów
Generator deklaruje sekrety jako external: true. Nie umieszcza ich wartości w environment, etykietach ani historii warstw obrazu. Aplikacja powinna czytać odpowiedni plik z /run/secrets/<nazwa>. Zmiana sekretu wymaga utworzenia nowej wersjonowanej nazwy i aktualizacji usługi, bo obiektu secret nie edytuje się w miejscu.
Każde constraint musi mieć pojedynczą postać klucz == wartość albo klucz != wartość. Narzędzie cytuje wpisy w YAML i odrzuca dodatkowe instrukcje. Constraints nie zastępują monitoringu pojemności: zbyt ścisły zestaw etykiet pozostawi zadania w stanie pending. Jeśli porównujesz orkiestratory, zobacz też generator deploymentu Kubernetes.
Najczęściej zadawane pytania
Dlaczego generator wymaga tagu obrazu?
Bez tagu Docker przyjmuje latest, a ten sam manifest może następnego dnia pobrać inny obraz. Jawna wersja ułatwia rollback; digest daje pełną niezmienność.
Czy Swarm zbuduje obraz z lokalnego Dockerfile?
Nie. docker stack deploy ignoruje proces budowania. Obraz musi być wcześniej zbudowany i dostępny w rejestrze dla wszystkich węzłów.
Dlaczego usługa pozostaje w stanie pending?
Najczęściej żaden aktywny węzeł nie spełnia constraints albo nie ma dość zasobów na reservations. Szczegóły pokaże docker service ps --no-trunc.
Czy healthcheck automatycznie wycofa wdrożenie?
Podczas aktualizacji niezdrowe zadanie liczy się jako niepowodzenie monitorowane przez update_config. Poza aktualizacją Swarm zastępuje chore zadanie zgodnie z polityką restartu.
Jak zmienić hasło bez wpisywania go do YAML?
Utwórz nowy sekret pod wersjonowaną nazwą, zmień deklarację w stacku i wykonaj deploy. Po przejściu wszystkich replik usuń stary sekret.