Laravel Task Scheduler with Docker
Running a Laravel task scheduler with Docker can be a little different from the traditional methods.
Important concepts
- We will not use 
cronto run the scheduler - By default 
schedule:workchecks every minute, so we will use that to run the system process - The actual time trigger itself is set within Laravel
 - You can do cool things with 
PHP_FPM_POOL_NAMEto separate the task from the main PHP pool. This is helpful when debugging or monitoring the task. 
More detail
We need to run the schedule:work command from Laravel. Although the docs say "Running the scheduler locally", this is what we want in production. It will run the scheduler in the foreground and execute it every minute. You can configure your Laravel app for the exact time that a command should run through a scheduled task.
Examples
Here is a simplified example of how you can achieve this with Docker Compose:
Example & Simplified Docker Compose File
services:
  php:
    image: my/laravel-app
    environment:
      PHP_FPM_POOL_NAME: "my-app_php"
  task:
    image: my/laravel-app
    command: ["php", "/var/www/html/artisan", "schedule:work"]
    environment:
      PHP_FPM_POOL_NAME: "my-app_task"
This is an example how we would set the actual execution time within Laravel itself:
Example Laravel `Kernel.php`
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
    ];
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('process:invoices')->daily()->at('02:00')->timezone('America/Chicago');
        $schedule->command('process:latefees')->daily()->at('04:00')->timezone('America/Chicago');
    }
    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');
        require base_path('routes/console.php');
    }
}