Docker Genel Bileşenleri Nelerdir ? -I

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

Selamlar,

Bir önceki yazımda container sanallaştırma ve docker hakkında bilgiler vermiştim. Eğer bir önceki makalemi gözden kaçırdıysanız genel bilgilendirme açısından çok faydalı olacağı için bu link üzerinden erişip okumanızı öneriyorum. Bu yazımda docker genel bileşenleri nelerdir bunlar hakkında özet bilgiler paylaşacağım.

Şimdiden sizler için keyifli bir okuma olması dileğiyle.

Docker genel bileşenleri nelerdir?

1. Dockerfile

Kendi container image dosyanızın oluşturulması için gereken config dosyasıdır. Bu dosya üzerinde tanımlayacağız özelliklerde bir image oluşturup onun üzerinden bir container yaratabilir siniz. Aslında bunu iso dosyasının hazırlanması olarak düşünebiliriz.

Aşağıda örnek Dockerfile dosyası yer almaktadır.

FROM — Kurulacak olan işletim sistemi ver versiyonu belirtilir:20.04
PULL — Docker deponuzdaki dosyaları ekler.
RUN — Konteyner oluşturur. Yüklenecek paketler burada belirtilir.
CMD — Konteyner içinde hangi komutun çalıştırılacağını belirtir.

#vi Dockerfile
FROM node:12-alpine
RUN apk add --no-cache python2 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

Oluşturulan Dockerfile’ dan image oluşturulur.

docker build -t testimage

Oluşturulan image’ dan container oluşturulur.

docker run -dp 3000:3000 testimage

Aşağıdaki şekilde Dockerfile görselleştirilmiştir.

2. Docker image

Docker tarafından bir container oluşturulmak istenildiği zaman bu işlem bir image üzerinden ayağa kaldırılır. Container yaratılmak istenildiği zaman kullanacağı image verilmesi zorunludur. İmage tanımlaması yapılmadan container oluşturulamaz. Docker image ilk başta bir işletim sistemi yüklü bir container ayağa kaldırdığı için onu bir ubuntu iso dosyası veya Windows iso dosyası gibi düşüne bilinir.

Docker image içerisinde container kurulacak veya çalıştırılacak uygulamalar ve işletim sisteminin dosyları bulunmaktadır. Bir image içerisinde postgresql database, redis, ubuntu, centos, oracle linux, kali, mysql, elasticsearch, nginx web server, ntp server, nload, htop vb. gibi bir işletim sistemi dosyasından içinde çalışan kaynakların monitörlemesini yapan uygulamaya kadar her şey olabilir. İmage dosyaları ya docker hub üzerinden yada docker kurulu olan sunucusunuzun localindeki image dosyalarından yüklenilebilinir.

Image dosyaları genelde minimal özelliklere sahiptir. Çünkü docker vizyonundaki hedeflenen yapı micro service bir platformunun oluşturulması istenildiği için her uygulama farklı bir container yani farklı bir image paketlerinde oluşacaktır.

İndirmiş olunan bir docker image dosyası ile bir container oluşturulduğu zaman o image içerisinde ne yüklenip paketlenmiş ise o yüklü özellikleri kullanılır. Eğer daha farklı paketler yüklemek istenir ise bu mümkündür. Eğer indirmiş olunan pakette nload(interface üzerinden network trafiğinin izlenmesi için kullanılan bir tool) yüklü değil ise bunu kullanılan işletim sistemine göre gerekli (debian veya rpm)komutlar ile yüklene bilmektedir. Yükleme yaptığınız paketlerin container üzerinde kalıcı hale getirile bilmesi için commit edilmesi gerekmektedir. Aşağıdaki şekilde bir image oluşumu gösterilmektedir.

NOT: docker image üzerinde yapılan değişikliklerin kalıcı olarak saklanması ile alakalı örnekleri “Docker Image Update” isimli makalemde anlatacağım. Eğer container’ ı oluşturduğunuz image üzerinde paket yükleme veya config değişiklikleri yapıyor iseniz kesinlikle bu makalemi okumanızı öneririm.

3. Docker daemon

Docker CLI üzerinden istekler linux kernel üzerinde çalışan Docker Daemon iletilmektedir. Son kullanıcılar daemon ile doğrudan iletişime geçemezler. Daemon docker servisinin kurulu olduğu sunucu yani host üzerinde çalışmaktadır. Docker servisinin kurulması ile host üzerine daemon kurulmuş olunur .

Vmware veya Hyper-V gibi sanallaştırma teknolojisinin host üzerinde kurulması ile hypervisor bir yapı sağlanmaktadır. Hypervisor’ ün docker üzerindeki karşılığı ise docker daemon’ dır. Oluşturulan containerların birbirlerine izole bir yapıda işlem sürdürmesini sağlamaktadır. Aşağıdaki şekilde daemon yapısı gösterilmektedir.

4. Docker registry

Konteynerların oluşturmak için kullanılan image’ ların depolandığı alandır. Docker üzerinde eğer bir container oluşturmak istenildiği zaman varsayılan (default) olarak direk docker hub üzerinde o image paketini inidirip local docker listeye ekler.

Docker registry demek image deposu demektir. Eğer docker hub registry olarak kullanmak istenmez ve kendi docker registry oluşturulmak istendiği zaman kullanılmak istenilen docker image’ lar bu local docker registry sunucusuna save edilir ve kullanılmak istenildiği zaman buradan pull edilir. Docker hub üzerinde kendi image oluşturabileceğiniz gibi bunu ister herkese açık halde tutarsınız herkes kullanır isterseniz de belli kullanıcı tanımlarsınız sadece sizin o image onlar kullanabilir. Aşağıdaki şekilde bir docker public/private registry işleyişi anlatılmaktadır.

Örnek local docker registry kurulumu ve yapılandırılmasını “Docker Registry” isimli makalemde anlatacağım. Eğer kapalı network yapınız var ise veya cache’ den image yüklenmesini istiyorsanız okumanızı öneririm.

Docker genel bileşenleri içerik olarak uzun olduğu için bölüm bölüm anlatacağım. Bir sonraki makalemde “Docker Genel Bileşenleri Nelerdir02?” başlık ile kaldığım yerden devam edeceğim.

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

--

--