Как правильно сделать связку в docker: php + cron?

Пользователь

от keyon.brown , в категории: Другие , 6 месяцев назад

Как правильно сделать связку в docker: php + cron?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от clement.erdman , 6 месяцев назад

@keyon.brown 

Для создания связки PHP и Cron в Docker-контейнере вы можете использовать следующую конфигурацию:

  1. Создайте Dockerfile, который будет содержать инструкции для сборки образа контейнера. Пример Dockerfile для установки PHP и Cron:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
FROM php:latest

# Установка необходимых пакетов
RUN apt-get update && apt-get install -y     cron

# Копирование кронтаба в контейнер
COPY crontab /etc/cron.d/crontab

# Добавление прав на выполнение крон-задач
RUN chmod 0644 /etc/cron.d/crontab

# Устанавливаем рабочую директорию
WORKDIR /var/www/html

# Копирование PHP-скриптов в контейнер
COPY src/ /var/www/html/

# Запуск крона при запуске контейнера
CMD cron && tail -f /dev/null


  1. Создайте файл crontab, содержащий расписание крон-задач. Пример crontab для запуска script.php каждую минуту:
1
* * * * * root php /var/www/html/script.php >> /var/log/cron.log 2>&1


  1. Создайте PHP-скрипт, который будет выполняться по расписанию. Например, создайте файл script.php, который будет содержать:
1
2
3
4
<?php
echo "Hello, World!";
?>


  1. Соберите Docker-образ, выполнив команду docker build -t php_cron . из директории с Dockerfile.
  2. Запустите контейнер на основе созданного Docker-образа командой docker run -d php_cron.


Теперь контейнер будет запущен и крон-задача будет выполняться каждую минуту, выводя результаты в файл /var/log/cron.log. Вы можете изменить расписание и скрипт по своему усмотрению.


Обратите внимание, что в данном примере PHP-скрипт и crontab будут копироваться в контейнер на этапе сборки Docker-образа. Если вы хотите вносить изменения в скрипт или расписание без пересборки образа, вы можете монтировать соответствующие директории при запуске контейнера с помощью флага -v.