Skillversitas

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

  1. Use alpine: For a smaller image
  2. Multi-stage build: For production
  3. Non-root user: For security
  4. Health check: For monitoring

Conclusion

Laravel in Docker is easy to set up. Use docker-compose to manage Nginx, PHP-FPM, and MySQL.