Docker
Tryb roju dokerów
Szukaj…
Wprowadzenie
Rój to szereg silników dokujących (lub węzłów ), które wspólnie wdrażają usługi . Swarm służy do dystrybucji przetwarzania na wiele maszyn fizycznych, wirtualnych lub chmurowych.
Składnia
Zainicjuj rój : docker swarm init [OPCJE]
Dołącz do roju jako węzeł i / lub menedżer : rój dokerów dołącz do [OPCJE] HOST: PORT
Utwórz nową usługę : usługa dokera utwórz [OPCJE] OBRAZ [POLECENIE] [ARG ...]
Wyświetl szczegółowe informacje na temat jednej lub więcej usług : sprawdź usługę dokera [OPCJE] USŁUGA [USŁUGA ...]
Lista usług : usługa dokera ls [OPCJE]
Usuń jedną lub więcej usług : usługa dokowania rm SERVICE [SERVICE ...]
Skaluj jedną lub wiele replikowanych usług : skala usługi dokera SERVICE = REPLICAS [SERVICE = REPLICAS ...]
Wymień zadania jednej lub więcej usług : usługa dokera ps [OPCJE] USŁUGA [USŁUGA ...]
Zaktualizuj usługę : aktualizacja usługi dokera [OPCJE] USŁUGA
Uwagi
Tryb roju ma następujące funkcje:
- Zarządzanie klastrami zintegrowane z Docker Engine
- Zdecentralizowany projekt
- Deklaratywny model usługi
- skalowanie
- Pożądane uzgodnienie stanu
- Sieć z wieloma hostami
- Odkrycie usługi
- Równoważenie obciążenia
- Domyślnie bezpieczny projekt
- Aktualizacje kroczące
Aby uzyskać bardziej oficjalną dokumentację Dockera dotyczącą wizyty Swarm : Omówienie trybu Swarm
Polecenia CLI w trybie roju
Kliknij opis poleceń, aby uzyskać dokumentację
docker swarm init [OPTIONS]
Dołącz do roju jako węzeł i / lub menedżer
docker swarm join [OPTIONS] HOST:PORT
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Wyświetl szczegółowe informacje na temat jednej lub więcej usług
docker service inspect [OPTIONS] SERVICE [SERVICE...]
docker service ls [OPTIONS]
docker service rm SERVICE [SERVICE...]
Skaluj jedną lub wiele replikowanych usług
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
Wymień zadania jednej lub więcej usług
docker service ps [OPTIONS] SERVICE [SERVICE...]
docker service update [OPTIONS] SERVICE
Utwórz rój w systemie Linux za pomocą maszyny dokującej i VirtualBox
# Create the nodes
# In a real world scenario we would use at least 3 managers to cover the fail of one manager.
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox worker1
# Create the swarm
# It is possible to define a port for the *advertise-addr* and *listen-addr*, if none is defined the default port 2377 will be used.
docker-machine ssh manager \
docker swarm init \
--advertise-addr $(docker-machine ip manager)
--listen-addr $(docker-machine ip manager)
# Extract the Tokens for joining the Swarm
# There are 2 different Tokens for joining the swarm.
MANAGER_TOKEN=$(docker-machine ssh manager docker swarm join-token manager --quiet)
WORKER_TOKEN=$(docker-machine ssh manager docker swarm join-token worker --quiet)
# Join a worker node with the worker token
docker-machine ssh worker1 \
docker swarm join \
--token $WORKER_TOKEN \
--listen-addr $(docker-machine ip worker1) \
$(docker-machine ip manager):2377
Znajdź token dołączenia do pracownika i menedżera
Podczas automatyzacji przydzielania nowych węzłów do roju, musisz wiedzieć, jaki jest właściwy token łączenia dla roju, a także podany w reklamie adres menedżera. Możesz to sprawdzić, uruchamiając następujące polecenia w dowolnym z istniejących węzłów menedżera:
# grab the ipaddress:port of the manager (second last line minus the whitespace)
export MANAGER_ADDRESS=$(docker swarm join-token worker | tail -n 2 | tr -d '[[:space:]]')
# grab the manager and worker token
export MANAGER_TOKEN=$(docker swarm join-token manager -q)
export WORKER_TOKEN=$(docker swarm join-token worker -q)
Opcja -q wyświetla tylko token. Bez tej opcji otrzymasz pełne polecenie rejestracji w roju.
Następnie na nowo wyposażonych węzłach możesz dołączyć do roju za pomocą.
docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS
Aplikacja Hello World
Zwykle chcesz utworzyć stos usług, aby utworzyć replikowaną i zorganizowaną aplikację.
Typowa nowoczesna aplikacja internetowa składa się z bazy danych, interfejsu API, interfejsu użytkownika i odwrotnego proxy.
Trwałość
Baza danych wymaga trwałości, dlatego potrzebujemy systemu plików współdzielonego przez wszystkie węzły w roju. Może to być NAS, serwer NFS, GFS2 lub cokolwiek innego. Konfiguracja jest poza zakresem. Obecnie Docker nie zawiera i nie zarządza uporczywością w roju. W tym przykładzie założono, że istnieje /nfs/
shared location zamontowane we wszystkich węzłach.
Sieć
Aby móc się ze sobą komunikować, usługi w roju muszą znajdować się w tej samej sieci.
Wybierz zakres adresów IP (tutaj 10.0.9.0/24
) i nazwę sieci ( hello-network
) i uruchom polecenie:
docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--opt encrypted \
hello-network
Baza danych
Pierwszą potrzebną usługą jest baza danych. Użyjmy postgresql jako przykładu. Utwórz folder bazy danych w nfs/postgres
i uruchom to:
docker service create --replicas 1 --name hello-db \
--network hello-network -e PGDATA=/var/lib/postgresql/data \
--mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
kiasaki/alpine-postgres:9.5
Zauważ, że użyliśmy opcji --network hello-network
i --mount
.
API
Tworzenie interfejsu API jest poza zakresem tego przykładu, więc udawajmy, że masz obraz interfejsu API pod username/hello-api
.
docker service create --replicas 1 --name hello-api \
--network hello-network \
-e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
username/hello-api
Zauważ, że przekazaliśmy nazwę naszej usługi bazy danych. Docker Swarm ma wbudowany okrągły serwer DNS, więc interfejs API będzie mógł łączyć się z bazą danych przy użyciu swojej nazwy DNS.
Odwrotny serwer proxy
Stwórzmy usługę nginx, aby obsługiwać nasze API w świecie zewnętrznym. Utwórz pliki konfiguracyjne nginx we wspólnej lokalizacji i uruchom to:
docker service create --replicas 1 --name hello-load-balancer \
--network hello-network \
--mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
-p 80:80 \
nginx:1.10-alpine
Zauważ, że użyliśmy opcji -p
do opublikowania portu. Ten port byłby dostępny dla dowolnego węzła w roju.
Dostępność węzła
Dostępność węzła trybu roju:
- Aktywny oznacza, że planista może przypisywać zadania do węzła.
- Pauza oznacza, że planista nie przypisuje nowych zadań do węzła, ale istniejące zadania pozostają uruchomione.
- Opróżnianie oznacza, że planista nie przypisuje nowych zadań do węzła. Program planujący zamyka wszelkie istniejące zadania i planuje je w dostępnym węźle.
Aby zmienić dostępność trybu:
#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls
Promuj lub obniżaj liczbę węzłów roju
Aby wypromować węzeł lub zestaw węzłów, uruchom docker node promote
z węzła menedżera:
docker node promote node-3 node-2
Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.
Aby obniżyć poziom węzła lub zestawu węzłów, uruchom docker node demote
z węzła menedżera:
docker node demote node-3 node-2
Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.
Opuszczając rój
Węzeł roboczy:
#Run the following on the worker node to leave the swarm.
docker swarm leave
Node left the swarm.
Jeśli węzeł pełni rolę Menedżera , pojawi się ostrzeżenie o utrzymaniu kworum Menedżerów. Możesz użyć opcji --force, aby wyjść z węzła menedżera:
#Manager Node
docker swarm leave --force
Node left the swarm.
Węzły, które opuściły Rój, nadal będą się wyświetlać w danych wyjściowych docker node ls
.
Aby usunąć węzły z listy:
docker node rm node-2
node-2