Docker Laravel
How to run a Laravel application in Docker.
Laravel Dockerfile
FROM php:8.2-fpm-alpine
# Install dependencies
RUN apk add --no-cache \
git \
unzip \
libzip-dev \
&& docker-php-ext-install zip pdo pdo_mysql
# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
COPY . .
RUN composer install --no-dev --optimize-autoloader
EXPOSE 9000
CMD ["php-fpm"]
docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- .:/var/www/html
depends_on:
- php
networks:
- app-net
php:
build: .
volumes:
- .:/var/www/html
environment:
- DB_CONNECTION=mysql
- DB_HOST=database
- DB_PORT=3306
- DB_DATABASE=laravel
- DB_USERNAME=root
- DB_PASSWORD=secret
networks:
- app-net
database:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: laravel
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-net
networks:
app-net:
volumes:
mysql-data:
Use Case: Laravel Application
# Run Laravel
docker-compose up -d
# Install dependencies
docker-compose exec php composer install
# Run migrations
docker-compose exec php php artisan migrate
# Seed the database
docker-compose exec php php artisan db:seed
Everyday Use Case
Case: A developer needs to run Laravel.
# Build
docker-compose build
# Run
docker-compose up -d
# Artisan commands
docker-compose exec php php artisan migrate
docker-compose exec php php artisan make:model Student
Best Practices
- Use alpine: For a smaller image
- Multi-stage build: For production
- Non-root user: For security
- Health check: For monitoring
Conclusion
Laravel in Docker is easy to set up. Use docker-compose to manage Nginx, PHP-FPM, and MySQL.