Docker Swarm - andyceo/documentation GitHub Wiki
Команды docker swarm
, docker node
, docker config
, docker secret
и docker service
имеют отношение только к работе Docker Engine в режиме Swarm и могут выполняться только на ноде-менеджере!
-
docker swarm
- управляет самим кластером- ca Manage root CA
- init Initialize a swarm
- join Join a swarm as a node and/or manager
- join-token Manage join tokens
- leave Leave the swarm
- unlock Unlock swarm
- unlock-key Manage the unlock key
- update Update the swarm
-
docker node
- управляет нодами в кластере- demote Demote one or more nodes from manager in the swarm
- inspect Display detailed information on one or more nodes
- ls List nodes in the swarm
- promote Promote one or more nodes to manager in the swarm
- ps List tasks running on one or more nodes, defaults to current node
- rm Remove one or more nodes from the swarm
- update Update a node
-
docker service
- управляет сервисами в кластере- create Create a new service
- inspect Display detailed information on one or more services
- logs Fetch the logs of a service or task
- ls List services
- ps List the tasks of one or more services
- rm Remove one or more services
- scale Scale one or multiple replicated services
- update Update a service
Также, комнада docker system info
(или docker info
) может показать информацию о статусе текущей ноды и работе кластера.
docker swarm init --advertise-addr [advertise ip]:2377
docker swarm join --token [token] [manager ip]:[manager port]
-
Посмотрим список нод в кластере (выполнять только на машине-менеджере):
docker node ls
-
Посмотрим данные о ноде в человекочитаемом формате (выполнять только на машине-менеджере):
docker node inspect <NODE-ID> --pretty
Если нужен json-формат, уберите флаг
--pretty
. -
Уберем ноду-воркер из кластера (выполняется на машине-воркере):
docker swarm leave
После того, как нода-воркер покинула кластер, на ноде-менеджере можно выполнить команду
docker node rm worker-node
для удаления ноды из списка нод кластера (
docker node ls
). -
Посмотрим все сервисы, которые запущены в кластере (выполняется на менеджере):
docker service ls
-
Запустим простейший сервис:
docker service create --replicas 1 --name helloworld busybox ping docker.com
-
Теперь мы можем посмотреть детали запущенного сервиса:
docker service inspect --pretty <SERVICE-ID>
-
Посмотрим, какие именно ноды выполняют наш сервис:
docker service ps <SERVICE-ID>
Если мы зайдем на ноду, которая выполняет сервис, по ssh, и запустим команду
docker ps
, то сможем увидеть контейнер для этой задачи. -
Удалим сервис из кластера (выполняется на менеджере):
docker service rm <SERVICE-ID>
-
Остановить все экземпляры сервиса, но не удалять его:
docker service update --replicas=0 <SERVICE-ID>
-
Запуск сервиса, объявленного в файле
docker-cloud.yml
:docker stack deploy --compose-file docker-cloud.yml stack_name
On manager node do:
-
Demote node to worker
sudo docker node demote NODE_ID
-
Change node availability to Drain
sudo docker node update --availability drain NODE_ID
On the leaving node:
-
Leave node from Swarm
sudo docker swarm leave
Again on manager node do:
-
Remove node from cluster
sudo docker node rm NODE_ID
sudo docker config create YOUR-CONFIG-NAME-`date --utc --iso-8601=seconds | sed 's/+00:00/Z/g' | sed 's/-//g' | sed 's/://g'` /data/configs/YOUR/CONFIG/NAME
echo -n "<YOUR-SECRET-GOES-HERE>" | docker secret create <SECRET-NAME> -
Create debugging service on specific node with specific secret to view it and test swarm connectivity
Following command create and run Docker Swarm service that will be listen connections on 5001 port, so you can curl
to the container and view logs. Also you can do docker container exec -ti CONTAINER_ID sh -il
to the running container and view secrets that you pass into service with cat /run/secrets/YOUR_SECRET_NAME
:
sudo docker service create --name 'secrets' --secret 'YOUR_SECRET_NAME' --network='YOUR_NETWORK' --publish 'published=5001,target=5001' --constraint 'node.hostname == YOUR_NODE_ID' --entrypoint='/bin/sh -c' alpine:latest 'while true; do nc -l -p 5001; done'
Change your secret name, constraints, network and used ports. Note that ports would be opened in ingress
network. Of course you can use another image instead of alpine:latest
, too. You also can change service configuration with docker update
command after creation with --secret-rm
, secret-add
for secrets, --network-add
, --network-rm
for networks and --publish-add
, --publish-rm
for publishing ports, and --env-add
, --env-rm
.
sudo docker node ls -q | xargs sudo docker node inspect -f '{{ .ID }} [{{ .Description.Hostname }}]: {{ .Spec.Labels }}'
More pretty formatting:
sudo docker node ls -q | xargs sudo docker node inspect -f '{{ .ID }} [{{ .Description.Hostname }}]: {{ range $k, $v := .Spec.Labels }}{{ $k }}={{ $v }} {{end}}'
Source: How to list docker swarm nodes with lables
- Кластер Docker Swarm за 30 секунд
- Manage nodes in a swarm
- Cloud stack file YAML reference
- Compose file version 3 reference
- Deploy Swarm Services with the new docker
stack
and a compose file! - Deploy Docker Compose (v3) to Swarm (mode) Cluster
- How Docker Swarm Container Networking Works – Under the Hood