Определение crontab из Dockerfile с использованием crontab хоста для запуска контейнерной программы Go каждый час - PullRequest
1 голос
/ 07 июня 2019

У меня есть довольно простая программа Go, которая запрашивает в базе данных строки с некоторой несогласованностью в соответствии с бизнес-правилом, а затем обновляет строки в соответствии с бизнес-правилом.Это все нормально, я могу запустить программу как бинарный файл, и он просто работает.Тем не менее, я также должен контейнировать эту программу с Docker и запускать ее каждый час.

В чем я не уверен, так это в том, что программа запускается раз в час.То, что я хотел бы сделать, это использовать crontab, но я не знаю, как заставить Docker взаимодействовать с ним (я все еще новичок в Docker, и да, я прочитал вводные документы, это только первый раз, когда я получаюруки грязные).

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

Так что возможно ли контейнеризовать мою простую программу и определить crontabкак-то внутри Dockerfile, используя crontab хост-системы?Если нет, каков правильный подход к этой проблеме?

1 Ответ

1 голос
/ 07 июня 2019

Определение crontab в Dockerfile или выполнение его в приложении Go означает, что вы должны постоянно запускать свой сервис, поэтому он будет тратить ЦП / память, ничего не делая.

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

  • Если вы используете Kubernetes - создайте задание Kubernetes, которое будет запускать ваш контейнер на определенной частоте.
  • Использованиестандартный crontab и определите команду как docker run ...
  • Используйте функции AWS Lambda / Google Cloud и триггерные функции, используя указанный интервал
  • другие параметры.
...