Merhaba arkadaşlar, bugün sizlere Laravel’de Docker kullanımı konusunu anlatacağım. Docker, geliştirme ortamınızı hızlı ve tutarlı bir şekilde kurmanızı sağlayan bir konteynerleştirme platformudur. Laravel ile Docker’ı bir araya getirerek, geliştirme sürecinizi optimize edebilir ve farklı ortamlarda uyum sorunlarını ortadan kaldırabilirsiniz. Gelin, bu konuları adım adım inceleyelim.
Docker, uygulamalarınızı konteynerler içinde çalıştırmanızı sağlayan bir platformdur. Konteynerler, uygulamanızın çalışması için gerekli tüm bağımlılıkları içerir ve farklı ortamlarda tutarlı bir şekilde çalışmasını sağlar. Bu sayede, geliştirme, test ve üretim ortamları arasında uyum sorunları yaşamazsınız.
Laravel’de Docker kullanmak için öncelikle bir Dockerfile ve docker-compose.yml dosyası oluşturmanız gerekiyor. Bu dosyalar, uygulamanızın çalışması için gerekli konteynerleri tanımlar.
Dockerfile, uygulamanızın çalışması için gerekli ortamı tanımlar. Örneğin, bir Laravel uygulaması için aşağıdaki gibi bir Dockerfile oluşturabilirsiniz:
# Temel görüntüyü seçin FROM php:8.1-fpm # Gerekli bağımlılıkları yükleyin RUN apt-get update && apt-get install -y \ git \ curl \ libpng-dev \ libonig-dev \ libxml2-dev \ zip \ unzip # PHP eklentilerini yükleyin RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd # Composer'ı yükleyin RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer # Çalışma dizinini ayarlayın WORKDIR /var/www/html # Uygulama dosyalarını kopyalayın COPY . . # Bağımlılıkları yükleyin RUN composer install --optimize-autoloader --no-dev # İzinleri ayarlayın RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache # Uygulamayı çalıştırın CMD ["php-fpm"]
Bu Dockerfile, PHP 8.1 ve gerekli eklentileri içeren bir konteyner oluşturur. Ayrıca, Composer ile bağımlılıkları yükler ve uygulamayı çalıştırır.
docker-compose.yml
dosyası, uygulamanızın çalışması için gerekli tüm servisleri (örneğin, web sunucusu, veritabanı) tanımlar. Örneğin, bir Laravel uygulaması için aşağıdaki gibi bir docker-compose.yml
dosyası oluşturabilirsiniz:
version: '3.8' services: app: build: context: . dockerfile: Dockerfile container_name: laravel_app restart: unless-stopped working_dir: /var/www/html volumes: - .:/var/www/html networks: - laravel_network webserver: image: nginx:alpine container_name: laravel_webserver restart: unless-stopped ports: - "8080:80" volumes: - .:/var/www/html - ./docker/nginx:/etc/nginx/conf.d networks: - laravel_network db: image: mysql:5.7 container_name: laravel_db restart: unless-stopped environment: MYSQL_DATABASE: laravel MYSQL_USER: laravel MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: secret ports: - "3306:3306" volumes: - dbdata:/var/lib/mysql networks: - laravel_network redis: image: redis:alpine container_name: laravel_redis restart: unless-stopped ports: - "6379:6379" networks: - laravel_network volumes: dbdata: driver: local networks: laravel_network: driver: bridge
Bu dosya, dört servis tanımlar:
Dockerfile ve docker-compose.yml
dosyalarını oluşturduktan sonra, uygulamanızı Docker ile çalıştırabilirsiniz. Aşağıdaki komutları kullanarak konteynerleri başlatabilirsiniz:
docker-compose build docker-compose up -d
Bu komutlar, tanımlanan servisleri başlatır ve uygulamanızı http://localhost:8080
adresinde kullanıma hazır hale getirir.
Laravel, Docker kullanımını kolaylaştırmak için Sail adında bir araç sunar. Sail, Laravel uygulamaları için önceden yapılandırılmış bir Docker ortamı sağlar.
Sail Kurulumu:
composer require laravel/sail --dev php artisan sail:install
Bu komutlar, Sail’i projenize ekler ve gerekli Docker dosyalarını oluşturur. Ardından, aşağıdaki komutla uygulamanızı çalıştırabilirsiniz:
./vendor/bin/sail up
Laravel’de Docker kullanımı, geliştirme ortamınızı optimize etmenin en etkili yollarından biridir. Eğer farklı ortamlarda uyum sorunları yaşıyorsanız veya geliştirme sürecinizi hızlandırmak istiyorsanız, Docker’ı mutlaka denemelisiniz. Bir sonraki yazımda, Laravel’de SEO Dostu URL’ler Oluşturma konusuna değineceğim. Görüşmek üzere!