A generic Docker environment for Laravel 12 local development โ updated for the latest PHP, MySQL, Nginx, Node.js, and Redis.
| Service | Image | Version |
|---|---|---|
| PHP-FPM | php:8.4-fpm |
PHP 8.4 |
| Nginx | nginx:1.27-alpine |
1.27 (Alpine) |
| MySQL | mysql:8.4 |
8.4 |
| Node.js | node:22-alpine |
22 LTS |
| Redis | redis:7.4-alpine |
7.4 |
| Composer | composer:2 |
2.x (bundled in PHP image) |
| Service | Host port | Container port |
|---|---|---|
| Nginx | 8999 | 80 |
| MySQL | 3399 | 3306 |
| Redis | 6399 | 6379 |
git clone https://github.com/rakibdevs/laravel-docker.git
cd laravel-dockercp .env.example .envdocker compose builddocker compose up -d# Give write permission to the empty src/ directory
sudo chmod 777 src/
# Create project inside the PHP container
docker compose exec php composer create-project laravel/laravel .Edit src/.env and update these values:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=1234
REDIS_HOST=redis
REDIS_PORT=6379
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redisdocker compose exec php php artisan key:generate
docker compose exec php php artisan storage:link
docker compose exec php chmod -R 777 storage bootstrap/cache
docker compose exec php php artisan migrate# One-time production build
docker compose run --rm node npm run build
# Or watch mode during development
docker compose run --rm node npm run dev# Run Artisan commands
docker compose exec php php artisan <command>
# Run Composer commands
docker compose exec php composer <command>
# Run npm commands
docker compose run --rm node npm <command>
# Access MySQL CLI
docker compose exec mysql mysql -u root -p
# Access Redis CLI
docker compose exec redis redis-cli
# Tail logs
docker compose logs -f
# Stop all containers
docker compose down
# Stop and remove volumes (โ ๏ธ deletes database)
docker compose down -vEdit docker/php/Dockerfile and update the FROM line:
# PHP 8.2 (minimum for Laravel 12)
FROM php:8.2-fpm
# PHP 8.3
FROM php:8.3-fpm
# PHP 8.4 (recommended)
FROM php:8.4-fpmThen rebuild:
docker compose build php
docker compose up -dBuilt from the official php:8.4-fpm image with all extensions required by Laravel 12:
bcmath, ctype, curl, dom, exif, fileinfo, gd, gmp, intl, mbstring, opcache, pcntl, pdo_mysql, pdo_pgsql, redis, tokenizer, xml, zip, and Composer 2.
Configured for Laravel's public directory, PHP-FPM pass-through, static asset caching, gzip, and dotfile protection.
The deprecated --default-authentication-plugin flag has been removed (it was dropped in MySQL 8.4). Includes a healthcheck so PHP waits for the database to be ready before starting.
Node 22 LTS on Alpine with Python/make/g++ for native module builds. Used for Vite asset compilation.
Lightweight Redis instance for cache, session, and queue drivers.
laravel-docker/
โโโ docker/
โ โโโ nginx/
โ โ โโโ nginx.conf # Nginx server block
โ โโโ node/
โ โ โโโ Dockerfile # Node 22 LTS image
โ โโโ php/
โ โ โโโ Dockerfile # PHP 8.4-FPM + extensions
โ โ โโโ php.ini # Custom PHP config
โ โ โโโ www.conf # PHP-FPM pool config
โ โโโ database/ # MySQL data (git-ignored)
โโโ src/ # Laravel application lives here
โโโ .env.example
โโโ .gitignore
โโโ docker-compose.yml
โโโ README.md