Docker ile PHP Geliştirelim

Merhaba,

Docker ile PHP geliştirmek isteyenlere yönelik kullandığım bir paketten bahsedeceğim. GitHub’ta webdevops.io bünyesinde geliştirilen paket ile Docker Hub‘ta bulunan tüm imajları dilediğiniz gibi kullanabilirsiniz.

 

Öntanımlı olarak gelen birden fazla seçenek bulunmakta. PHP ile proje geliştirenlerden şunu duyar gibiyim. Bende çalışıyor, ama arkaşımda çalışmıyor. Çok ciddiyim. Bu anahtar kelimelerle bile Google’da araştırma yaptığınızda karşınıza birçok konu başlığı çıkmakta.

Ben de bu sorunu bloğumda yazmışım hatta. Linux Mint kullanıcısı iken karşılaştığım bir PHP ortam sorunu ve çözümü: https://www.mkoseoglu.com/linux-php-composer-hatasi-ve-cozumu

Birgün CI ile geliştirme yaparken Laravel 5.5 ile çözmem gereken bir sorun vardı. Fakat şöyle bir durum var. Laravel 5.5 ile birlikte PHP 7 bağımlılığı da beraberinde gelmekte. Bu durumda, Arch Linux’a yeni bir PHP sürümü yapılandırmak ya da XAMP’ın PHP 7 sürümünü kurmak görünürde en mantıklı gelen çözümlerdi. Fakat ilerleyen zamanlarda bunun aslında ne kadar da saçma ve sığ bir süreç olduğunu fark ettim.

Docker, bizlere bu sorunu çözmeyi vaad ediyor. Bir sanallaştırma teknolojisi olan Docker üzerine teorik bilgilerden ziyade geliştirme paketinden söz etmeyi tercih ediyorum.

GitHub alanlarında ekledikleri açıklama satırında Symfony, WordPRess, Joomla ve diğer PHP projelerini (NGINX, Apache HTTPd, PHP-FPM, MySQL, Solr, Elasticsearch, Redis, FTP) desteklediklerinden söz etmişler. PHP sürümleri ve servisleri elinizin altında, tek yapmanız gereken Docker Compose ile birden fazla konteynırı ayağa kaldırmak.

Docker Kurulumu

Ben Arch Linux kullanıcısıyım. Pacman kullanarak ihtiyacım olan uygulamaları yüklüyorum.

sudo pacman -S docker docker-compose

Yükledikten sonra Docker servisimi başlatıyorum.

sudo systemctl start docker.service

Linux kullanıcılarının dikkat etmesi gereken bir nokta var. Docker’ın her komutunda sudo kullanmak ya da Docker‘ı kullanıcı grubuna eklemek zorundasınız. Ben eklemeyi tercih ediyorum.

sudo groupadd docker
sudo usermod -aG docker $USER

Bu işlemden sonra oturumumu yeniden başlatıyorum. Uçbirimde docker version komutunu çalıştırıyorum. Eğer sizin de çıktınız aşağıdakine benzer ise her şey yolunda demektir.

Client:
Version:      17.10.0-ce
API version:  1.33
Go version:   go1.9.1
Git commit:   f4ffd2511c
Built:        Wed Oct 18 23:08:56 2017
OS/Arch:      linux/amd64
Server:
Version:      17.10.0-ce
API version:  1.33 (minimum version 1.12)
Go version:   go1.9.1
Git commit:   f4ffd2511c
Built:        Wed Oct 18 23:09:11 2017
OS/Arch:      linux/amd64
Experimental: false

PHP Docker Boilerplate

Git clone komutu ile paketimizi yerele çekelim. Paketimizin içerisinde yer alan app dizini bizim Linux’taki mount, Docker‘daki Volumes dizinidir. Bir anlamda yerel bilgisayarınızdaki çalışma dosyalarınızdır. Biz, app dizini üzerinde çalışacağız.

Gerekli dökümanlara buradan ulaşabilirsiniz: https://github.com/webdevops/php-docker-boilerplate/tree/master/documentation

git clone https://github.com/webdevops/php-docker-boilerplate.git docker

Uçbirimde paket dizininde aşağıdaki komut ile birlikte çalışma ortamımızı seçelim. Geliştirme ortamında development olanını seçmekte fayda var. Gerekli hata ayıklama gösterimleri açık olarak gelmekte.

cp docker-compose.development.yml docker-compose.yml

Şimdi, docker-compose.yml dosyamızın içeriğine bir göz atalım. Burada yer alan komutların açıklama ve anlatımları için Dockerfile oluşturma üzerine araştırma yapabilirsiniz. Ben kullanmayacağım için links altında belirtilen mail servisini siliyorum.

MySQL veritabanı olarak 5.7 sürümünü kullanmayı tercih ettiğim için başındaki yorum satırını kaldırarak ilgili satırı aktif ediyorum. Hemen yukarısında kalan 5.6 sürümünün başına yorum satırı koyarak geçersiz hale getiriyorum.

dockerfile: MySQL-5.7.Dockerfile

Ve son olarak phpMyAdmin kullanmak istediğim için dosyanın aşağında bulunan yorum satırlarını silerek aktif hale getiriyorum ve görebilmek için bir port tanımlıyorum.

phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql
ports:
- 3000:80
environment:
- PMA_HOSTS=mysql
- VIRTUAL_HOST=pma.boilerplate.docker
- VIRTUAL_PORT=80
volumes:
- phpmyadmin:/sessions

Buna göre, phpMyAdmin’in 3000’inci portumda çalışmasını beklerim.

Kullandığımız paketin dökümantasyonunda ortam değişkenleri ve daha birçok konuda anlatım bulunmakta. Kendi ihtiyaçlarınıza göre inceleyerek yapılandırabilirsiniz.

Docker Compose

Docker Compose birden fazla konteynırı ayağa kaldırmaya yarar. Öncelikle bu paketimizi build etmemiz gerekli.

docker-compose build

Yukarıdaki komut ile inşaa ederek ihtiyaçlarımıza yönelik yapılandırdığımız Dockerfile dosyamız bizlere ilgili servislerin imajını indirmekle görevlidir.

Gerekli işlemler tamamlandığında docker image ls komutu ile tamamlanan imajlarımızı görüntüleyebiliriz. Sol kısımda yer alanlar ise ID değerleridir.

Şimdi buradaki imajlarımızı ayağa kaldıralım, çalıştıralım.

docker-compsoe up -d

Buradaki -d parametresi detached’ten gelmektedir. Türkçesi ile bağımsız, tarafsız anlamlarına gelmekte ve olan detached’in bizler için asıl amacı Docker komutlarını arka planda çalıştırmasıdır.

Komutumuzu çalıştırdıktan sonra adres çubuğumuza localhost:8000 yazarak Apache sunucumuza, localhost:3000 yazarak da phpMyAdmin ekranımıza ulaşabilirsiniz.

Buradaki app dizininde Laravel, CI ve WordPress gibi yukarıda da sözünü ettiğimiz Framework’leri (çatı) kullanabilir farklı PHP sürümleri ve servisleri ile ihtiyacına göre çalışma ortamınızı yapılandırabilirsiniz.

Çalışmalarınızı GitHub’a, Dockerfile dosyanızı ise imaj haline getirerek Docker Hub hesabınıza atabilirsiniz.

Sonuç

Docker‘in Türkçe kaynak eksikliği herkesçe bilindiği için bu makaleyi oluşturmaya karar verdim. Kısa da olsa bir PHP geliştiricisinin hangi süreçlerden geçmesi ve hangi adımları izleyerek işlevsel bir Docker kullanıcısı olabileceğini anlatmayı hedefledim.

Bir Cevap Yazın

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