# Docker Swarm
## Содержание
- [Ссылки](#ссылки)
- [Быстрый старт](#быстрый-старт)
- [Команды](#команды)
- []()
## Ссылки
- [Docker Swarm](https://docs.docker.com/engine/reference/commandline/swarm/)
- []()
## Быстрый старт
- [create](https://docs.docker.com/engine/reference/commandline/service_create/)
- [scale](https://docs.docker.com/engine/swarm/swarm-tutorial/scale-service/)
- [update](https://docs.docker.com/engine/reference/commandline/service_update/)
## Команды
## Установка
Docker Swarm входит в базовую версию Docker. Дополнительная установка на требуедтся
Если нужно создавать `docker-машины`, то необходимо установить средства для виртуализации (TODO)
## Настройка
Инициализировать swarm (перейти в swarm-режим):
`docker swarm init`
Создать сервис из образа:
`docker service create --publish=3000:3000 --update-delay 30s --name=$SERVICE_NAME --replicas=1 $IMAGE_NAME:latest`
Изменить количество реплик в сервисе:
`docker service scale $SERVICE_NAME=5`
## Deploy
Gitlab Runner собирает образ и пушит его в Registry:
```
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
docker pull $CONTAINER_IMAGE:latest || true
docker build --cache-from $CONTAINER_IMAGE:latest -t $CONTAINER_IMAGE:latest .
docker push $CONTAINER_IMAGE:latest
```
Для обновления на сервере нужно скачать новый образ и обновить все реплики сервиса:
```
docker pull $CONTAINER_IMAGE:latest
docker service update --force --image $CONTAINER_IMAGE:latest $SERVICE_NAME
docker system prune -a --filter "until=24h"
```
## Состояние
Для просмотра состояния сервиса испрользуется команда:
`docker service inspect --pretty <name>`