apache ile docker

Apache Web Sunucusu İle PHP Kullanmak ve Docker

Özel durumlar haricinde neredeyse tüm PHP web uygulamaları bir web sunucuya ihtiyaç duyarlar. Web sunucuları en basit haliyle istemcilere talep ettikleri dosyaları aktaran yazılımlardır. Web’in gelişmesiyle birlikte istemciler sunucu üzerindeki sabit dosyalara ek olarak; işlenmiş veriler, farklı yöntemlerle saklanmış verilere ulaşma istekleri oluştu. Web sunucuya gelen bir istek dinamik olarak üretilecekse web sunucusu bu istekleri ilgili yazılıma göndermekle görevlidir. Web sunucu istekleri belirli bir portan çalışan uygulamaya veya yeni alt işlem oluşturarak gerçekleştirir.

Bu makalede Apache web sunucusunda apache modülü olarak çalışan PHP’nin docker container içerisinde çalıştıran çok temel konfigürasyonu inceleyeceğiz.

Docker Image oluşturmak

Örneğimde kullanmak için php paketinin 7.3-apache versiyonunu tercih ettim. Bu versiyon içinde apache ve apache modülü olarak çalışan php 7.3 versiyonu mevcut.

Dockerfile içeriğimiz aşağıdaki şekilde:

Buradan da anlaşılacağı üzere oluşacak imaj içindeki /var/www/html/ konumuna index.php dosyasını kopyalıyoruz. php:7.3-apache içerisindeki apache varsayılan olarak /var/www/html/ klasörünü kök dizin olarak gördüğünden, buraya atılan dosya web sunucusu üzerinden doğrudan çağrılabilir hale gelecek.

index.php içeriği aşağıdaki şekilde

Dockerfile ve index.php dosyasının olduğu çalışma klasörümüzde aşağıdaki komutu çalıştırarak minimal-php-apache isminde bir image oluşturuyoruz.

docker images -a | grep 'minimal-php-apache' komutu ile mevcut image listesi içinde istediğimiz image olup olmadığını kontrol edebilirsiniz.

Docker Container oluşturmak ve çalıştırmak

Aşağıdaki komut daha önce oluşturduğumuz minimal-php-apache imaj kullanılarak minimal-php-apache-container isminde bir container oluşturacak. Oluşturduğumuz imaj 80 portundan yayın yapacak şekilde ayarlanmış. Biz ise container oluşturulurken docker üzerindeki makinemizden 8812 portu gibi başka çalışmamalarımızla karışmayacak bir port üzerinden imaj içine bağlanmak istiyoruz. Bunun için --publish parametresi kullandık. Bu parametreyi hemen hemen tüm örneklerde -p şeklinde kısaltılmış olarak görebilirsiniz.

Tarayıcınızdan http://localhost:8812/ şeklinde bir istek yaptınızda terminalizden bu isteğin listelendiğini görebilirsiniz.

Özet

Bir image oluşturduk ve içine index.php kopyaladık. Bu image için container oluşturduk ve yayın yaptığı 80 portunu kendi makinemizden 8812 portundan ulaşılacak şekilde yapılandırdık.

Bu makaleyi PHP’nin web sunucularda çalışma şekilleri hakkında genel bilgiler vermek, apache modülü olarak yapılandırılmış bir imaj kullanılarak projemizi içinde çalışır hale getirmek konularında özel bilgi vermek için yazdım.

İpucu

index.php dosyanızda bir değişiklik yaptığında http://localhost:8812/ adresinden baktığınızda değişmesi gerektiğini düşünüyor olabilirsiniz, ancak yanıldınız. Image oluşturulurken dosyayı makinemizden image içine kopyaladıktan sonra makinemizdeki index.php ile bir bağlantısı kalmadı. Dosyayı güncellesek bile image tekrar oluşturulmalı ve container yeni oluşan image kullanılarak tekrar başlatılmalı. Çok korkunç bir tablo gibi duruyor. Neyse ki docker run komutuna --volume veya -v parametresiyle paylaşım oluşturabiliyoruz. Mevcut container docker container rm -f minimal-php-apache-container komutuyla kaldırılıp docker run komutumuza eklenen -v "$PWD":/var/www/html parametresiyle klasörümüzü minimal-php-apache image içinden erişebilir hale getirebiliriz.

Makalede anlatılanları uyguladıysanız oluşturduğunuz image ve container kaldırılması için aşağıdaki komutu çalıştırın.

Örnek proje klasörüne https://github.com/mahmutbayri/docker-examples/tree/master/minimal-php-apache adresinden olaşabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir