Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Dockerfile, Docker Image, Docker Registry ve Docker Container Kavramları Nelerdir?

Merhaba,

.NET Core & Docker Yazı Dizisinin ikinci makalesinde Docker ile ilgili süreçte kaleme alacağımız makalelerde bizlere yardımcı olarak bazı kavramsal yapılar üzerine duracak ve gerekli izah ve izahatlerde bulunacağız.

Docker önceki makalemizde de incelediğimiz üzere uygulamaları işletim sistemine karşı var olan bağımlılıklarından koparıp sanallaştırılmış ortamlarda çalışabilir hale getirmeyi amaçlayan bir platformdur. Bu şekilde kompleks tarzda ve ağır mimarisel planlarla tasarlanmış uygulamaları, yüksek kullanılabilirlik(high availability) sağlayarak ve bir yandan da sıfır kesinti süresi(zero down time) ile güncellemeleri direkt olarak uygulamalara yansıtarak yayınlamakta ve tüm bunların yanında hiçbir zahmete katlanmaksızın yapılan işleri geri alabilmemizi sağlayabilen bir özelliğide bünyesinde barındırmaktadır.

Haliyle bu niteliklere sahip olan bir platformun kavramsal olarak oldukça zengin olması kadar doğal bir durum olmasa gerek. O halde gelin Docker’a dair ileride ihtiyacımız olacak olan ve bir uygulamayı Dockerize edebilmek için bilmemiz gereken Dockerfile, Docker Image ve Container kavramlarını tanıyalım.

Dockerfile, Docker Image ve Docker Container Kavramları Nelerdir?

Dockerfile

Maddenin temel yapıtaşı nasıl atom ise Docker projelerinin temel yapıtaşı Dockerfile’dır. Sözün alıntılandığı kaynak için tıklayınız.

Dockerfile, uygulamanın ana root dizininde herhangi bir uzantısı olmayan ve ismi birebir ‘Dockerfile’ şeklinde olan bir dosyadan ibarettir. İçerisinde yayınlanacak olan uygulamanın nasıl bir ortamda çalışacağına dair talimatları barındırmaktadır. Örneğin; geliştirme yapılan herhangi bir Asp.NET Core uygulamasının, hangi işletim sistemi üzerinde kaçıncı versiyonla ayağa kaldırılacağını ve hangi dll dosyalarının yüklü olması gerektiği vs. gibi talimatlar belirtilebilmektedir.

Dockerfile sayesinde verilen talimatlar neticesinde sunucu yapılandırması gibi zahmetli bir işten kurtulanmakta ve böylece geliştiriciye olan bağımlılıkta olabildiğince izole edilmiş olmaktadır. Nihayetinde, işten ayrılan bir personelin ayağa kaldırdığı bir uygulamayı nasıl ve ne şekilde gerçekleştirdiğine dair bir telaşa kapılmaksızın Dockerfile dosyası sayesinde tek bir komut ile aynı proje tekrar aynı özelliklerle ayağa kaldırılabilmekte ve böylece projenin özgürlüğünü desteklemektedir.

Docker Image

Docker build edildikten sonra Dockerfile dosyasında belirtilen talimatlara göre read only özellik gösteren static yapıda image(imaj) dosyası oluşturulur.. Dockerfile içerisinde belirtilmiş her bir satıra karşılık Docker Image içerisinde bir layer oluşur. Dolayısıyla imageler bir katman(layer) topluluğudur. Örneğin; Dockerfile içerisinde 4 satırlık talimat varsa o halde 4 katmanlı bir Docker Image oluşturulacaktır.

Docker Image’lar da Dockerfile dosyası içerisinde belirtilen talimatlara göre işletim sistemi, enviroment ve publish data verileri bulunur. Bir nevi, amaca yönelik container’ların çalışması için önceden tasarlanmış tak çalıştır mantığında işlev gören kalıplardırda diyebiliriz. Docker Image’leri ister kendimiz yaratabilir istersekte belirli firmaların sunduğu hazır Docker kalıplarını kullanabiliriz.

Peki hazır Docker kalıplarını nereden elde edebiliriz?
Bunun için Docker Registry başlığını inceleyelim.

Docker Registry

Dockerfile, Docker Image, Docker Registry ve Docker Container Kavramları Nelerdirİmajların kaydedilip dağıtılabildiği bir ortam olarak düşünebiliriz. Sol taraftaki görüntüdeki dolabı Registry gibi düşünürsek eğer her bir raftaki kutuyuda tek bir amaca hizmet eden imajlar olarak değerlendirebiliriz.

Görüldüğü üzere registry’e depolanan bir imaja çok hızlı bir şekilde erişebilir ve gerekirse üzerinde değişiklikler yapıp farklı bir versiyon olarak yeniden gönderebiliriz.

 

Hazır registry ortamını sağlayan firmalar hangileridir?
Uygulamanıza dair hazır imajlar barındıran mevcuttaki birkaç cloud registry firmasını aşağıda görebilirsiniz.

Peki neden imajları registry etmek isteriz?

  • Yapılan çalışma neticesinde elde edilen imajlarımızı cloud’da ki registry ortamına depolayarak güvence sağlayabilmek için,
  • İhtiyaca dönük sunucular arasındaki imaj transferini daha hızlı ve sağlıklı sağlayabilmek için,
  • Ayağa kaldırılacak uygulamadaki temel dosyaların, işletim sisteminin ve environment(ortam) yapılanmasının getireceği iş yükünden kaçınmak ve hazır imaj kullanarak bu tarz maliyetleri minimize etmek için

imajları registry ediyor yahut registry’dan çekip kullanıyoruz…

Docker Container

Docker Image dosyasını Dockerfile içerisindeki talimatlara göre oluşturduktan sonra uygulamanın çalıştırılabilmesi için run edilmesi gerekmektedir. Run neticesinde bir container ayağa kaldırılır ve böylece ilgili uygulama ayağa kaldırılmış olacaktır.

Container, Docker Imagelerin çalışabilen instance’larıdır.

Bir Docker Image üzerinden istenildiği kadar Container ayağa kaldırılabilir. Burada Docker Image uygulama için bir fabrika görevi görmektedir. Ayrıca Containerlar; durdurulabilir, silinebilir, tekrardan oluşturulabilirler. (Read/Write)

Docker Image ve Container Örneklendirmesi

Dockerfile, Docker Image, Docker Registry ve Docker Container Kavramları Nelerdir?
Yukarıdaki şemaya göz atarsak eğer Dockerfile dosyası içerisinde verilen talimatlar kadar Docker Image içerisinde katman oluşturulduğunu görmekteyiz. Bu imaj üzerinden ayağa kaldırılan tüm container instanceları, öncelikle imaj üzerine eklenen hem okunabilir hem yazılabilir katman üzerinden ayağa kaldırılmaktadırlar. Bu okunabilir/yazılabilir katmanın amacı uygulama içerisinde yapılan tüm işlemlerin gerçekleştirilmesi içindir. İlgili katmanın container’a bağlı olmasından dolayı container silindiğinde de yok olacağından dolayı haliyle yapılan tüm işlemler geri dönüşsüz kaybolmuş olacaktır.

Netice olarak bu yazımızda Docker platformuna dair temel yapısal kavramları tanımlama ve tanıma üzerine teorik izahatlerde bulunmuş olduk. Makalelerimiz ilerledikçe yavaş ama sindire sindire Docker’ın derinliklerine adım adım giriyor olacağız. Sükunetle takipte kalın 🙂

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

5 Cevaplar

  1. Kamil Yasin dedi ki:

    Teşekkürler

  1. 21 Mart 2020

    […] Dockerfile, Docker Image, Docker Registry ve Docker Container Kavramları Nelerdir? […]

  2. 22 Mart 2020

    […] önceki Docker’a dair temel kavramlar üzerine yazmış olduğumuz makaleden sonra artık sıra Docker platformu üzerine pratik çalışmalar yapmaya geldi diyebiliriz. […]

  3. 25 Mart 2020

    […] eğer Dockerfile dosyasının tanımlamasını buradaki makalelemizde detaylıca yapmış bulunmaktayız. Yinede bu makaleye hususi olarak bir tanım […]

  4. 01 Nisan 2020

    […] Hatırlarsanız eğer image üzerinden bir container ayağa kaldırıldığı zaman image üzerindeki katmanların üstüne bir okunabilir ve yazılabilir katman eklenmekteydi. İşte bu katman container üzerinde çalışan uygulamanın yayın esnasında ürettiği verileri içerisinde tutmakta lakin container kapatıldığında silindiğinden dolayı tüm kayıtlar geri dönüşsüz kaybolmaktadır. […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir