Docker ile PHP
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
-
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.
-
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); -
Dockerfile yönergelerini eşleştir
- FROM
- Taban imajı seçer
- COPY
- Kaynak dosyaları kopyalar
- EXPOSE
- Port bildirir
- CMD
- Başlatma komutu