Teknoloji ve Hayata dair günceler

Son Yazılar


Kategoriler


Son Yorumlar..


Temel Docker & Konteynır Kullanımı

Kemal İKİZOĞLUKemal İKİZOĞLU

Herkese merhaba,

Bugün sizlerle adını yazılım dünyasında sıkça duyduğumuz Docker veya konteyner teknolojisine odaklanıp hangi amaçlarla, nasıl kullanıldığını inceliyor olacağız. Bununla birlikte, daha önce kullandığımız teknolojilerle karşılaştırıp anlamayı kolaylaştıracağız. Dilerseniz başlayalım.

Docker Öncesi Temel Senaryo

Konuyu açıklığa kavuşturmak için önce güzel bir örnek üzerinden başlamak istiyorum. Hepimizin kullandığı masaüstü ya da dizüstü cihazları düşünelim. Her bir cihazın üzerinde bir işletim sistemi var ve bunun sayesinde oturum açıldıktan sonra uygulamaları kullanıyor; farklı uygulamalar kurup bunları var olan işletim sistemi üzerinde çalıştırıyoruz.

Tüm kaynakları işletim sistemi dağıtıyor, kontrol ediyor. Bazen cihaz güncelleme alıyor ve çökebiliyor. Sistem çöktüğünde tüm uygulamalar gidiyor ve erişim sağlayamıyorsunuz. Bu hepimizin bildiği ve en az birkaç kez yaşadığı bir senaryodur. Bilhassa zararlı yazılımların etkisiyle tüm sistemin etkilendiğini de eklemeden geçemeyeceğim.

Tüm bu senaryo içerisinde bazen güvenli alanda kalabilmek adına sanallaştırma uygulamalarını tercih ederiz. Yapacağımız işlemlerde bir sıkıntıya maruz kalmamak adına sanallaştırma uygulamalarından birini bilgisayarımıza kurup kendi cihaz kaynaklarını paylaştırarak sanal oturumlar oluştururuz. Her bir sanal oturuma bir işletim sistemi kurar, depolama, çekirdek, ram alanı ayırır, mevcut işletim sistemi üzerinde çalıştırırız. Tabii çalışırken cihazın ağırlaşmaya veya donmaya başladığı bazı durumlarla da karşılaşabiliriz. Sanal bilgisayarda bir problem olursa hemen silebilir, ana makineyi zarardan kurtarmış oluruz.

Bu süreci kişisel bilgisayarlar üzerinde ifade etmeye çalıştım fakat bunu sunucu hizmeti veren cihazlar Buraya kadar anlaşılmayan bir durum yoksa şimdi bu noktadan itibaren Docker sisteminin ne olduğuna geçebiliriz.

Docker nedir?

Uygulamaların ve uygulamalar için gerekli olan tüm kütüphanelerin, ekstra dosyaların bir arada paketlenip hazırlandığı, izole edildiği ve taşınabilir ortam olan konteynırlar içerisinde çalıştırılmasını sağlayan teknolojidir. Bu uygulamaların bu şekilde paketlenmesinin sebebi, her ortamda aynı verimde ve süreçte çalışmasını sağlamaktır. Buradaki ana hedef her seferinde tekrara düşmeden, her ortamda standart bir şekilde çalışabilecek bir sistem tasarlamak ve çalışmasını sağlamak!

Avantajları nelerdir?

Taşınabilirlik: Aslında en büyük avantajlarından biridir. Bilgisayarınızda Python programlama dilini kullanarak Youtube mp3/video indirme servisi oluşturdunuz. Bilgisayarınızda başarılı ve sağlıklı bir şekilde çalışıyor ama bunu Raspberry Pi üzerinde çalıştırmak istediniz. Şimdi Pi için tüm süreçler sıfırdan mı hazırlanacak? Bu sisteme göre sadece bir yerden bir yere dosya transferi yapmak kadar kolay bir hale geliyor.

Hafiflik ve Hız:

Burada hafiflik ve hızı kıyaslayabileceğim şahane bir örneğimiz var. Hepimiz Virtual Machine(VM) kullandık ve her yeni VM için bir işletim sistemi kurup kaynakları ekstra sistemle paylaşmamız gerekti. Burada Docker sistemi hangi sistemin üzerindeyse o işletim sistemini kullanıyor. Docker’i Windows’ta kullanıyorsanız Windows’u, sunucunuzu kullanıyorsanız sunucunun işletim sistemini kullanıyor. Her bir konteyner dediğimiz yapı, ihtiyaç olan kütüphane ve bağımlılıkları bir paket haline getiriyor ve izole ederek çalışır hale getiriyor. Böylece daha hızlı, izole, kaynakları tamamen sömürmeyen, kontrol edilebilir modüler yapılarla sistemleri ayağa kaldırıyoruz. Nasıl ama?

Sağ taraftaki VM görselinde ise her blok içerisinde Operating System etiketini görmek bile ne kadar fazla kaynak tüketimi olduğunu gösteriyor.

İzolasyon ve Verimlilik:

Normal şartlarda sistemde yaptığınız bir güncelleme olumsuz olarak etki gösterdi ve belki de her şey bir anda çöktü. Bu senaryo çok tanıdık geliyor.

Docker sisteminde ise her bir konteyner izole hale getiriliyor ve diğerlerinden etkilenmiyor. Sistemleri içeride birbiriyle haberleştirebilirsiniz fakat sistemin çökmesi için özellikle çaba harcamanız gerekecektir. Normalde iki üç sanal makine çalıştırdığınız noktada Docker ile içeriğe bağlı olarak belki 5-10 sistemi ayağa kaldırabilirsiniz.

Sistemin Temel Kavramları

Konteynır, imaj, Docker Hub, Dockerfile, Docker Daemon, Docker Registry, Docker Compose diye devam eden bir terim kümesi bulunmakta fakat nedir bunlar? Yazımın bazı noktalarında bazı terimler kullandım. Şimdi onları burada teker teker açıklayalım.

Docker Hub:

Docker Hub, Docker ile ilgili projelerin paylaşıldığı ana platform görevi gören alandır. Python’daki PyPi gibi kütüphanelerin yer aldığı bir platform gibi düşünebilirsiniz.

Docker Registry:

Docker Registry, Docker imajlarının depolandığı, paylaşıldığı ve sürümlendiği merkezi bir sistemdir. Docker Hub bu sistemlerin en bilinen örneğidir. Docker Registry’i kütüphane olarak düşünürsek, Docker Hub ise herkesin erişebildiği, halka açık Milli Kütüphane olarak düşünebilirsiniz. Bu Docker Registry halka açık olarak kullandığınız bir imaj da olabilir ya da özel olarak geliştirip sunucunuzda tuttuğunuz bir servis de olabilir.

Örneğin, halka açık imajlar olarak n8n, Python veya Nginx gibi herkesin Docker Hub’dan çekebildiği hazır yapılar olarak söyleyebiliriz. Özel servis ise sizin kendi yazdığınız Python kodlarını veya modifiye ettiğiniz sistemleri içeren, sadece sizin VPS’inizde veya yerel ağınızda çalışan kapalı devre Registry yapısı olarak ifade edebiliriz.

Docker Daemon:

Arka plandaki işleri kontrol edip yöneten, verilen komutların gerçekleştirilmesini sağlayan birimdir. Sistem tamamen bu yapı üzerinden kontrol edilir.

Daemon, Docker’ın tüm bileşenlerinden sorumludur:

Docker Image (İmaj):

Docker Registry (veya Docker Hub) üzerinde yer alan bir uygulamanın çalışması için gereken tüm dosyaların, bağımlılıkların ve yapılandırmaların bir araya getirilmiş salt okunur (read-only) paketidir. Nginx, Python, GoLang, WordPress, PHP, MySQL gibi..

Docker Container (Konteyner):

Docker Daemon tarafından imajlardan üretilerek çalıştırılan, ana sistemin çekirdeğini paylaşan ancak süreç bazında tamamen izole olan her bir birime denir.

Sanal makinelerin aksine, her bir birim için ayrı bir işletim sistemi kurmaya gerek duymaz; bu sayede çok daha hızlı ve hafiftir.

Docker Engine:

Konteynerleri oluşturan ve çalıştıran ana yazılımdır. İki temel bileşenden oluşur: Docker Daemon ve Docker CLI.

Docker CLI (Command Line Interface): Docker Terminal arayüzü üzerinden kullanıcıların sistem ile arasındaki iletişimin kurulmasını sağlayan, komutların iletilmesini sağlayan tercümandır.

Docker Compose:

Eğer birden fazla konteynıra sahipseniz bu Docker uygulamalarını tanımlamak ve çalıştırmak için kullanılır.

Servisleri ayarlamak için bir YAML dosyası kullanılır. Daha sonra hazırladığınız ayarlar ile tüm servislerinizi oluşturup başlatabilirsiniz.

Dockerfile:

Docker imajını oluşturmak için gerekli adımları içeren yapılandırma dosyasıdır.

Dockerfile vs Docker Compose Farkı Nedir?

Dockerfile (Tarif): Kendi özel uygulamanı nasıl hazırlayacağını anlatan reçetedir. Örneğin, Python versiyonunu seçersin, kütüphaneleri yüklersin, dosyaları içine kopyalarsın. Sonuçta ortaya sana özel bir Image çıkar. Bunu da Dockerfile ile yönetirsin.

Docker Compose (Sipariş): Hazır imajları bir sisteme nasıl dizeceğini anlatır. “Bana bir tane hazır Python sistemi getir, yanına da bir tane hazır veritabanı koy, aralarında da bir bağlantı kur!” dersin.

Özetle

Bugün sizlere Docker sistemine dair bir bakış açısı kazandırmaya çalıştım. Docker nedir ve hangi sistemler bunu kullanır? Sanal bilgisayarlar ile Docker’ın farkı nedir? Docker terimleri nelerdir gibi sorulara yanıtlar verdik.

Üretmek ve ortaya bir ürün çıkartmak isteyenler için baş döndürücü hızda gelişen teknolojiyi biraz olsun kolaylaştırmak ve anlamlandırmak istedim. Yazdığım bu yazıları farklı teknolojilerle birleştirdiğimizde zihininizde daha oturmuş olacak.

Bir sonraki yazımda görüşmek dileğiyle..
Kolay gelsin.

Kaynaklar:
https://docs.docker.com/get-started/docker-overview/
https://docs.docker.com/manuals/
https://docs.docker.com/reference/cli/docker/
https://medium.com/batech/docker-nedir-docker-kavramlar%C4%B1-avantajlar%C4%B1-901b37742ee0
https://www.oracle.com/tr/cloud/cloud-native/container-registry/what-is-docker/
https://bb.com.tr/blog/yazilim-gelistirme/docker-nedir-dockerin-avantajlari-nelerdir
https://kerteriz.net/docker-nedir-ve-neden-kullanilir/
https://devopsdeniz.com/docker-101-temel-kavramlar-ve-uygulama/

Eğitim ve teknoloji haberlerini, ilginç ve önemli bilgileri, kendimi geliştirdiğim alanlardaki öğrendiğim tecrübelerimi blogumda paylaşıyorum. Öğrenmekten ve paylaşmaktan zevk alıyorum.İnandığım bir şey var ki istisnalar hariç, hiçbir şey imkansız değildir. Mucizeler için zaman gerekir! Bu benim yaşam felsefem.

Yorumlar 0
İlk yorumu yazmak ister misin?