Docker ve Kubernetes

Docker Compose ile Birden Fazla Container Yönetimi

Merhaba arkadaşlar, Mobilhanem üzerinden yayınladığımız Docker derslerine Docker Compose ile Birden Fazla Container Yönetimi ile devam ediyoruz. Önceki derslerimizde docker komutları ile nasıl container oluşturup yönetebileceğimizi öğrendik. Birden fazla container yönetmek istediğimizde, ve bunları volume, port ayarları gibi belirli parametrelerle çalıştırmak istediğinizde her seferinde aynı şeyleri yazmak yorucu olabilir. Docker bu süreci kolaylaştırmak için Docker Compose adlı bir araç sunuyor. Geliştirme ortamı, kompleks test gereksinimleri ya da bir sunucuya yapacağınız çoklu container kurulumlarında kolaylık sağlayabilir.

Docker Compose çalışmak için bir YAML dosyası beklemektedir. Bu YAML dosyasında ise çalışacak containerlar imajları, parametreleri, volume ve port ayarları belirtilmelidir. Kafanızda daha rahat canlanması için en popüler yazılımlardan olan WordPress’ten örnek vereceğiz. Bildiğiniz üzere WordPress çalışmak için bir veritabanına ihtiyaç duyar. Bir klasör açıp içine docker-compose.yml dosyasına aşağıdaki içeriği yazalım:

version: '3.3'

services:
   db:
     image: mysql:5.7
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress

Bu dosyada görebileceğiniz üzere 2 adet servis, yani container’ı ayağa kaldıracağız. İlk container’ın adı db ikincisi ise wordpress olacak. Veritabanı imajı olarak ise mysql:5.7 kullanacağız ve wordpress container’ı bu database’e db:3306 yazarak ulaşabilecek. Docker bu container’ın db container’ına gidebilmesi için hosts dosyasına IP’sini yazıyor. Ayrıca depends_on ile de önce db’nin sonra wordpress’in başlanmasını sağlıyoruz. WordPress container’ında ise sunucudaki 8000 portunun container’ın 80 portuna bağlanması sağlanıyor. Environment kısmında ise imajların beklediği şifre ve veritabanı adı gibi parametreler var. Bu klasörde docker-compose up komutu yaptığımız zaman ise önce db, sonra wordpress ayağa kalkacak ve kullanıma hazır olacak. Bu komutları docker run komutu ile yapsaydık çok uzun ve hataya açık bir komut olacaktı.

Bu komutu çalıştırdıktan bir süre sonra her iki container’dan da logların aktığını göreceksiniz. Her satırda logun hangi container’dan geldiği belirtiliyor. Sonlarında _1 yazmasının sebebi ise docker-compose scale komutları ile her container’dan birden fazla açılmasını sağlayabiliyoruz. Bunu her ne kadar bu wordpress ve mysql imajlarına yapamasak da yatay ölçeklenebilen container’larda yapabiliriz. Tarayıcınızda localhost:8000’e girince WordPress kurulumunu göreceksiniz. Docker Compose hakkında detaylı bilgiye bu linkten ulaşabilirsiniz.

Docker Compose ile hali hazırda var olan imajlar dışında, geliştirme ortamındaki bir Dockerfile’dan da docker-compose up komutu ile imaj alınması sağlanabiliyor. Geliştirdiğiniz kodun database, cache gibi harici yazılım bağı var ise bu özelliği de işinize yarayabilir, tek bir komutla ortamınızı hazır hale getirebilirsiniz.

Tüm Docker dersleri için tıklayınız.

2

Mustafa Akın

SRE Architect @Atlassian Opsgenie
PhD Öğrencisi @Bilkent Üniversitesi

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?