CodeBlanks Logo Icon CodeBlanks

Docker ile PHP

PHP kursu · Uzman · Ders 43/54

Dockerfile ve docker-compose ile PHP geliştirme ortamı kurmayı öğrenirsin.

Dockerfile ve php:8.3-fpm

Dockerfile, bir Docker imajının tarifidir: hangi taban, hangi dosyalar, hangi komut çalışacak. Her satır bir yönerge (directive) ile başlar.

PHP için resmi php:8.3-fpm taban imajı yaygındır; içinde PHP-FPM hazır çalışır. FROM tabanı seçer, COPY kaynak dosyaları kopyalar, EXPOSE 9000 FastCGI portunu bildirir.

PHP kodundan bir Dockerfile üretmek istersen file_put_contents ile metni diske yazabilirsin.

COPY, EXPOSE ve CMD

COPY yönergesi kaynak dosyaları imaj içindeki bir dizine kopyalar. COPY . /var/www/html bulunduğun dizini imajdaki /var/www/html altına taşır.

EXPOSE 9000 imajın 9000 portunu dinlediğini bildirir; bu PHP-FPM'in varsayılan FastCGI portudur ve dışarıdan erişilebilir.

Çok adımlı Dockerfile'larda her satır bir yönerge taşır; boş satırlar ve # ile başlayanlar yorum sayılır. CMD ise imaj çalışınca hangi komutun yürütüleceğini söyler.

Uygulama Dockerfile üret ve yaz

PHP ile bir Dockerfile metni üret: FROM php:8.3-fpm, COPY . /var/www/html, EXPOSE 9000 ve CMD ["php-fpm"] satırlarından oluşsun. file_put_contents ile Dockerfile adına yaz ve metni ekrana bas.

Örnek çözümü göster
$dockerfile değişkenini tek tırnaklı parçalar ve "\n" ile birleştir. Sonra file_put_contents("Dockerfile", $dockerfile); ve echo $dockerfile; çağrılarını ekle.
Örnek çözüm:
<?php
// Dockerfile içeriğini üret ve yaz
$dockerfile = 'FROM php:8.3-fpm' . "\n" .
    'COPY . /var/www/html' . "\n" .
    'EXPOSE 9000' . "\n" .
    'CMD ["php-fpm"]' . "\n";
file_put_contents("Dockerfile", $dockerfile);
echo $dockerfile;

Kendini test et

  1. Hangi Dockerfile yönergesi taban imajı seçer?

    • RUN
    • FROM
    • CMD
    • EXPOSE
    Cevabı göster

    FROM — Doğru. FROM yönergesi taban imajı belirler; ilk satırda yer alır.

  2. FROM satırını tamamla

    <?php
    $df = ["line" => "____ php:8.3-fpm\n"];
    print_r($df);
    
    Cevabı göster
    <?php
    $df = ["line" => "FROM php:8.3-fpm\n"];
    print_r($df);
    
  3. Dockerfile yönergelerini eşleştir

    FROM
    Taban imajı seçer
    COPY
    Kaynak dosyaları kopyalar
    EXPOSE
    Port bildirir
    CMD
    Başlatma komutu

Uzman bölümündeki tüm dersler