PHP Uygulamasını Docker'a Taşıma
PHP + Nginx için bir Docker imajı oluşturun ve Docker Compose ile düzenleyin.
PHP Uygulamasını Docker'a Taşıma, CoddyKit'te ücretsiz bir PHP Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, PHP Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. PHP Academy kursu toplamda 4 dersten oluşur.
PHP için Docker Neden Kullanılır?
Docker, uygulamanızı bağımlılıklarıyla birlikte taşınabilir bir kapsayıcı görüntüsünde paketler. Aynı görüntü geliştirme, sürekli tümleştirme ve üretim ortamlarında özdeş biçimde çalışır; böylece “benim makinemde çalışıyor” sorunları ortadan kalkar.
Temel PHP Dockerfile
PHP + Nginx uygulaması için asgari bir Dockerfile.
# Dockerfile
FROM php:8.3-fpm-alpine
# Install extensions
RUN docker-php-ext-install pdo pdo_mysql opcache
# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .
RUN chown -R www-data:www-data /app/storage /app/bootstrap/cacheÇok Aşamalı Derleme
Son görüntüyü küçük tutmak için çok aşamalı derlemeler kullanın — derleme araçlarını bir aşamaya kurun, yalnızca çıktıları son görüntüye kopyalayın.
# Stage 1: builder
FROM composer:2 AS builder
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
# Stage 2: runtime
FROM php:8.3-fpm-alpine
WORKDIR /app
COPY --from=builder /app/vendor ./vendor
COPY . .docker-compose.yml
Birden çok hizmeti (PHP-FPM, Nginx, MySQL, Redis) Docker Compose ile yönetin.
# docker-compose.yml
services:
app:
build: .
volumes:
- .:/app
nginx:
image: nginx:alpine
ports: ["80:80"]
volumes:
- .:/app
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: myapp
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:Nginx Kapsayıcı Yapılandırması
PHP-FPM isteklerini vekil sunucu üzerinden iletmek için özel bir Nginx yapılandırmasını bağlayın.
# docker/nginx.conf
server {
listen 80;
root /app/public;
index index.php;
location / { try_files $uri /index.php?$query_string; }
location ~ \.php$ {
fastcgi_pass app:9000; # service name from docker-compose
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}Ortam Değişkenleri
Ortam değişkenlerini kapsayıcılara aktarın — gizli bilgileri asla görüntülere gömmeyin.
# docker-compose.yml:
services:
app:
env_file: .env
# or explicit:
environment:
- APP_ENV=production
- DB_HOST=mysqlLaravel Artisan Komutları
Artisan komutlarını kapsayıcının içinde çalıştırın.
$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:workSağlık Denetimleri
Orkestrasyon araçlarının (Kubernetes, ECS) kapsayıcının ne zaman hazır olduğunu bilmesi için sağlık denetimleri ekleyin.
# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost/health || exit 1Görüntüleri Derleme ve Gönderme
Görüntünüzü bir kayıt deposuna derleyip gönderin (Docker Hub, ECR, GHCR).
$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0Kubernetes Dağıtımı
Kubernetes'te görüntünüzü kullanan bir Deployment ve Service kaynağı tanımlayın. Yeni sürümleri kubectl set image ile veya YAML dosyasını güncelleyip uygulayarak kullanıma alın.
Üretim Ortamını Güçlendirme
Üretim Docker uygulamaları: kök olmayan kullanıcı kullanın, kök dosya sistemini salt okunur yapın, asgari bir temel görüntü (Alpine) kullanın, geliştirme bağımlılıklarını eklemeyin, görüntü etiketlerini sabitleyin ve docker scout ile CVE'leri tarayın.
Özet
PHP-FPM + Composer için bir Dockerfile oluşturun. Nginx, MySQL ve Redis hizmetleriyle yerel geliştirme için docker-compose kullanın. Üretimde çok aşamalı derlemeler kullanın, ortam değişkenlerini aktarın ve Kubernetes veya ECS üzerinden çalıştırın.
Hızlı Kontrol
Çok aşamalı Docker derlemelerinin temel yararı nedir?
Sıkça Sorulan Sorular
“PHP Uygulamasını Docker'a Taşıma” dersi ücretsiz mi?
Evet — “PHP Uygulamasını Docker'a Taşıma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve PHP Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. PHP Academy kursu toplamda 4 dersten oluşur.
“PHP Uygulamasını Docker'a Taşıma” dersinde ne öğreneceğim?
PHP + Nginx için bir Docker imajı oluşturun ve Docker Compose ile düzenleyin. PHP Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
PHP Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te PHP Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“PHP Uygulamasını Docker'a Taşıma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu PHP Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her PHP Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Nginx ve PHP-FPM Yapılandırması
- Ortam Değişkenleri ve .env Dosyaları
- GitHub Actions ile Dağıtım
- PHP Uygulamasını Docker'a Taşıma