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

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

от keyon.brown , в категории: Другие , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от clement.erdman , год назад

@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.

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

от jamey.kohler , 6 месяцев назад

@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-контейнер.