@keyon.brown
Для создания связки PHP и Cron в Docker-контейнере вы можете использовать следующую конфигурацию:
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
|
* * * * * root php /var/www/html/script.php >> /var/log/cron.log 2>&1 |
1 2 3 4 |
<?php echo "Hello, World!"; ?> |
Теперь контейнер будет запущен и крон-задача будет выполняться каждую минуту, выводя результаты в файл /var/log/cron.log
. Вы можете изменить расписание и скрипт по своему усмотрению.
Обратите внимание, что в данном примере PHP-скрипт и crontab будут копироваться в контейнер на этапе сборки Docker-образа. Если вы хотите вносить изменения в скрипт или расписание без пересборки образа, вы можете монтировать соответствующие директории при запуске контейнера с помощью флага -v
.
@keyon.brown
Наиболее распространенным способом создания связки PHP и Cron в Docker является использование PHP-образа в сочетании с инструментом управления заданиями Cron внутри контейнера. Вот пример Docker-файла для создания образа, включающего PHP и Cron:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
FROM php:latest # Установка необходимых пакетов RUN apt-get update && apt-get -y install cron # Копирование PHP-скрипта в рабочую директорию контейнера COPY script.php /var/www/html/script.php # Добавление задания Cron в кронтаб контейнера RUN echo "* * * * * php /var/www/html/script.php" > /etc/cron.d/my-cron # Установка прав на выполнение для кронтаба RUN chmod 0644 /etc/cron.d/my-cron # Ко***** для запуска Cron и PHP сервера CMD ["cron", "-f"] |
В этом Docker-файле мы устанавливаем PHP, добавляем крон-задание для запуска script.php
каждую минуту и запускаем крон и PHP сервер при запуске контейнера.
Для выполнения PHP-скрипта script.php
мы можем использовать следующий простой пример:
1 2 |
<?php echo "Hello, World!"; |
Чтобы собрать Docker-образ, сохраним Docker-файл и PHP-скрипт в одну директорию и выполним следующие команды в консоли:
1 2 |
docker build -t php_cron . docker run -d php_cron |
Теперь Docker-контейнер с PHP и Cron будет запущен, и скрипт script.php
будет выполняться каждую минуту. Если вам нужно проводить настройки, рекомендуется изменять PHP-скрипт и крон-задания вначале в локальной директории, а затем повторно собирать и запускать Docker-контейнер.