مقاله

نصب Docker، Dockerfile برای PHP 8.3، volume و شبکه — محیط dev یکسان برای تیم.

Docker برای Laravel — از صفر تا اجرای پروژه در container

Docker برای Laravel — از صفر تا اجرای پروژه در container

«روی سیستم من کار می‌کرد» با Docker کمتر تکرار می‌شود — همان PHP، extension و نسخه برای همه. برای Laravel developer، Docker ابتدا محیط dev است؛ production با Compose یا orchestrator جدا بحث دارد.

نصب Docker

Windows: Docker Desktop + WSL2. Linux: docker.io یا Docker CE. بعد از نصب:

docker --version
docker run hello-world

Dockerfile پایه Laravel

FROM php:8.3-cli

RUN apt-get update && apt-get install -y \
    git unzip libzip-dev libpng-dev \
    && docker-php-ext-install pdo_mysql zip gd

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www

COPY . .
RUN composer install --no-dev --optimize-autoloader

CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]

برای dev معمولاً php:8.3-fpm + Nginx جدا — Nginx.

build و run

docker build -t my-laravel .
docker run -p 8000:8000 -v ${PWD}:/var/www my-laravel

-v mount کد — تغییر local بدون rebuild.

اجرای artisan در container

docker run --rm -v ${PWD}:/var/www -w /var/www my-laravel php artisan migrate

.dockerignore

node_modules
vendor
.git
.env
storage/logs/*
bootstrap/cache/*

build سریع‌تر — vendor در image یا mount جدا.

Laravel Sail

راه رسمی Laravel — Docker Compose از پیش تنظیم. اگر از صفر یاد می‌گیرید Dockerfile دستی درک عمیق‌تر می‌دهد؛ Sail سرعت روزمره.

تفاوت image و container

  • Image — template immutable
  • Container — instance در حال اجرا

اشتباهات

  • ذخیره .env در image
  • root بدون دلیل در production
  • vendor حجیم در layer بدون cache

جمع‌بندی

گام بعد: Docker Compose با MySQL و Redis. Deploy: Ubuntu.

Dockerize پروژه