Project Structure
project/
├── docker/
│ ├── nginx/
│ │ └── default.conf
│ └── php/
│ └── Dockerfile
├── docker-compose.yml
├── .env
└── ...
PHP Dockerfile
# docker/php/Dockerfile
FROM php:8.3-fpm
RUN apt-get update && apt-get install -y \
git curl libpng-dev libonig-dev libxml2-dev zip unzip
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
RUN pecl install redis && docker-php-ext-enable redis
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
USER www-data
Nginx Config
# docker/nginx/default.conf
server {
listen 80;
root /var/www/html/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Docker Compose
# docker-compose.yml
version: '3.8'
services:
app:
build: ./docker/php
volumes:
- .:/var/www/html
networks:
- laravel
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
networks:
- laravel
mysql:
image: mysql:8.0
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: secret
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- laravel
redis:
image: redis:alpine
ports:
- "6379:6379"
networks:
- laravel
networks:
laravel:
volumes:
mysql_data:
Running Commands
# Start containers
docker-compose up -d
# Install dependencies
docker-compose exec app composer install
# Run migrations
docker-compose exec app php artisan migrate
# Run artisan commands
docker-compose exec app php artisan tinker
Comments (0)
Leave a Comment
No comments yet. Be the first to share your thoughts!