Quick Reference
Quick Reference
Copy-paste ready snippets. No configuration needed.
Minimal Setup
# docker-compose.yml
services:
app:
image: ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.3-bookworm
ports:
- "8000:80"
volumes:
- .:/var/www/html
docker compose up
# Open http://localhost:8000
Laravel
services:
app:
image: ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.3-bookworm
ports:
- "8000:80"
volumes:
- .:/var/www/html
environment:
- LARAVEL_SCHEDULER=true
depends_on:
- mysql
- redis
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: secret
volumes:
- mysql-data:/var/lib/mysql
redis:
image: redis:7-alpine
volumes:
mysql-data:
.env essentials:
DB_HOST=mysql
REDIS_HOST=redis
REDIS_CLIENT=phpredis
Symfony
services:
app:
image: ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.3-bookworm
ports:
- "8000:80"
volumes:
- .:/var/www/html
environment:
- APP_ENV=dev
depends_on:
- postgres
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: symfony
POSTGRES_USER: symfony
POSTGRES_PASSWORD: secret
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
WordPress
services:
wordpress:
image: ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.3-bookworm
ports:
- "8000:80"
volumes:
- ./wordpress:/var/www/html
depends_on:
- mysql
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
Common Environment Variables
PHP Settings
environment:
- PHP_MEMORY_LIMIT=512M
- PHP_MAX_EXECUTION_TIME=300
- PHP_UPLOAD_MAX_FILESIZE=100M
- PHP_POST_MAX_SIZE=100M
Laravel Features
environment:
- LARAVEL_SCHEDULER=true # Enable cron
- LARAVEL_QUEUE=true # Enable queue worker
- LARAVEL_HORIZON=true # Enable Horizon
- LARAVEL_REVERB=true # Enable WebSockets
Development (Xdebug)
environment:
- XDEBUG_MODE=debug,develop,coverage
- XDEBUG_CONFIG=client_host=host.docker.internal
- PHP_IDE_CONFIG=serverName=docker
Production
environment:
- PHP_OPCACHE_VALIDATE_TIMESTAMPS=0
- PHP_OPCACHE_MAX_ACCELERATED_FILES=20000
Quick Commands
# Start
docker compose up -d
# Logs
docker compose logs -f
# Shell
docker compose exec app sh
# PHP version
docker compose exec app php -v
# Extensions
docker compose exec app php -m
# Health check
curl localhost:8000/health
# Stop
docker compose down
Laravel Commands
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate
docker compose exec app php artisan cache:clear
docker compose exec app php artisan config:cache
docker compose exec app php artisan test
Available Images
# Standard tier (DEFAULT)
ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.4-bookworm
ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.3-bookworm
ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.2-bookworm
# Slim tier (APIs, microservices)
ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.4-bookworm-slim
# Full tier (Browsershot, Dusk)
ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.4-bookworm-full
# Development (with Xdebug)
ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.3-bookworm-dev
Included Extensions
All images include 40+ extensions:
bcmath, calendar, ctype, curl, dom, exif, fileinfo, gd, gettext,
iconv, imagick, intl, mbstring, mongodb, mysqli, opcache, pcntl,
pdo_mysql, pdo_pgsql, pgsql, redis, simplexml, soap, sockets,
sodium, tokenizer, xml, xmlreader, xmlwriter, xsl, zip
Verify: docker compose exec app php -m
Add Custom Extension
FROM ghcr.io/cboxdk/php-baseimages/php-fpm-nginx:8.3-bookworm
RUN apt-get update && apt-get install -y --no-install-recommends $PHPIZE_DEPS \
&& pecl install swoole \
&& docker-php-ext-enable swoole \
&& apt-get purge -y $PHPIZE_DEPS \
&& rm -rf /var/lib/apt/lists/*
See Extending Images for more.