sunucuhataları
teknik çözüm merkezi
Ara Giriş Yap Üye Ol
🏠 Ana Sayfa 📚 Kurulum Rehberleri
Kategoriler
🌐 Web Sunucuları 🐧 İşletim Sistemleri 📦 Sanallaştırma & VPS 🖥️ Kontrol Panelleri 🔒 SSL & Güvenlik 📝 CMS & Uygulamalar 🗄️ Veritabanı 📧 Mail Sunucusu 🗨️ Forum ℹ️ Hakkımızda 📧 İletişim
Giriş Yap Üye Ol
Ana Sayfa Sanallaştırma & VPS Docker Kurulumu Docker Compose ile LAMP Yığını: Geliştirme Ortamı
🐳 Docker Kurulumu

Docker Compose ile LAMP Yığını: Geliştirme Ortamı

Docker Compose ile LAMP geliştirme ortamı: Apache, MySQL 8.0, PHP ve phpMyAdmin container yapılandırması.

📅 30 Mart 2025 👁 43 görüntülenme ⏱ 3 dk okuma
𝕏 Paylaş
📋 İçindekiler göster/gizle

Docker Compose ile LAMP Nedir?

LAMP yığını (Linux, Apache, MySQL, PHP), web uygulama geliştirme için klasik bir kombinasyondur. Docker Compose ile bu yığını konteynerize ederek izole, taşınabilir ve kolayca paylaşılabilir bir geliştirme ortamı oluşturabilirsiniz. "Bende çalışıyor ama sunucuda çalışmıyor" sorununu ortadan kaldıran bu yaklaşım, ekip çalışması ve CI/CD süreçleri için de idealdir.

Neden Docker Compose?

  • Tüm ortam tek komutla (docker compose up) başlatılır
  • Her geliştirici aynı ortamı kullanır
  • Farklı projeler için farklı PHP/MySQL sürümleri çakışmaz
  • Üretim ortamını yerel makinede taklit edebilirsiniz
  • docker compose down ile her şey temizlenir

Docker ve Docker Compose Kurulumu

🟠 Ubuntu/Debian

curl -fsSL https://get.docker.com | bash
systemctl enable --now docker

# Kullanıcıyı docker grubuna ekle (sudo olmadan kullanmak için)
usermod -aG docker $USER
newgrp docker

# Docker Compose (V2 - artık plugin olarak geliyor)
docker compose version

🔵 AlmaLinux/CentOS

dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable --now docker

Proje Yapısı

lamp-project/
├── docker-compose.yml
├── .env
├── config/
│   └── php.ini
├── src/
│   └── index.php        # Uygulama kodları
└── mysql/
    └── init.sql         # Başlangıç veritabanı (opsiyonel)

docker-compose.yml

version: "3.9"

services:
  web:
    image: php:8.3-apache
    container_name: lamp_web
    ports:
      - "${APP_PORT:-8080}:80"
    volumes:
      - ./src:/var/www/html
      - ./config/php.ini:/usr/local/etc/php/php.ini
    depends_on:
      db:
        condition: service_healthy
    environment:
      - APACHE_DOCUMENT_ROOT=/var/www/html
    networks:
      - lamp_network

  db:
    image: mysql:8.0
    container_name: lamp_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql
      - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - "3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - lamp_network

  phpmyadmin:
    image: phpmyadmin:latest
    container_name: lamp_pma
    ports:
      - "8081:80"
    environment:
      PMA_HOST: db
      PMA_USER: ${DB_USER}
      PMA_PASSWORD: ${DB_PASSWORD}
    depends_on:
      - db
    networks:
      - lamp_network

volumes:
  db_data:
    driver: local

networks:
  lamp_network:
    driver: bridge

.env Dosyası

APP_PORT=8080
DB_NAME=myapp
DB_USER=appuser
DB_PASSWORD=AppSifre123!
DB_ROOT_PASSWORD=RootSifre123!

config/php.ini

[PHP]
memory_limit        = 256M
upload_max_filesize = 64M
post_max_size       = 64M
max_execution_time  = 300
display_errors      = On
error_reporting     = E_ALL

PHP Uzantıları Ekleme

Resmi PHP Docker imajında bazı uzantılar eksik olabilir. Dockerfile ile özelleştirin:

# Dockerfile
FROM php:8.3-apache

RUN docker-php-ext-install pdo pdo_mysql mysqli gd zip

RUN pecl install redis && docker-php-ext-enable redis

RUN a2enmod rewrite
# docker-compose.yml'de image yerine build kullanın:
  web:
    build: .
    # image: php:8.3-apache  # Bu satırı kaldırın

Temel Docker Compose Komutları

# Servisleri başlat (-d: arka planda)
docker compose up -d

# Logları izle
docker compose logs -f web

# Servisleri durdur
docker compose down

# Veritabanı dahil her şeyi sil
docker compose down -v

# Web container içinde shell aç
docker compose exec web bash

# MySQL'e bağlan
docker compose exec db mysql -u appuser -pAppSifre123! myapp

src/index.php Örneği

getMessage();
}

Sık Karşılaşılan Sorunlar

  • MySQL bağlantısı başarısız: Container adını host olarak kullanın (db), localhost değil. depends_on ve healthcheck kullanın.
  • İzin hatası (volume): ./src dizininin doğru izinlere sahip olduğunu kontrol edin: chmod -R 755 src/
  • Port çakışması: lsof -i :8080 ile portu kullanan servisi bulup kapatın veya .env'de farklı port kullanın.
  • Değişiklikler yansımıyor: PHP kodu değişikliklerinde container yeniden başlatmak gerekmez (volume ile bağlı); ancak PHP.ini değişikliklerinde docker compose restart web gerekir.

İlgili Makaleler

🤔 Bu kurulumda sorun mu yaşıyorsunuz?

Hata mesajınızı kopyalayıp foruma konu açın. Topluluğumuz size özel durumunuza göre yardımcı olacaktır.

🗨️ Foruma Katıl & Yardım Al
Etiketler: #docker #compose #lamp #gelistirme

Yorumlar

Henüz yorum yok. İlk yorumu siz yapın!

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanır.