Docker Hap Yazısı: Index’i ve Verisi İle Elasticsearch Image’ı Hazırlama 💡

En sonda söyleyeceğimi en başta söyleyeyim, başlığın konseptini Murat Dogan’dan çaldım, evet! Dedim ki ben de kısa yazabilirim, hikaye kısmını biraz bıraksam, biraz daha az dert anlatsam, kod bloklarını da ufaltsam benden de bir hap yazısı çıkar. Buyrun ispatına…

İşin esprisi bir yana, geçtiğimiz günlerde ihtiyaç duyduğum bir duruma ürettiğim çözüm üzerine bir tartışma yaratmaktır bu yazının niyeti. Alternatif çözüm üreten herkesten katkılarını beklediğimi belirtmek isterim.

Durum şu; Basit bir konsol uygulamam var ve Elasticsearch üzerinde yine basit bir sorgulama yapıyor. Amacım, bu iki uygulamayı aynı anda çalışır vaziyete getiren bir yığın — stack — oluşturmak. Benim aklıma gelen ilk ve tek alternatif tabii ki belli:

Durumu nispeten karmaşık hale getiren durum ise, uygulama çalışır hale geldiğinde, Elasticsearch üzerinde önceden tanımlamış olduğum index ve index’e eklenmiş kayıtların hazır bir şekilde beklemesini istemem. Yani diyorum ki docker-compose up komutunu çalıştırdığımda yığın, müdahale gerektirmeksizin kullanılabilir durumda olsun.

Madem hap yazısı yazıyoruz, hakkını verelim. Özetle, yukarıdaki projede yaptığım bir takım işlemlerle sorunu çözdüm. Kafa yorduğum iki konu hakkında ise “kendime notlar”ı düşmekte fayda görüyorum.

Custom Elasticsearch Image’ı Hazırlama

Base image olarak haliyle Elasticsearch’ün sağlamış olduğu image’ı aldım. Bu dosyayı ilk oluşturduğumda “Elasticsearch root olarak çalıştırılamaz!” tadında bir hata alıyordum. Bu sebeple custom image içerisinde elasticsearch isimli kullanıcıyı aktif kullanıcı olarak işaretledim. Sonrasında ise index oluşturan ve bulk olarak kayıt ekleme operasyonunu gerçekleştiren dosyaları image içerisine gömdüm. Yine internette çokça karşılaşılan ve “X konteynırının çalışması için Y konteynırının çalışması” koşulunu kontrol eden wait-for-it.sh dosyasını da yine image içerisine ekledim.

Son satırdaki /bin/bash /utils/wait-for-it.sh -t 0 localhost:9200 -- /utils/init.sh komutunun açılımı; localhost:9200 adresi yanıt verene kadar bekle, yanıt verdikten sonra /utils/init.sh script’ini çalıştır. Böylece Elasticsearch konteynır’ı sağlıklı bir halde çalışır vaziyete geldiğinde, index oluşturma ve kayıt ekleme işlemlerini gerçekleştireceğiz.

Custom Image ve Uygulamayı, Yığın İçerisinde Sıralı Olarak Çalıştırma

Buradaki bir çok komuta elbette aşinayız. Can alıcı nokta ise şu: Elasticsearch konteynırının sağlıklı duruma gelmesi, uygulamanın çalışması için yeterli değil. Çünkü, konteynır içerisindeki Elasticsearch servisi henüz isteklere yanıt verebilir düzeyde değil. Bunun için de healtcheck denilen özelliği kullanıyoruz. 10 saniye aralıklarla, 1 saniye timeout süresi verilmiş şekilde 6 defa oluşturduğumuzu varsaydığımız index’e sorgu atıyoruz. Eğer bu sorgudan istediğimiz cevabı alırsak, es adlı servisin sağlıklı olduğuna kanaat getiriyoruz. app adlı servisimizin çalışma koşulu ise es servisinin sağlıklı olarak işaretlenmesi.

İşte tam istediğimiz gibi bir akış oldu. Uygulamanın çalışması için, Elasticsearch üzerindeki index’imiz oluşmuş ve kayıtlar içerisine eklenmiş olmalı!

Benim bu tür bir senaryo için çözümüm bu oldu, başta da söylediğim üzere farklı senaryoları okumaktan büyük mutluluk duyacağım. Bu sebeple lütfen yorumlarınızı yazıdan ve okuyuculardan esirgemeyin.

Bir sonraki yazıda tekrar görüşmek dileğiyle…