Yüksek Hızlı Modern Platform – Docker

Docker Nedir?

Docker sanallaştırma işlemini daha verimli hale getirmek için ortaya çıkmıştır. Sanallaştırma işlemi, local makine üzerinde kurulan sanallaştırma yazılımları(Örneğin: VirtualBOX, VMWare v.b.) kullanılarak farklı bir işletim sistemi kullanımı imkanı vermektedir. Fakat fazladan kurulan sanallaştırma yazılımları lokal makineyi çok yormaktadır. Docker ise bu işlemi sanallaştırma yazılımlarına gerek duymadan yapabilmektedir.

Kullanıcı, daha önceden hazırlanmış veya kendi hazırlamış olduğu yazılım paketlerini “images” (imajlar) pull alarak kendine özel konteynerlarda çalıştırabilmektedir. Bu konteynerlar tamamen lokal makineden bağımsız olarak çalışmaktadırlar. Ayrıca çalıştırdığınız konteynerda yapacağınız her işlem -aksi bir ayar yapmadığınız sürece- konteyner kapatıldığında kaybolmaktadır. Docker çalışma mantığı Şekil 1 üzerinden ayrıntılı olarak görülmektedir.

Şekil 1: Docker Çalışma Yapısı

Şekil 1 incelendiğinde sanal makineye göre daha sade bir yapıya sahip olduğu görülmektedir. Docker altyapı olarak “Container Engine/Docker Engine” kullanmaktadır. Docker’ın sağladığı önemli bir özellik ise “Host OS/Sanal İşletim Sistemi” yapısının olmamasıdır. Bu sayede hızlı bir deneyim sunmaktadır.

Docker Image Nedir?

Docker image, istenilen yazılım yüklü paketlenmiş bilgisayarlardır denebilir. Yani bir docker imajı içerisinde o yazılımı çalıştıracak her şeyi içeren bir yapıdır. Örneğin Confluence Server imajı pull alındığında;

  • Confluence Server’ı çalıştıracak işletim sistemi
  • Bu işletim sistemine uyumlu Confluence Server
  • Bu işletim sisteminde kurulu ve Confluence Server versiyonu ile uyumlu JRE
  • Tanımlı bir “JAVA HOME” dosya yolu
  • Kurulu Confluence Server
  • Tanımlı bir “CONFLUENCE HOME” dosya yolu

içeren bir yapı lokalinize alınmış olunacaktır. Bu imajlar sayesinde tüm bu yapılar paketlenmiş halde erişime açık hale gelmektedir. Bu imajlar ürünün resmi geliştiricileri tarafından oluşturulup yayınlanabildiği gibi kişisel yazılımlarda imaj haline getirilebilir. İmajların yönetilmesi işi ise Docker Hub sayfası üzerinden gerçekleştirilmektedir.

Docker Konteyner Nedir?

Docker konteyner, pull alınan imajların kapalı bir sistem içinde çalışmasını sağlar. Konteynerlar lokal bilgisayardan bağımsız olduğu gibi diğer konteynerlardan da bağımsız olarak çalışmaktadır. Bu yapı sanallaştırma yazılımlarına göre çok daha az kaynak harcamaktadır. İmajlar run edildiği zaman konteynere yüklendiği gibi stop edildiğinde içindeki verileri silerek tamamen kapatmaktadır. Verilerin kalıcı olması istenildiği durumlarda ise docker volume yapısı kullanılmaktadır. Docker imajı ve docker konteyneri çalışma mantığı Şekil 2‘de açıkça görülmektedir.

Şekil 2: Docker imajı ve Docker konteynerı çalışma yapısı

Şekil 2 incelenecek olunursa; dockerfile dosyası içinde belirlenen docker imajı “docker-run” komutu ile çalıştırılır. Bu işlem sırasında docker konteyner oluşturulur ve bu imaj çalıştırılır.

Docker Volume Nedir?

Docker konteynerları kapatıldığı zaman verileri silindiğinden genelde test işlemlerinde kullanılmaktaydı. Ancak ihtiyaçlar doğrultusunda verilerin kaybolmaması sağlanarak canlı sistemlerde de kullanılabilir hale getirilmiştir. Bu sisteme ise “docker volume ” ismi verilmiştir. Docker volume aslında çok basit çalışan ama etkili bir yapıya sahiptir.

Çalışma yapısı incelenecek olunursa; docker konteynerları çalıştığı zaman dosyaları konteyner içinde saklamaktadır. Bu dosyalar üzerinden verileri kaydetmektedir. Konteyner kapatıldığında ise doğal olarak bu bilgilerde kalıcı olarak silinmektedir. Volume ise bu verileri lokalde saklama imkanı vererek imaj çalıştığında lokaldeki dosyaları konteynere yükler ve veriler lokalinizden konteynera geçtiği için kalıcı hale gelir. Bu sayede kaybolması istenmeyen veriler bu dosya yolunda tutulmaktadır. Docker volume yapısı Şekil 3 üzerinden gösterilmektedir.

Şekil 3: Docker volume çalışma yapısı

Şekil 3 üzerinde de görüldüğü gibi, lokalde yer alan volume dataları konteynera yüklenerek çalıştırılır ve bu iki veri paralel olarak çalışır. Yapılan değişiklik konteyner içine kaydedildiği gibi lokaldeki dosya yoluna da kaydedilmektedir. Konteyner kapatıldığında konteyner içindeki veriler silinir ancak lokaldeki veriler silinmeyecektir. Konteyner tekrar açıldığında ise volume yapısı lokaldeki verileri konteynere yükleyecek ve verileriniz olduğu gibi gelecektir.

Docker Avantajları Nelerdir?

Lokalimde Çalışıyordu Ancak Sunucuda Neden ÇALIŞMADI

Yazılım geliştiricilerin çokça kullandığı bir sitemdir “Bende çalışıyordu ancak sunucuda neden çalışmadı”. Bu sorunun nedeni genelde yazılımın gereksinimleri olan ek kütüphane, yazılım veya paketlerin versiyonlarının uyumsuzluğudur denebilir. Docker bu konuda kullanıcılarına avantaj sağlamaktadır. Docker’da kullanılacak yazılım imajı pull alındığında aslında o yazılımın stabil ve çalışır hali yüklü olan bilgisayarı pull almış oluyorsunuz.

Örneğin Jira Software yazılımını bilgisayarınıza kurmak isterseniz;

  • Jira Software yazılımı ve uyumlu JRE versiyonu indirilir,
  • JRE kurulumu yapılır ve JRE dosya yolu siteme “JAVA_HOME” üzerinden gösterilir,
  • Jira Software Home verilerinin kaydedilmesi için “JIRA_HOME” klasörü oluşturulur ve Jira’ya bu dosya yolu eklenir,
  • Jira Software kurulumu yapılır.

Bu aşamada en kritik nokta Jira Software yazılımının JRE versiyonunu desteklemesidir. Bu ayarların yanında belirlenen “JAVA_HOME” ve “JIRA_HOME” dosya yolları da dikkat edilmesi gereken ayarlamalardır. Eğer lokalde ayarlar düzgün yapıldı ancak sunucuda yapılmadı ise lokalde çalışan yazılım doğal olarak sunucuda çalışmayacaktır.

Docker’da ise bu ayarların hiçbirini yapmanız gerekmemektedir. Jira Software imajını pull alıp konteyner içinde çalıştırdığınızda tüm ayarları yapılmış stabil Jira Software yazılımı açılmaktadır. Lokalinizde veya sunucuda yapacağınız pull işlemleri tamamen aynı etkiyi yaratacak ve hatasız çalışma sağlayacaktır. Bu sayede versiyon farklılıklarından doğan hataların önüne geçilmiş olunur.

Yazılım/Eklenti Test Etmek İçin Çok Fazla Ortam Kurmam Gerekiyor

Yazılım/eklenti geliştirdiniz ve bu ürününüzü test etmek istiyorsunuz. Eklenti geliştirdiyseniz ve bu eklentiyi yazılımın farklı versiyonlarda test etmeniz gerekiyorsa docker bu konuda çok iyi bir çözüm olacaktır. Çok hızlı bir şekilde test ortamınız hazır hale gelecektir. Örneğin Jira Software üzerinden plugin geliştirdiniz ve bu plugin’i uyumlu olmasını istediğiniz Jira Software versiyonlarında test etmeyi istiyorsunuz. Tek tek tüm versiyonları kurmak yerine Jira Software imajlarının sonuna ekleyeceğiniz versiyon parametresi ile istediğiniz versiyonu kısa sürede açabilir, testinizi yaptıktan sonra kapatabilirsiniz.

Sistemimde Java 8 Kurulu Ancak Kullanacağım Ek Yazılım Java 11 Gereksinimi Duyuyor

Docker’ın en önemli özellikleri platformdan bağımsız ve izole olmasıdır. Yani lokalinizdeki hiçbir şey docker’ın çalışmasını etkilememektedir. İşletim sisteminiz, kurulu paketler, kütüphaneler v.b. hiçbir özellik docker’ın çalışmasına engel olmamaktadır. Saniyeler içinde istenilen ortam lokal bilgisayarı etkilemeyecek şekilde çalışacaktır.

Örneğin Jira Software kurulumu yapacaksınız, ancak JRE’nin kurulum yapacağınız Jira Software versiyonuna uyumsuz bir versiyonu sistemde kurulu. O versiyonda başka bir yazılım tarafından kullanılıyor ise silmek gibi bir şansınızda bulunmamakta. Bu noktada docker konteynerı çalıştırılır ve bu gibi engeller düşünülmeden işleminize devam edebilirsiniz.

İstediğim Her Platformda Çalışır Mı?

Oluşturduğunuz konteynerı imaj haline getirip Docker Hub’a pushladınız ve erişime açık yaptınız, herkes imajınızı pull alabilir. İmajı pull alanların işletim sistemi ne? Gerekli kurulumları yaptı mı? Her şeyi yapmasına rağmen çalışmayabilir mi? Soruları olmadan tek komutla imajınızı çalıştıracaktır.

Docker’ın avantajlı dünyasından faydalanmak veya danışmanlık almak için info@almbase.com adresinden bizimle iletişime geçebilirsiniz.