Должен ли я отделить cron в свой собственный контейнер Docker? - PullRequest
0 голосов
/ 30 октября 2019

Предположим, у меня есть Docker-контейнер с Nginx или PostgresQL. Мне нужен Cron для удаления старых файлов журнала. Где мне запускать cron? В том же контейнере внутри сценария входа? В своем контейнере? Внешний докер?

Запуск вне Docker нарушит контроль Докера над конфигурациями. Мне придется использовать другую систему управления конфигурацией, чтобы закрепить ее конфигурацию.

1 Ответ

3 голосов
/ 30 октября 2019

Я думаю, вам может понадобиться переосмыслить, зачем вам на самом деле нужна работа cron. Почему у вас есть старые файлы журнала внутри вашего контейнера? Один из лучших способов построения приложений внутри контейнеров - это регистрация всего в направлении stdout / stderr. Таким образом, вы сохраняете парадигму процесса «1 контейнер = 1», а управление журналами является обязанностью докера и / или вашего хоста.

Вы можете сделать это довольно просто:

  • реконфигурирование вашего приложения для входа в / dev / stdout
  • связывание файла журнала вашего приложения /var/log/nginx/access.log с / dev / stdout в вашем файле Docker
ln -sf /dev/stdout /var/log/nginx/access.log
ln -sf /dev/stderr /var/log/nginx/error.log

Если вам действительно нужно войти в какое-либо место внутри вашего контейнера, хорошей практикой может быть вход в общий раздел. Затем запустите задание cron, которое раскручивает контейнер, который также монтирует этот том и очищает журналы. Вы можете запланировать этот контейнер очистки с помощью задания cron.

Если вы используете какой-нибудь оркестратор, такой как Kubernetes, это будет сделано с модулем Scheduled, который делает именно это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...