🐳 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
📋 İç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 downile 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),localhostdeğil.depends_onve healthcheck kullanın. - İzin hatası (volume):
./srcdizininin doğru izinlere sahip olduğunu kontrol edin:chmod -R 755 src/ - Port çakışması:
lsof -i :8080ile 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 webgerekir.
İlgili Makaleler
- Docker Nasıl Kurulur? Ubuntu ve AlmaLinux Üzerinde Tam Rehber
- Proxmox VE Kurulumu ve İlk Yapılandırma: Kapsamlı Rehber
- Apache Web Sunucusu Nasıl Kurulur? Ubuntu ve AlmaLinux Rehberi
- Nginx Nasıl Kurulur? Ubuntu 22.04 ve AlmaLinux Adım Adım Rehber
- PHP 8.3 Kurulumu: Ubuntu, AlmaLinux ve cPanel'de PHP Yönetimi
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!