День добрый.
Настраиваю тестовую среду для автоматического развертывания контейнеров на кластере. Имеется вопрос как правильнее настроить. TeamCity агент собирает исходники, тестирует, билдит контейнер и кладет его в registry. Дальше вопрос как его поднять на кластере?
Вариант 1. Стандартными средствами docker:
export DOCKER_HOST=swarm-master:4000
docker run -d -p 1234:1234 --name my_application --label my_application registry/my_application:${version}
Вариант 2. Docker-compose:
export DOCKER_HOST=swarm-master:4000
docker-compose up my_application
Вариант 1 хорош тем, что он работает. Но есть проблема с остановкой сервисов если их несколько, плюс конфиг развертывания пишется в TeamCity.
Вариант 2 хорош тем что конфиг развертывания пишется в самом проекте, но с запуском проблема. Из TC агента сервис не стартует (
Error response from daemon: failed to parse pool request for address space "GlobalDefault" pool "" subpool "": cannot find address space GlobalDefault (most likely the backing datastore is not configured)). Хотя на машине из кластера он запускается. Куда копать? подключаться к мастеру кластера копировать docker-compose.yml туда и запускать там? или docker-compos должен работать с удаленным кластером нормально?
UPD:
Проблему с
failed to parse pool request for address space "GlobalDefault" pool удалось решить. (Нужно было в конфиг всех демонов кластера добавить --cluster-store consul://consul-host:8500 --cluster-advertise eth0:2375")
Приложение поднимается, но выявилась проблема с Reschedule:
restart: unless-stopped
labels:
com.docker.swarm.reschedule-policies: "[\"on-node-failure\"]"
при падении ноды контейнер успешно переносится на другую, но не запускается...
UPD2:
Проблема с Reschedule оказалось в том что я гасил машину на который были как нода SWARMа так и нода CONSULa. Если вырубать машину на которой нет консула, то сервис поднимается нормально...