докер

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну, годик назад смотрели, да. Смотрели на сварм, но он кажется очень «ручным» : впишите в конфиги порты, диапазоны, имена, если хотите поскейлить — ну поправьте конфиги, если хотите чтоб автоскейлинг с машиной был, ну, вот мы тут вот так конфиги копируем, и вот это вот все... с кубернетсом на тот момент рядом даже не стояло.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я чего-то не понимаю, какие проблемы вписать имена в конфиг?
порты прописывать нужно только для доступа снаружи, для web-сервисов их два,
изменение числа инстансов сервиса сводится к редактированию строки replicas: 1

один конфиг на стек с описанием всех сервисов, инстансов, политик, разделяемых папок, сетей и конфигов, стандартный unix way, аналогично в ансимбле, вагранте и где там еще

а как ты хочешь скейлить без правки конфига?
 
Последнее редактирование:

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну 21 век на дворе, автоскейлинг, он-деманд инстансы, скейлинг лямбдами, зиро-даунтайм, вот это все. А тут руками в конфиге репликам цифирку менять, ну.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Собрал образы для 7.4
docker pull grigori/phpextensions:7.4-fpm - стандартная сборка fpm+cli с расширениями
docker pull grigori/phpextensions:7.4-fpm-imagemagic - включает image magic , надо бы просто включить его в общий образ
docker pull grigori/phpextensions:7.4-events - для ReactPHP, AMPHP, Swoole и демонов, ZTS
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
обновил образы до 7.4.2 / 7.3.14 / 7.2.27
официальных образах обновили Alpine до 3.11, а там убрали пару проблемных либ (jpeg-2000), обновил docker-файлы

еще у меня есть свободное время сейчас, и я начал проект репозитория типовых конфигураций приложений в докере
например: набор конфигов для nginx, php-fpm, symfony, mysql, когда логи пишутся в докер, и через наследование yaml идет переопределение конфигов для dev и прода в compose/stack: TLS для nginx в проде, healthcheck, публикация портов, движок логов, десятки их ...
ну и статьи с описанием что сделано

хотите помочь - показать ваши конфиги без business logic? можем попробовать решить общие проблемы "разработки в windows"
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
а cli на apine с imagick или gd и cron нету?
cli в образе с fpm, gd там есть, просто бери образ fpm и запускай php вместо php-fpm
мм ... да, это надо документировать, спасибо

cron и не может там быть, кронов в докере не должно быть, для каждой задачи нужен отдельный сервис,
главная проблема в проде с кроном - логи, в контейнере они идут в stdout, а если запускать их под кроном - вывод пропадает, для прода это недопустимо
а если делать логи в shared volume - stateful-фигня выходит

полноценное решение - переписать каждую задачу в отдельный демон,
костыль - запускать кроном из операциоки, или запускать как докер в докере, но как собирать логи вопрос остается открытым
 

Redjik

Падаван
главная проблема в проде с кроном - логи, в контейнере они идут в stdout, а если запускать их под кроном - вывод пропадает, для прода это недопустимо
а если делать логи в shared volume - stateful-фигня выходит
на самом деле есть еще 2 проблемы, не менее важные
- крон запускается только под рутом, получаем рутовый контейнер
- в кроне тяжело проксировать SIGTERM дочкам, что мешает деплою


полноценное решение - переписать каждую задачу в отдельный демон,
это для частых задач, аля каждую минуту
в сварме есть https://github.com/crazy-max/swarm-cronjob
в кубере есть шедулер искаропки

на локалке сварим запускать не очень удобно, но с другой стороны таску на локалке можно и ручками запустить, редко когда в разработке на локалке тебе прям именно крон нужен

UPD. как автозамену отрубить в сафари на маке... пзц =))

UPD2.
да, забыл отметить, почему демон не всегда решит задачу, бывают таски, которые выполняются в определенное время, например отправка смсок в 12 утра всем юзерам, у кого др
если у тебя в это время деплой будет, то таска не отработает
решение в кубере и в сварме (см выше) эту проблему решают
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
- крон запускается только под рутом, получаем рутовый контейнер
это как-бы не проблема, крон можно запускать от кого угодно, можно и мапинг юзеров прописать

- в кроне тяжело проксировать SIGTERM дочкам, что мешает деплою
А вот это проблема с тем, что cron по свой природе stateful - как узнать какой процесс нам нужен в каком из контейнеров?

Есть еще проблема обеспечить атомарность исполнения задачи в размазанном окружении. Прибивать к конкретной машине плохо - SPOF.

это для частых задач, аля каждую минуту
в сварме есть https://github.com/crazy-max/swarm-cronjob
в кубере есть шедулер искаропки
@Yoskaldyr можем написать конфиг под swarm-cronjob для xenforo

на локалке сварим запускать не очень удобно,
в чем сложность? docker stack up -c ..., и все, через alias в bash сводится к одной команде
написать статью с примерами? :)

но с другой стороны таску на локалке можно и ручками запустить, редко когда в разработке на локалке тебе прям именно крон нужен
а откуда она возьмет конфиг для доступа к базе?

>UPD. как автозамену отрубить в сафари на маке... пзц =))
Firefox

да, забыл отметить, почему демон не всегда решит задачу, бывают таски, которые выполняются в определенное время, например отправка смсок в 12 утра всем юзерам, у кого др
если у тебя в это время деплой будет, то таска не отработает
решение в кубере и в сварме (см выше) эту проблему решают
Почему демон это не решит? в 12 часов он запустит приложение, подождет пока приложение отработает, и вызовет GC.
Weak refereces решают проблему с циклическими ссылками, в 8ку добавляют weak map для удобства.

покажешь конфиги? у тебя какие фреймвоки?
 

Redjik

Падаван
а откуда она возьмет конфиг для доступа к базе?
из енв переменных
docker-compose up -d myTask

я имел ввиду, что крон а локалке не часто нужен, все равно запускать скорее всего руками команду/таску будешь


Почему демон это не решит? в 12 часов он запустит приложение, подождет пока приложение отработает, и вызовет GC.
в 11:55 деплой убил демона
в 12:05 поднял
таска в 12:00 не отрабаотала
запускать scheduled таски в параллели (аля zero downtime деплой, только без php-fpm) так себе себе затея ,ибо race condition

Есть еще проблема обеспечить атомарность исполнения задачи в размазанном окружении. Прибивать к конкретной машине плохо - SPOF.
mode: replicated
replicas: 1


покажешь конфиги? у тебя какие фреймвоки?
Симфони, какие конфиги скинуть? (Хелм чарты не смогу, а для сварма docker-compose могу причесать)
nginx как ingress-controller немного уныл из-за discovery, treafik поинтересенее имхо, хотя у нас на nginx
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@AnrDaemon это отсылка на недавний топик - в основном вопросы кешей, composer и версий, относится ко всем виртуалкам

это плохой вариант, закончится тем, что каждому придется собирать образ на своей тачке, не сможешь взять образ собранный на тестинге или проде
это да, теряется смысл

из енв переменных
docker-compose up -d myTask

я имел ввиду, что крон а локалке не часто нужен, все равно запускать скорее всего руками команду/таску будешь
да, я подумал, ты сам скрипт запускаешь в локальном php
но docker-compose up -d myTask - это как-раз каждая задача в своем сервисе расписана

в 11:55 деплой убил демона
в 12:05 поднял
таска в 12:00 не отрабаотала
spof - это другая задача, не надо убивать демона
аналогично, если в 11:59 ребутнуть сервер - никакой крон в 1200 не отработает

запускать scheduled таски в параллели (аля zero downtime деплой, только без php-fpm) так себе себе затея ,ибо race condition
mode: replicated
replicas: 1
тут есть определенные проблемы
когда процесс оторвался от консоли, докер считает, что контейнер умер, но контейнер никуда не девается, а если процесс становится демоном - докер запустит второй,
или, например, если оставил дефолтный restart_policy window для mysql, когда база не успевает загрузиться в заданное время - вполне можно наблюдать пару mysql-контейнеров для replicas: 1

Симфони, какие конфиги скинуть? (Хелм чарты не смогу, а для сварма docker-compose могу причесать)
nginx как ingress-controller немного уныл из-за discovery, treafik поинтересенее имхо, хотя у нас на nginx
да, список сервисов, volumes, симфони, отличия между compose и продом
nginx всегда очень кастомный, но шаблон для него у меня вырисовывается по нескольким проектам, а с treafik я не работал
 
Сверху