Каков наилучший подход для добавления заданий cron (запланированных заданий) для определенного сервиса в docker-compose - PullRequest
0 голосов
/ 29 ноября 2018

Я использую docker-compose.У меня есть веб-сервис и рабочая служба.

version: '3'
services:
  web:
    build: .
    environment:
      - "*"
    links:
      - redis
      - memcached
    ports:
      - "80:8001"
      - "443:8001"

  worker:
    build: .
    command: ["/bin/bash", "/home/django/start_celery.sh"]
    environment:
      - "*"
    links:
      - redis
      - memcached

  memcached:
    image: memcached
    ports:
      - "11211:11211"

  redis:
    image: redis
    ports:
      - "6379:6379"

Мне нужно запускать кроны (запланированные задачи) для рабочей службы.

И я не хочу жестко кодировать crontab в Dockerfile, как я 'Я использую один и тот же dockerfile для обеих служб.

Так что же лучше для этого подходит?

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Вы можете попробовать следующий инструмент Opensource для планирования крон в docker-compose.

https://github.com/mcuadros/ofelia

например:

 [job-service-run "service-executed-on-new-container"]
 schedule = 0,20,40 * * * *
 image = ubuntu
 network = swarm_network
 command =  touch /tmp/example

Если вы планируетеиспользовать изображение на любой из облачных платформ.

Например,

AWS: Вы также можете взглянуть на планировщик ECS

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html

GCP: Kubernetes Engine CronScheduler

https://cloud.google.com/kubernetes-engine/docs/how-to/cronjobs

0 голосов
/ 28 декабря 2018

Docker должен запускать отдельный процесс для каждого контейнера , поэтому обычный подход, когда вам нужны задачи, похожие на cron, состоит в том, чтобы запускать cron на хост-машине (или как управляемый сервис, такой как @Omkar Kulkani points).), а затем этот «снаружи» запускает контейнер с нужной вам командой.

что-то вроде

0,20,40 * * * * docker exec [имя контейнера] [ваша команда здесь]

0 голосов
/ 29 ноября 2018

Если вы хотите запустить запланированное задание, вы можете использовать ритм сельдерея: http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#starting-the-scheduler.

Вы можете определить, когда каждое задание должно выполняться в стиле cron.

Решение о том, где запускать каждое из них.задание (на котором работник) выполняется маршрутизатором сельдерея: http://docs.celeryproject.org/en/latest/userguide/routing.html

...