DevOps Core
devops-core — служебный блок, создающий общую Docker-сеть dh_network, в которой работают все остальные компоненты платформы. Самый маленький блок поставки: один контейнер-инициализатор, никакой конфигурации, никаких данных. Должен запускаться первым — без него остальные блоки не стартуют.
Зачем нужен отдельный блок
Альтернатива блоку — поместить определение сети прямо в docker-compose.yml одного из основных блоков (например, postgres или backend). Это работало бы, но создаёт неудобство: остановить такой блок (docker compose down) означало бы попытаться удалить сеть, что заблокировано пока к ней подключены другие контейнеры.
Вынесение определения сети в отдельный служебный блок devops-core развязывает жизненный цикл сети и жизненный цикл основных сервисов. Сеть создаётся один раз и живёт независимо от пересоздания postgres, backend и других блоков.
Структура блока
Каталог блока — /etc/datahub/devops-core/:
В блоке нет .env, .env.template, томов или подкаталогов с данными. Это чисто служебный блок.
Файл docker-compose.yml:
networks:
dh_network:
name: dh_network
driver: bridge
ipam:
config:
- subnet: 10.203.0.0/24
services:
dh_initializer:
container_name: dh_initializer
hostname: dh_initializer
image: registry.gitlab.com/datahub/v3/services/busybox:main
command: ["sh", "-c", "echo 'network ready'"]
networks:
- dh_network
restart: "no"
Особенности:
- Сеть определена внутри блока (не
external) —devops-coreединственный создаётdh_network. Все остальные блоки подключаются к ней как кexternal. driver: bridge— стандартный bridge-driver Docker. Не требует overlay или внешнего SDN.subnet: 10.203.0.0/24— выделенная подсеть для платформы, 254 адреса. Не должна пересекаться с другими сетями хоста и Docker.busybox— минимальный образ для контейнера-инициализатора (несколько мегабайт).command: ["sh", "-c", "echo 'network ready'"]— контейнер запускается, выводит сообщение и завершается. Его задача — заставить Docker Compose реально создать сеть. Без сервиса определение сети безservices:не применяется.restart: "no"— после однократного отработки контейнерdh_initializerнаходится в состоянииExited (0). Это нормально. Сама сетьdh_networkпродолжает существовать.
Запуск
Первый запуск при установке:
После завершения dh_initializer команда docker network ls покажет сеть в списке. Проверка:
Ожидаемый ответ — dh_network [{10.203.0.0/24 ... }].
После этого можно поднимать остальные блоки.
Жизненный цикл
В отличие от остальных блоков, devops-core не нуждается в постоянной работе контейнера. После того как docker compose up создал сеть dh_network, она существует во внутреннем состоянии Docker независимо от dh_initializer: переживает остановку контейнера, перезагрузку сервера и рестарт Docker daemon. Сеть удаляется только в двух случаях:
docker compose downв каталогеdevops-core— при условии, что к сети не подключены контейнеры других блоков. Если подключены — Docker откажется удалять сеть с ошибкойhas active endpoints, и она останется в живых.- Явная команда
docker network rm dh_network— также сработает только если к сети никто не подключён.
На обычно работающем сервере в выводе docker ps -a будет запись:
Это нормальное состояние. Заново запускать dh_initializer после рестарта сервера не нужно — Docker Compose не пересоздаёт сеть, если она уже есть.
Когда нужно перезапустить
Перезапуск devops-core нужен только в особых случаях:
- При изменении подсети
10.203.0.0/24на другую (например, если она пересекается с корпоративной сетью). В таком сценарии нужно сначала остановить все блоки, удалить сеть, обновитьdocker-compose.ymlи запустить заново. - При диагностике сетевых проблем — пересоздание сети может сбросить «застрявшие» сетевые правила.
Полный пересоздать-цикл:
cd /etc/datahub/nginx && sudo docker compose down
cd /etc/datahub/frontend && sudo docker compose down
cd /etc/datahub/backend && sudo docker compose down
cd /etc/datahub/rabbitmq && sudo docker compose down
cd /etc/datahub/postgres && sudo docker compose down
cd /etc/datahub/devops-core && sudo docker compose down
Затем — поднять devops-core и остальные блоки в обратном порядке.
Что дальше
- Архитектура развертывания — общая схема блоков и сети
dh_network. - PostgreSQL — следующий по порядку запуска блок.
- Быстрый старт / п. 4.1 — пошаговый запуск
devops-coreпри первичной установке.