Docker Genel Bileşenleri Nelerdir? - 2

Oğuz ŞAHİN
Turk Telekom Bulut Teknolojileri
5 min readJul 5, 2022

Selamlar,

Bir önceki yazımız olan “Docker Genel Bileşenleri Nelerdir01?” isimli makalemizden kaldığımız yerden devam ediyoruz.

Yazımızda docker genel bileşenlerini 8 madddede anlatacağız. Bir önceki yazımızda 4 maddesini açıkladık. Şimdi diğer 4 maddeyi de bu yazımızda bahsediyor olacağız.

Şimdiden keyifli okumalar dilerim…

5. Docker cli

Docker komutlarının son kullanıcı tarafından çalıştırıldığı alandır. Son kullanıcı tarafından verilen komutlar docker servisi içerisinde yer alan ve linux kernel ile iletişim halinde olan docker daemon harekete geçirir ve son kullanıcının yapmak istediği işlemi sonuçlandırır. Docker CLI ile docker daemon kendi aralarında TCP haberleşmesini sağlarlar. Bu yüzden ister Linux sunucu olsun ister Windows ve Mac OS X olsun haberleşme TCP üzerinden yapıldığı için docker Linux haricinde ki yapılarda da sağlıklı bir şekilde çalışmaktadır. Tüm işlem son kullanıcının docker komut satırı üzerinden verdiği komutları Docker CLI alıp TCP üzerinden iletip oradaki daemon harekete geçirip haberleşmesinden ibarettir. Aşağıdaki şekilde Docker CLI ait işlemler gösterilmektedir.

6. Docker container(Konteyner)

Sanallaştırma platformunda hemen hemen herkes tarafından bilinen vm yani virtual machine (sanal sunucular) burada container olarak adlandırılmaktadır. Bir container oluşturulmak istenildiği zaman bir image üzerinden yaratılır. Günün sonunda bir container içerisinde işletim sistemi, uygulamalar, kullanıcı tarafından eklenen içerikler ve meta datalardan meydana gelmektedir. Bir container içerisinde bir adet image yer alır. Siz bu image içerisinde olmayan paketleri container ekleye bilirsiniz.

Ancak yaptığınız tüm işlemleri bir sonraki girişte tekrar kullanmak istiyor iseniz bir önceki konularda anlatılan şekilde docker commit edilmesi gerekmektedir. Docker image’ lar üzerinden container oluşturulmasını sağladığı için her bir container içerisinde nelerin olduğunu image’ ların üzerinden bilmektedir. Docker CLI üzerinden alınan son kullanıcı komutları TCP haberleşmesi ile Docker CLI üzerinden Docker Daemon iletilir. Docker Daeomon linux çekirdeği ile iletişim halinde olduğu için istenilen container istenilen image ile oluşturulur ve kullanılacak hale getirilerek Docker CLI iletilir. Container’ ların birbirlerinden izole bir yapıda çalışmasını sağlayan sistem Docker Daemon’ dır.

Oluşturulan container’ lara bir çok özellik eklene bilmektedir. Eğer docker servisi yüklü olan host kapatılıp yeniden başlatıldığı zaman docker servisinin otomatik çalışması ile ilgili container’ ın da otomatik çalışması isteniliyor ise bunları ister ilk container oluştururken seçilir veya daha sonra bu özellikler istenilen container eklene bilmektedir. Docker image salt okunur bir yapıya sahip olduğu için onları container üzerinden yazılabilir hale getirilir.

7. Docker volume

Container atanan depolama alanıdır. Container üzerindeki verilerin container local alanına değil de oluşturulan bir volüme alanına yada mount edilen bir volüme alanına kayıt edilmesi sayesinde veriler kalıcı olarak saklanmış olup daha sonra yeni bir container oluşturulduğu zaman o container bağlanarak verilere erişile bilinir.

Docker volüme getirmiş olduğu faydalar ve dikkat edilmesi gereken hususlar bulunmaktadır. Bunlar şunlardır;

• İsteyerek veya istenmeden container erişim kesilse bile disk alanı olarak kullanılan volüme host üzerinde hala erişilebilir bir şekilde kalmaktadır.

• Bir volüme birden fazla container eş zamanlı olarak bağlantı kurulabilinir.

• Host üzerinden volüme alanına erişip içerisindeki veriler kullanıla bilinir.

• Container arası paylaşım ve verilerin kalıcılığı sağlanmaktadır.

• Volume bir datastore olarak kullanıldığı için erişilecek kullanıcı yetkileri kontrol edilmelidir.

• Eğer container ile çalışma bittiği zaman container sonlandırmak volüme alanını silmez. Volume alanını silmek için özellikle belirtmek gerekir. Örneğin docker rm –v “container_id”

• Nasıl bir storage üzerinde volüme silinecek iken o volüme bağlı host olmaması gerekiyor ise docker volüme silineceği zamanda ona bağlı bir container olmaması gerekmektedir.

• Yönetimi, ayrımı ve kriz anında müdahalesi kolay olması için container nasıl isim verilmesi daha kullanışlı oluyor ise oluşturulacak volüme alanlarının da isimlendirilmesine dikkat edilmesi gerekmektedir (DUNDAR, 2018).

Aşağıdaki şekilde docker volume mimarisi gösterilmektdir.

Docker main process yapısı ile çalıştığı için içerisinde veri tutulması önerilmez. Bunun için container oluşturur iken harici bir alanın container mount edilmesi önerilir.

Bu şekilde mount işlemi yapıldıktan sonra o container içerisinde saklanacak dosyalar o mount edilmiş alanda saklanır. Eğer container bir sorun olsa bile veriler host üzerindeki mount edilen alanda olduğu için herhangi bir veri kaybı yaşanmayacaktır. Tekrar en son kullanılan image ile verilerin olduğu alan mount edilerek yeni bir container oluşturularak çalışmaya devam edile bilinir.

#docker run -v /data:/mnt ...

Bu şekilde “-v” tanımlama ile hostun üzerindeki “/data” klasörü container’ ın “/mnt” dizinine mount edilecektir. Contanier içersinideki çalışmalar /mnt kayıt edildiği sürece veriler host üzerindeki /data alanında depolanacaktır. Olası bir kriz anında host üzerindeki alan tekrar mount edilerek sorunsuz çalışmaya devam edilir.

Aşağıda 2 adet container oluşturulmaktadır. Sol taraftaki örnekte host üzerindeki data_volume alanı container’ ın /var/lib/postgres dizinine bağlanır. Eğer burada birim yok ise container üzerinde otomatik olarak oluşturulur. Bu şekilde container’ ın /var/lib/postgres dizinini kullanan database verilerini host üzerindeki data_volume kayıt etmiş olacaktır. Bu yapılan işlem volume mount olarak isimlendirilmektedir.

#docker run -v data_volume:/var/lib/postgres postgres

Aşağıdaki örnekte ise sağ taraftaki container’ da daha önceden oluşturulan bir alan ve aktif olarak diğer containerlar üzerinde kullanılmakta olan alanın, yeni container’ a mount edilmek istendiğindeki sürece bind mount denilmektedir. Aslında iki taraftada süreç aynıdır. İster sıfırdan oluşturun isterseniz hali hazırda kullanılan alanı mount edebilirsiniz.

#docker run -v /data/postgres:/var/lib/postgres postgres

8. Docker network

Docker ile bir container oluşturulduğu zaman yapısı gereği tüm containerler Docker Daeomon tarafından birbirlerinden izole bir şekilde oluşturulmaktadır. Aynı host üzerinde oluşturulan container’ ler birbirlerine erişim sağlayamazlar. Eğer aynı host üzerindeki container’ ler birbirleriyle iletişim kurması isteniyor ise veya farklı host üzerindeki container’ lar birbirleriyle iletişim kurulması isteniliyor ise bu ayarlamalar docker network üzerinden yapılabilmektedir.

Docker üzerinde bir network ağı oluşturulması için aşağıdaki komut kullanılır.

#docker network create “network_name”

Bir network oluşturulur iken bunun yapısı da burada “– driver” ile belirtilir. Belirtilecek olan network yapısına göre container’ lar arası iletişim, host üzerinden container erişim veya farklı host üzerindeki container’ ların erişiminin sağlanacağı yapı tanımlanır.

Bu driver yapıları şunlardır: bridge, host, overlay, macvlan ve none olarak isimlendirilir. Aşağıdaki komut ile oluşturulmak istenilen driver belirtilir.

#docker network create “network_name” — driver “network_driver”

Aşağıdaki şekilde container network modelleri gösterilmektedir.

NOT: Docker container network modellerini detaylı olarak “Container Network Modelleri” isimli makalemde anlatacağım.

Umarım sizler için faydalı ve keyifli bir içerik olmuştur.

Bir sonraki makalemde görüşmek dileğiyle…

Kolay gelsin.

Kaynakça

ŞAHİN, O. (2019). Container ve Kubernetes Bileşenlerinin İşleyişi ve Sistem Yöneticilerine Olan Faydaları. Ankara: Hoca Ahmet Yesevi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Yüksek Lisans Dönem Projesi

--

--