在 Docker 中部署 Laravel 应用,难免会用到 Laravel 本身的任务调度系统 (Schedule),而 Schedule 需要用到 cron,在 Docker 中使用 cron,有以下三种方案:
使用独立的 cron 容器。❎ 如果有多个不同的容器应用需要依赖 cron 时,那么这是一种很完美的解决方案,但是我们只用到 Laravel 的任务调度,因此独立的 cron 容器显得多余,所以不能采用此方案。
直接使用宿主机的 cron。❎ 如果直接使用宿主机的 cron,那么「定时任务」这个功能就不属于容器的一部分了。以后在应用迁移与快速部署时,cron 需要单独配置,这违背了我们使用 Docker 的初衷,我们的初衷是希望用
docker-compose up这一个命令就能快速构建出一个线上应用。并且,在宿主机上使用 cron,使用 Laravel schedule 任务调度时不能和 MySQL 或 Redis 进行通信,所以这个方案需要被否决。在 PHP 容器中设置 cron。✅ 这才是最佳解决方案。Laravel 只需要在 cron 中配置一个
Laravel Task Scheduler,使用此容器中的 PHP 执行文件可以直接执行 Laravel 的任务调度。