25 Apr 2017
Docker-Compose ile LAMP(Linux Apache MySQL PHP) Server Kurulumu
  • 1432 Okuma
  • 0 Yorum
  • 2 Beğeni

Docker-Compose ile LAMP(Linux Apache MySQL PHP) Server Kurulumu

Docker ile ilgili daha öncekli makalelerimde bir genellikle bir container üzerinde çalıştık ve işlemlerimizi bu tek container üzerinde gerçekleştirdik. Bu işlemi biraz daha ileri götürerek, Docker ile LAMP Server kurulumu yaptığım makalemde ise bu container'ları ayrı ayrı kurmamıza rağmen, çalışırken beraber çalışmalarını sağladık. Docker ile LAMP Server kurulumu hakkındaki makaleme buradan erişebilirsiniz.


Docker ile LAMP Server kurulumunda olduğu gibi normal durumda gerçek sistemler tek bir sunucudan/katmandan ibaret değildirler. İdeal sistemler n katmanlı mimariyi kullanırlar. Yani sistem olabildiğince ve en efektif çalışacak şekilde, uygulama sunucu, veritabanı sunucusu, dosya sunucusu gibi katmanlara ayrılırlar.

N katmanlı bir mimarinin docker ile kurulumu ve bu katmanların birbirleriyle olan bağlantılarının tanımlanması birçok yapılandırma gerektirmektedir. İşte bu noktada docker compose ihtiyacımız olan kurulumları kolay bir şekilde yapılmasında bize yardımcı olmaktadır.


Docker ile image oluştururken Dockerfile dosyası kullandığımız gibi Docker compose 'la image oluşturmada da docker-compose.yml dosyasını kullanıyoruz. Bu dosya üzerinde belirli bir formatta tanımlamaları yaparak aynı anda birden fazla sunucuyu kurulumu yapabildiğimiz gibi, kurulum esnasında bu sunucuların kendi yapılandırması ve birbirleriyle olan yapılandırmalarını tanımlayabiliyoruz.

Docker compose 'un ne olduğuna değindikten sonra şimdi asıl konumuz olan Docker compose ile LAMP Server kurulumuna geçebiliriz. LAMP Server için gerekli olan docker-compose.yml dosyasını oluşturuyoruz ve içerisini aşağıdaki şekilde dolduruyoruz.


version: '2'
services:    
 web:
   build:
     context: ./
     dockerfile: web.docker
   working_dir: /var/www/html
   ports:
     - "8080:80"
   environment:
     - "DB_PORT=3306"
     - "DB_HOST=database"
   links:
     - database
 database:
    image: mysql:latest
    environment:
       - "MYSQL_ROOT_PASSWORD=webdeyaz"
       - "MYSQL_DATABASE=webdeyaz"
       - "MYSQL_USER=root"
       - "MYSQL_PASSWORD=webdeyaz"
    ports:
       - "3306:3306"


Bu dosya ile kurulumun nasıl yapılacağına geçmeden önce bu dosya içerisinde yaptığımız tanımlamalara kısaca değinelim.


version: '2', Docker compose 1.5+ sürümleri "version 2" dosya formatını kullanmaktadır. Bu yüzden eğer sizde docker compose 1.5+ bir sürümünü kullanıyorsanız bu satırı eklemek zorundasınız.

services, satırı ile hangi servislerin kurulumunun yapılacağını tanımlamaya başlıyoruz.

web, bu satır ile kurmak istediğimiz service için isim tanımlamayı yapıyoruz. Bir web sunucu kuracağımız için ben web olarak tanımladım.


build, service'in build edilme esnasındaki yapılandırma seçeneklerini burada tanımlıyoruz. Ben örnek olarak context ve dockerfile tanımlamalarını yaptım. Context, yapılandırmaya ilişkin dosyaların hangi dizinde olduğunu belirtir. dockerfile ise service'e ilişkin yapılandırmanın bulunduğu dockerfile dosyasını tanımlar. Dockerfile dosya içeriği için bu örneği kullanabilirsiniz.


FROM php:7.0-apache
RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev libpq-dev \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
    && docker-php-ext-install gd mbstring pdo pdo_mysql


Burada dockerfile kullanılmadan, tüm tanımlamalar docker-compose.yml dosyasında yapılarak da kurulum yapılabilir. Fakat dockerfile kullanımı daha kullanışlı olduğu düşünüyorum. Çünkü aynı dosyayı tek başına kullanabileceğiniz gibi docker-compose.yml ile de kullanabilirsiniz.

working_dir, service'in varsayılan olarak hangi dizin üzerinde çalışacağını tanımlar.

ports, service'in hangi portu dinleyeceğini tanımlar. Burada port1:port2, port1 service'in üzerinde çalıştığı sunucun portu (public), port2 ise docker compose ile oluşturulacak service'in dinleyeceği portu tanımlar. Biz 8080:80 tanımlamasıyla, sunucun 8080 portuna gelen istekleri container'in 80 portuna iletmesini (forward) tanımladık.

enviroment, web sunucusunun hangi veritabanı sunucusuna bağlanacağını ve bağlanırken hangi portu kullanacağı tanımladık.

links, oluşturduğumuz web adındaki service'in diğer hangi servislerle bağlantılı olacağını tanımlar. Burada database adındaki service ile bağlantı kuracak şekilde tanımla yaptık. Bu şekilde web sunucusuna ait tanımlamalar bitti. Şimdi veritabanı sunucusu için yaptığımız tanımlamalara geçebiliriz.


database, veritabanı kuracağımız için sunucu adına "database" olarak tanımlıyorum. Bu tanımlama ile bir önceki sunucu tanımlamalarında "links" tanımlamasında kullandığımız "database" tanımlamalarının aynı olması gerekiyor. Buna dikkat edin.

image, image oluşturma işleminde "dockerfile" dosyası kullanarak yapılabildiği gibi, tanımlamaların doğrudan docker-compose.yml dosyasında da yapılabildiğinden bahsetmiştim. Burada veritabanı image'ı için dockerfile dosyası kullanmadan yapıyorum. Bu yüzden "image" ile hangi depodan kurulum yapılacağını tanımladım.

enviroment, veritabanı için veritabanı adı, kullanıcı adı ve şifre gibi değişkenler burada tanımlanır.


Evet bu şekilde docker-compose.yml dosyamızı oluşturmuş ve içerisindeki tanımlamalara değinmiş olduk. Şimdi bu yml dosyasının build etme işlemine geçelim. Bunun için aşağıdaki komutu kullanmanız yeterli.


docker-compose build


Bu komut ile docker-compose.yml dosyasındaki tanımlamalara göre image'lar oluşturulacak. Oluşturulan bu image'lar çalıştırmak için aşağıdaki komutu kullanmanız yeterli. "-d" parametresi container'ların arka planda çalışması için.


docker-compose up -d


Çalışmakta olan container'ların görüntülenmesi için aşağıdaki komutu kullanabilirsiniz.


docker-compose ps


İşte bu şekilde docker-compose kullanarak daha kolay şekilde LAMP Server kurulumu yapmış olduk.

Umarım faydalı olur. İyi çalışmalar.


 

Makaleyi faydalı buldunuz mu ?

Yazar


Legend Engineer

Legend Engineer

Mühendis (Bilgisayar)

Bilgisayar Mühendisliği mezunuyum. Bilgisayar alanında edindiğim bilgileri bu blog üzerinde paylaşıyorum. Beni takipte kalın.

Yorumlar


İlk yorum yapan sen ol

İlginizi Çekebilir

Makale Hakkındaki Düşünçelerinizi Paylaşın