Real World Docker Project
In this final lesson by Online Learner, you will build and deploy a complete Laravel application using Docker with Nginx, PHP-FPM, and MySQL. This project simulates a real-world production-like setup.
Project Overview
- Laravel application (PHP)
- Nginx web server
- MySQL database
- Docker Compose for orchestration
Project Structure
docker-laravel/
├── docker/
│ └── nginx/
│ └── default.conf
├── Dockerfile
├── docker-compose.yml
├── .env
└── Laravel project files
Step 1: Dockerfile
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y
git curl zip unzip libpng-dev libonig-dev libxml2-dev
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
COPY . .
RUN composer install --no-dev --optimize-autoloader
RUN chown -R www-data:www-data /var/www/html
EXPOSE 9000
CMD ["php-fpm"]
Step 2: Nginx Configuration
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass app:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Step 3: docker-compose.yml
version: "3.9"
services:
app:
build: .
container_name: laravel-app
volumes:
- .:/var/www/html
networks:
- app-network
nginx:
image: nginx:latest
container_name: laravel-nginx
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
networks:
- app-network
mysql:
image: mysql:8.0
container_name: laravel-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: laravel_db
MYSQL_USER: laravel
MYSQL_PASSWORD: laravel123
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
volumes:
mysql-data:
Step 4: Configure Laravel .env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel
DB_PASSWORD=laravel123
Step 5: Run the Project
# Start containers
docker compose up -d
# Run migrations
docker compose exec app php artisan migrate
# Generate app key
docker compose exec app php artisan key:generate
Open your browser:
http://localhost:8080
Common Commands
# Stop containers
docker compose down
# View logs
docker compose logs -f
# Access app container
docker compose exec app bash
Real World Tips
- Use Docker volumes for persistent database storage.
- Use .env files for configuration management.
- Use Nginx as reverse proxy for performance.
- Use multi-stage builds for optimized images.
Summary
- You built a complete Laravel app using Docker.
- Used Docker Compose to manage multiple services.
- Connected Nginx, PHP, and MySQL containers.
- This setup is similar to real-world production environments.
0
likes
Your Feedback
Help us improve by sharing your thoughts
Online Learner helps developers master programming, database concepts, interview preparation, and real-world implementation through structured learning paths.
Quick Links
© 2023 - 2026 OnlineLearner.in | All Rights Reserved.
