Денис
26.12.2018
18:21:30
Всем привет. Есть докер-компоуз с сервисами. Стоит задача запустить их все, кроме одного. Потом уже в нужный момент дозапустить этот оставшийся контейнер. Не подскажите как можно это сделать?
inqfen
26.12.2018
18:22:15
А какая причина его тормозить?
Докер-композ не умеет в логику, потому или его в скрипт оборачивать, где явно такие сервисы запускаешь, а потом такой
✖️
26.12.2018
18:23:23
Google
inqfen
26.12.2018
18:23:32
Либо в entrypoint клнтейнеру ожидание добавить
Kool
26.12.2018
18:24:21
✖️
26.12.2018
18:24:24
в компоузе для этого сервиса:`cmd: ['./run.sh']`. а в там уже sleep 10; exec gunicorn --foo-bar
Kool
26.12.2018
18:24:31
ставьте restart on error
и ставьте пробовать 5 раз например
с интервалом в 30 секунд
я так понимаю проблема что бекенд стартует раньше базы
ещё можно настроить depends_on
улучшит ситуацию, но мне лично не помогло
✖️
26.12.2018
18:26:20
потому что депенд он не дожидается пока команда в контейнере полностью запуститься
я везде слипы кидаю если очень нужно
Денис
26.12.2018
18:27:32
Докер поднимается для тестов в CI и один из сервисов интерферирует с частью тестов.Поэтому нужно поднять часть сервисов - прогнать тесты, доподнимать и прогнать оставшиеся тесты. Все это из баш-скрипта запускается, так что видимо придется удалить проблемные сервисы из докер-компоуза и дозапускать их отдельно уже в нужный момент.
George
26.12.2018
18:28:02
Google
Kool
26.12.2018
18:28:04
можно подлечить логику приложения
чтобы при старте пытался N секунд подключаться
такой способ сам докер советует
George
26.12.2018
18:28:27
inqfen
26.12.2018
18:28:34
Kool
26.12.2018
18:28:47
Глупость
не глупость, зависит от того как контейнер реализован
✖️
26.12.2018
18:28:59
George
26.12.2018
18:29:02
Расскажу. Делай depends_on: healthy и расставь хелсчек нормально
inqfen
26.12.2018
18:29:04
тесты - одно, развертывание приложения - другое
Kool
26.12.2018
18:29:10
бывают приложения после старта приложения какую то важную логику стартуют (например миграции)
✖️
26.12.2018
18:29:16
либо создать для тестов отдельный компоуз без него
Kool
26.12.2018
18:29:28
George
26.12.2018
18:29:31
Но это сильно хрупкая логика - раз. Два - работает только во второй версии формата докер-компоуза (не третьей)
inqfen
26.12.2018
18:29:39
George
26.12.2018
18:29:55
Kool
26.12.2018
18:30:01
George
26.12.2018
18:30:08
inqfen
26.12.2018
18:30:09
ну или хоть в баш оборачивают, не надо пытаться из докер-композа логику получить)
Kool
26.12.2018
18:30:17
у меня сейчас в тупую рестартит приложуху 5 раз каждые 30 секунд
если нет - выливка фейлится
Google
inqfen
26.12.2018
18:30:30
Это тупо же утилита, которая docker run облегчает
Денис
26.12.2018
18:30:36
inqfen
26.12.2018
18:30:44
Не надо из нее несвойственные задачи трясти
George
26.12.2018
18:30:55
inqfen
26.12.2018
18:31:04
George
26.12.2018
18:31:22
Можно сделать вообще по красоте. Оберни все докеры в системд юниты. И делай любую логику старта
inqfen
26.12.2018
18:31:36
George
26.12.2018
18:31:46
inqfen
26.12.2018
18:31:53
написать плейбук или башскрипт куда проще как по мне
Куда?
на другой сервер например, на 100 других серверов
George
26.12.2018
18:32:10
Докер-компоуз ты в кубер тоже не затащишь
inqfen
26.12.2018
18:32:42
почему в кубер, просто развернуть приложение на 10 инстансах в aws например
просто делаешь скрипт/плейбук, складываешь вместе с кодом и юзаешь как надо
George
26.12.2018
18:33:22
Kool
26.12.2018
18:33:43
а зачем они
есть же сварм
George
26.12.2018
18:34:08
inqfen
26.12.2018
18:34:18
Сварм умер
Google
Kool
26.12.2018
18:34:19
ну лучше чем системд юниты )
George
26.12.2018
18:34:21
Давай так. Отношение к докеру может быть разное
Мы его используем для двух вещей
Быстрая разработка и изоляция сервисов
И микросервисы (кубы, etc)
Первое - абсолютно не противоречит запуску на стендэлоун нодах
Вот представь себе гипотетический случай, что мой докер сервис потребляет файлы из нфс шары
Т.е. она сделана уже системд маунтом и нужно обеспечить старт сервиса только после маунта
Ваши предложения? Мигрировать все в s3?
Kool
26.12.2018
18:36:51
так у докер драйвер есть
для нфс
inqfen
26.12.2018
18:36:59
Не вижу проблем с системд юнитами
Неудобно когда например нужно дать твой код другому разработчику, так в ридми пишешь - стартуешь some.sh
, а с юнитом ему придётся себе ещё и юнит добавлять
George
26.12.2018
18:37:31
Например, эльпайн
inqfen
26.12.2018
18:38:03
У кого-то альпайн на машине стоит?)
George
26.12.2018
18:38:15
Или мы столкнулись, что окружения на mac & linux по-разному фурыкают. В маке очень не хватает xargs -r
inqfen
26.12.2018
18:38:42
не, я про ситуацию с локальной разработкой
В случае CI/CD вся эта логика уходит туда
George
26.12.2018
18:39:04
Я тебе привел пример
Google
George
26.12.2018
18:39:05
Xargs
Скрипты ломаются
inqfen
26.12.2018
18:39:32
Только вот тех же юнитов на маке вроде как вообще нет
Там же наследник фряхи
В общем скрипт для локальной разработки, просто последовательный запуск сервисов через docker-compose
А в случае CI/CD эта фигня не нужна
George
26.12.2018
18:43:45
inqfen
26.12.2018
18:44:10
ага
это точно работает везде
George
26.12.2018
18:44:35
Но нам проще было makefile сделать, чтобы в нем же блоки для сборки контейнеров и запуска тестов описать
inqfen
26.12.2018
18:44:52
даже в powershell работает, если кто вдруг на винде сидит
У нас тесты только в гитлабе
А если кому прямо припрет, то может и локально ручками запустить
LEXASOFT
26.12.2018
21:39:03
вот хороший пример применения миграций с хэлсчеками https://gist.github.com/pantsel/73d949774bd8e917bfd3d9745d71febf
George
26.12.2018
22:45:21
Фактически хелсчеки в нем не используются для зависимости сервисов
Директива links вроде как obsolete
Что ещё покритиковать....