Docker tarzı containerization programlarının hayatımızı kolaylaştırdığı bir gerçek. Peki bunlar nasıl çalışır? Öncelikle Image, Container nedir bunlardan bahsetmek istiyorum.
Temel iki kavram (Image ve Container)
Image
Image, kodlarınızın veya dosyalarınızın saklandığı depolanıp bir araya getirildiği haldir. Image içinde olan dosyalar çalıştırılmaz, sadece bir şablon görevi görürler. Herhangi br yönetim, çalıştırma işlemi yapılmaz.
Container
Container, Image ile depolanmış dosyaların bir sanal oturum hale getirilmiş durumudur. Dosyalar container içerisinde çalıştırılır. Ağ bağlantısı işlemleri de aynı şekilde container içerisinde olur.
Container ve Image arasındaki fark
Image bölümünde işlem yapamazsınız ama container üzerinde işlem yaparsınız. Image üzerinde port yönlendirme, ağ işlemleri yapılmaz.
Containerization
Containerization, sanal bilgisayarların kolayca yönetimini sağlayan kavrama verilen isimdir. Normalde VPS gibi teknolojiler kullanılarak sunucunun içinde açılan sanal bilgisayarlar ile yönetim yapılıyordu. Ancak bu pek mantıklı değildi. Çünkü gereksinimleri statik şekilde ayarlamak, yönetimin zorluğu gibi çeşit çeşit sorunlarla beraber geliyordu. Şimdi ise container mantığı var. Container mantığı sayesinde her program bir container şeklinde saklanıyor ve bunları istediğimiz zaman kullanabiliyoruz.
Nasıl çalışır
Containerization, Docker’a ait ve kendilerinin yapmış olduğu bir yapı değil. Linux çekirdiğinin kendisinde olan ve bu sayede kontrol edilebilen bir yapı. 3 Temel API bulunmakta.
API nedir
Bir programın başka programdan oluşturulan verileri yönetmek ve kullanmak için yapılan sistemin genel adına denir.
LXC
En temel API, linux container standart kütüphanesidir ve container’in çalışmasını sağlar.
Namespace API
Namespace API, containerlerin yönetimini sağlar. Dosya sistemi, IP Yapılandırılmaları bu sayede minimum kaynak ve yükle container oluşturulur.
Control Group (cgroup)
Linux kaynaklarını sınırlayan, yönetimini yapabildiğimiz sistemdir. Docker gibi programlar cgroup sayesinde kaynakları az kullanarak sunucu yükünü hafifletmeyi amaçlar.
Union File System (UnionFS)
Dosya sistemini yönetmeyi, containerler arasında dosyaların aktarımını sağlar. Volume yapısının temelinde bu vardır.
Docker gibi container araçları bu API’ları kullanarak container yönetimi yapar ve ardından yönetimi de yine API aracılığı ile yapar.
Container yönetim araçları
Bu bölümde popüler bir container yönetim programı olan “Docker” programı üzerinde durarak sistemin nasıl işlediğini anlayacağız.
Network
Docker, kendine özel bir ağ yapısında çalışır. Ağın içeriği B Seviyesinde ip adresleri vererek sanal ağ oluşur. containerler sürücüleri kullanarak iletişim sağlarlar. Bu ağ sürücüleri temelde 3 adettir. Kendiniz daha fazla yapabilirsiniz. Linux Namespace API sayesinde network oluşturulur ve ip işlemleri için linux iptables özelliğini kullanır.
Bridge
Docker, default olarak bridge kullanır. Amacı ise diğer containerler arasında bağlantı kurabilmek. Genellikle 3 4 yapıyı aynı anda kullanmak istediğimizde bunu yaparız.
Host
Bilgisayar ağına doğrudan bağlanır. Containerler bu şekilde bağlanırsa her container birbirine erişebilir. Port çakışmaları olabileceğinden her zaman bunu kullanmak doğru olmaz.
Overlay
Overlay, host yapısını birleştirmek amaçlı kullanılır. 2 ayrı uzak bilgisayar arasında bağlantı sağlayarak containerler diğer sunuculardan bile yönetilebilir.
MacVLAN
MAC adresi atamanızı sağlar. Bu sayede gerçek ağınızda yönetim yapabilir ve router ile yönetim yapabilirsiniz.
None
Herhangi bir hizmet kullanılmıyor. Genellikle özel durumlarda ihtiyaç duyulur.
Volume
Volume, container ile host arasında bir symlink (Sembolik kısayol) yaratır. Bu sayede dosyalar arasında paylaşım mümkün olur.
Port System
Namespace API kullanarak port sistemine stack ekler. Iptables kullanarak port bilgilerini linux sistemine kaydeder.
Layer system
Docker ve Buildah Image işlemlerini basitleştirmek ve tekrarlı adımları önlemek için layer mantığı kullanılır. Layer kullanılırken her bir satır koda yeni bir imaj oluşturulur ve bu imajlar bir önceki imajdan devam ederek çalıştırılır. Eğer satır değişirse değişen satırların hepsi tekrardan build alınır.
Sonuç
Containerization, yönetim için vazgeçilmezdir ve devops geliştirme sürecinde oldukça fazla kullanılır. Sonraki container ile alakalı yazımda docker komutlarından bahsedeceğim
[…] yönetmeyi amaçlayan araçtır. Go dili ile yazılmıştır. Nasıl çalıştığının detayına buradaki yazımdan […]