-
Service - описание того, какие контейнеры будут создаваться. Кроме стандартных полей docker в режиме swarm поддерживает ряд дополнительных, большинство из которых находятся внутри секции deploy. Один service запускает определенное количество tasks.
-
Stack - это набор сервисов, которые логически связаны между собой. По сути это набор сервисов, которые мы описываем в обычном compose файле. Части stack (services) могут располагаться как на одной ноде, так и на разных.
-
Task — это атомарная запланированная единица Docker Swarm, которая содержит информацию о контейнере и команду, которая должна запущена внутри контейнера.
-
Реплика – каждый контейнер, который запускается на ноде. Количество реплик — это ожидаемое число всех контейнеров для данной service
- replicated service - указанное количество реплицируемых контейнеров распределяются между узлами на основе стратегии планированния
- global service - один контейнер запускается на каждом доступном узле в кластере
Для manager нод:
firewall-cmd --add-port=2376/tcp --permanent;
firewall-cmd --add-port=2377/tcp --permanent;
firewall-cmd --add-port=7946/tcp --permanent;
firewall-cmd --add-port=7946/udp --permanent;
firewall-cmd --add-port=4789/udp --permanent;
firewall-cmd --reload;
Для worker нод:
firewall-cmd --add-port=2376/tcp --permanent;
firewall-cmd --add-port=7946/tcp --permanent;
firewall-cmd --add-port=7946/udp --permanent;
firewall-cmd --add-port=4789/udp --permanent;
firewall-cmd --reload;
- Инициализация Docker Swarm, превращая текущий узел в менеджер кластера.
docker swarm init --advertise-addr <manager_ip>
#<manager_ip> - IP-адрес менеджера (указание необходимо в случае с несколькими интерфейсами)
- Выводит токен для присоединения к кластеру как рабочий узел или менеджер.
docker swarm join-token worker # Токен для рабочих узлов
docker swarm join-token manager # Токен для менеджеров
- Присоединение узла к существующему кластеру.
docker swarm join --token <join_token> <manager_ip>:2377
#<join_token> - токен для добавления в кластер
#<manager_ip>:2377 - IP-адрес и порт менеджера
- Отключение узла от кластера.
docker swarm leave --force
- Выводит список узлов в Swarm-кластере.
docker node ls
- Выводит список тасок на ноде в Swarm-кластере.
docker node ps
- Посмотреть параметры ноды:
docker node inspect <node_id> --pretty
#<node_id> - идентификатор узла
- Обновление настроек узла (например, понижение или повышение до менеджера или временное выключение-включение (drain-active)).
docker node update --role manager <node_id>
docker node update --availability drain
docker node update <node_id> --availability active
docker node update --label-add foo --label-add bar=baz <node_id>
#foo,bar=baz - добавляемые ярлыки на ноду
- Повысить до менеджера (promote) или понизить до воркера (demote) ноду
docker node promote <node_id>
docker node demote <node_id>
- Удаление узла из кластера.
docker node rm <node_id>
- Развертывание стека из docker-compose.yml в Swarm-кластере.
docker stack deploy --with-registry-auth -c <compose_file> <stack_name>
#--with-registry-auth - позволяет передать авторизационные данные на worker ноды, для того чтобы использовался один и тот же образ из регистра (Опционально)
#<compose_file> - путь к файлу docker-compose.yml
#<stack_name> - имя стека
- список всех стеков в кластере
docker stack ls
- Список тасок стека
docker stack ps stack_name
- Удаление стека и его сервисов.
docker stack rm <stack_name>
- Список всех сервисов, работающих в стеке.
docker stack services <stack_name>
- Создание нового сервиса.
docker service create --name <service_name> <image>
#<service_name> - имя сервиса
#<image> - образ для запуска
- Вывод списка всех сервисов.
docker service ls
- Обновление сервиса (например, изменение числа реплик).
docker service update --replicas <number> <service_name>
#<number> - число реплик
#<service_name> - имя сервиса
docker service update --image user/container:1.2 userserv
docker service update --force --update-parallelism 1 --update-delay 30s nginx
docker service update --update-parallelism 5--update-delay 2s --image user/container:1.2 userserv
docker service update --limit-cpu 2 nginx
docker service update --replicas=5 nginx
- Просмотр журнала для конкретного сервиса:
docker service logs <service_name>
- Удаление сервиса.
docker service rm <service_name>
#<service_name> - имя сервиса
- Масштабирование сервиса до указанного числа реплик.
docker service scale <service_name>=<replicas>
#<replicas> - количество реплик
Swarm предоставляет хранилище для приватных данных (secrets), которые необходимы контейнерам. Как правило эта функциональность используется для хранения логинов, паролей, ключей шифрования и токенов доступа от внешних систем, БД и т.д.
- Создание секрета:
docker secret create main_config <example.yaml>
#example.yaml:
#token: sfsjksajflsf_secret
- Посмотреть список секретов:
docker secret ls
- Создание сети в режиме overlay (для использования в Swarm).
docker network create --driver overlay <network_name>
#<network_name> - имя сети
- Список сетей, доступных в кластере.
docker network ls
- Удаление сети.
docker network rm <network_name>
#<network_name> - имя сети
- Создание нового тома.
docker volume create <volume_name>
#<volume_name> - имя тома
- Вывод списка томов.
docker volume ls
- Удаление тома
docker volume rm <volume_name>
#<volume_name> - имя тома
version: "3"
services:
some-db:
image: my-db:latest
volumes:
- db-data:/data
networks:
my-net:
aliases:
- db
deploy:
placement:
constraints: [node.role == manager]
some-app:
image: some-app:latest
networks:
- my-net
depends_on:
- some-db
deploy:
mode: replicated
replicas: 2
labels: [APP=SOME-APP]
resources:
limits:
cpus: '0.25'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
update_config:
parallelism: 1
delay: 10s
failure_action: continue
monitor: 60s
max_failure_ratio: 0.3
placement:
constraints: [node.role == worker]
networks:
my-app:
volumes:
db-data: