Docker Swarm

  • Node - это наши виртуальные машины, на которых установлен docker. Есть manager и workers ноды. Manager нода управляет workers нодами. Она отвечает за создание/обновление/удаление сервисов на workers, а также за их масштабирование и поддержку в требуемом состоянии. Workers ноды используются только для выполнения поставленных задач и не могут управлять кластером.
  • Stack - это набор сервисов, которые логически связаны между собой. По сути это набор сервисов, которые мы описываем в обычном compose файле. Части stack (services) могут располагаться как на одной ноде, так и на разных.
  • Service - это как раз то, из чего состоит stack. Service является описанием того, какие контейнеры будут создаваться. Если вы пользовались docker-compose.yaml, то уже знакомы с этой сущностью. Кроме стандартных полей docker в режиме swarm поддерживает ряд дополнительных, большинство из которых находятся внутри секции deploy.
  • Task - это непосредственно созданный контейнер, который docker создал на основе той информации, которую мы указали при описании service. Swarm будет следить за состоянием контейнера и при необходимости его перезапускать или перемещать на другую ноду.
$ docker swarm init
$ docker node ls
$ docker node rm stage
$ docker stack deploy --with-registry-auth -c ./docker-compose.stage.yaml stage
$ docker stack ls
$ docker stack services stage
$ docker service ps --no-trunc stage_back
$ docker service inspect stage_back
$ docker stack rm stage
$ docker service create --name nginx --replicas 3 nginx:alpine
$ docker service ps nginx
$ docker node update --label-add TAG=stage stage-1
$ docker container ls
$ docker secret create back_config example.yaml 
$ docker secret ls
  • stage - HOSTNAME (из docker node ls)

nano ./docker-compose.stage.yaml

version: "3.9"

services:
  back:
    image: docker-registry.ru:5000/ptm:stage
    ports:
      - "4003:4003"
    environment:
      TZ: "Europe/Moscow"
    extra_hosts:
      - host.docker.internal:host-gateway
    command: make server_start
    volumes:
      - /p/ptm/config/config.yaml:/p/ptm/config/config.yaml
      - /p/ptm/stat/web:/p/ptm/stat/web

nano ./example.yaml

token: sfsjksajflsf_secret
$ docker swarm join --token SWMTKN-1-...-... 172.31.245.104:2377
$ docker swarm leave