Production-ready Dockerfiles for Laravel Octane powered web services and microservices.
The Docker configuration provides the following setup:
- PHP 8.2 and 8.3 official Debian-based and Alpine-based images
- Preconfigured JIT compiler and OPcache
You can run the Docker container in different modes:
Mode | CONTAINER_MODE |
HTTP server |
---|---|---|
HTTP Server (default) | http |
FrankenPHP / Swoole / RoadRunner |
Horizon | horizon |
- |
Scheduler | scheduler |
- |
Worker | worker |
- |
- Clone this repository:
git clone --depth 1 git@github.com:exaco/laravel-octane-dockerfile.git
- Copy cloned directory content including
deployment
directory,Dockerfile
, and.dockerignore
into your Octane powered Laravel project - Change the directory to your Laravel project
- Build your image:
docker build -t <image-name>:<tag> -f <your-octane-driver>.Dockerfile .
# HTTP mode
docker run -p <port>:8000 --rm <image-name>:<tag>
# Horizon mode
docker run -e CONTAINER_MODE=horizon --rm <image-name>:<tag>
# Scheduler mode
docker run -e CONTAINER_MODE=scheduler --rm <image-name>:<tag>
# HTTP mode with Horizon
docker run -e WITH_HORIZON=true -p <port>:8000 --rm <image-name>:<tag>
# HTTP mode with Scheduler
docker run -e WITH_SCHEDULER=true -p <port>:8000 --rm <image-name>:<tag>
# HTTP mode with Scheduler and Horizon
docker run -e WITH_SCHEDULER=true -e WITH_HORIZON=true -p <port>:8000 --rm <image-name>:<tag>
# Worker mode
docker run -e CONTAINER_MODE=worker -e WORKER_COMMAND="php /var/www/html/artisan foo:bar" --rm <image-name>:<tag>
# Running a single command
docker run --rm <image-name>:<tag> php artisan about
// config/octane.php
return [
'swoole' => [
'options' => [
'http_compression' => true,
'http_compression_level' => 6, // 1 - 9
'compression_min_length' => 20,
'package_max_length' => 20 * 1024 * 1024, // 20MB
'open_http2_protocol' => true,
'document_root' => public_path(),
'enable_static_handler' => true,
]
]
];
Also, some useful Bash functions and aliases are added in utilities.sh
that maybe help.
- Laravel Octane logs request information only in the
local
environment. - Please be aware of
.dockerignore
content
- Add support for PHP 8.3
- Add support for worker mode
- Build assets with Bun
- Create standalone and self-executable app
- Add support for Horizon
- Add support for RoadRunner
- Add support for FrankenPHP
- Add support for Laravel Reverb
- Add support for the full-stack apps (Front-end assets)
- Add support
testing
environment and CI - Add support for the Laravel scheduler
- Add support for Laravel Dusk
- Support more PHP extensions
- Add tests
- Add Alpine-based images
Thank you for considering contributing! If you find an issue, or have a better way to do something, feel free to open an issue, or a PR.
This repository is open-sourced software licensed under the MIT license.