DOCKER NEDİR VE NASIL KURULUR

tarafından
1255
DOCKER NEDİR VE NASIL KURULUR

Docker Linux Container(LXC) üzerine kurulmuş bir teknolojidir. LXC linux işletim sistemi üzerinde çalışan ve birbirinden izole halde bulunan yapılardır.İlk başlarda docker python scripti olarak LXC üzerinde çalışmaya başlamıştır. Sonraları LXC yi tamamen içine alarak LXC özelliklerini kullanarak , basite indirgeyerek ve yenilikler ekleyerek kullanıma sunulmuştur. Docker containerları sade yapılardadır. Birbirinden yalıtılmış ve güvenli halde uygulamalar çalıştırılır. Docker host işletim sistemi üzerinde çalışır. Containerlar docker engine üzerinde çalışır.
HAFİF BİLGİ:  Docker işletim sistemini sanallaştırır. Hypervisor donanımı sanallaştırır.

Aşağıdaki görselde docker mimarisi gözlemlenmektedir.

Docker Mimarisi
Liman İşleri Mimari Şeması
Docker Mimarisi
Docker Motor Bileşenleri Akışı
Docker Mimarisi

Client tarafından Docker cli komut setine göre istekler alınır. Alınan istekler rest api aracılığı ile docker daemon tarafına iletilir. İmage pull edilmesi gerekiyorsa ilgili registry tanımlamasına göre image dosyası alınır. Eğer image lokalde var ise var olan image kullanılır. İmage pull edildikten sonra contrainer oluşturulur ve ayağa kaldırılır.

Docker Engine: Docker daemon, rest api ve docker cli üzerinden oluşur.
Docker Daemon: Linux kernel ile iletişim halindedir. Container’ların birbirleri ile yalıtılmış bir şekilde oluşmasını sağlar. Ayrıca container’ların  durumu, dosya sistemi ram ve cpu gibi sınırlamaları işlemlerin yapıldığı yerdir.
Rest Api:  Docker CLI ile docker daemon’un konuşması için gerekli arabirimleri sağlar.
Docker CLI: Kullanıcıların docker daemon ile konuşmasını sağlamak için gerekli komut setini sağlar. Komutlarla container oluşturma, silme, kaynak belirleme vb. diğer komutları içerir.
Docker Registry: Containerlar image dosyalarından oluşur. Bu dosyalar docker registry üzerinde tutulur. Docker hub üzerinde topluluğun ürettiği image dosyaları yer alır. Docker varsayılan olarak docker hub üzerinden image dosyalarını arar. Dilersek başka bir yeride gösterilebiliriz. Ayrıca docker hub üzerine kendi oluşturduğumuz image dosyalarınıda gönderebiliriz.
Container: İmage dosyaları üzerinden oluşturulmuş uygulamaların olduğu yapılardır ve birbirinden izole olarak çalışır.
İmage: Çalıştırılacak uygulamaların gereksinim duyduğu yapılar ile sıkıştırılarak oluşturulmuş yapılardır. Aşağıda gerekli açıklamalar yapılmıştır.

Docker Container yapısı image bazlıdır. İmage nedir diye soracak olursak; Bir uygulamanın çalışması için gerek duyduğu kütüphanelerin, config dosyalarının, değişkenlerin vb.  gereksinimlerin bir araya getirilip sıkıştırılarak oluşturulan dosyalardır. İmage dosyaları çeşitli katmanlardan oluşmuştur. En alt katmanda  base alınan image, bir üst katmanda ilgili uygulama ve gereksinimler , bir sonraki katmanda ise gerekli config düzenlemelerinin yapıldığı katman vardır. İmage dosyası üzerinden container ayağa kaldırılmaya çalışıldığın da container yalıtılmış bir şekilde oluşturulur. Bu sayede uygulama makine özelliklerine bağlı kalmadan başka bir sunucu üzerinde ilgili container engine’nin(örn. Docker) üzerinde kullanılabilir.  Container teknolojisi olmadan uygulamayı başka bir linux makine üzerinde kullanacak olsaydık makine özelliklerini uygulama için ayarlamamız gerekecekti. İlgili containerler en sade şekliyle oluşturulur. Aşağıdaki görselde image katmanları yer almaktadır.
Bu kısım ile ilgili bilgileri vakit buldukça yazmaya devam edeceğim.

İmage Katmanları

İmage dosyası üzerinden container oluşturulduktan sonra geçici bir katman oluşur ve bu katman üzerinde container içerisinde yapılacak değişiklikler yer alır. Bu değişiklikler container çalıştığı süre boyunca tutulur. Container kapatılıp açılınca değişiklikler silinecektir.  Geçici katmanın altındaki bulunan katmanlar silinmeyecektir, ayrıca bu katmanlar read-only olarak tutulmaktadır.

İmage Üzerindeki Geçici Katman

LINUX ÜZERİNE DOCKER KURULUMU

Aşağıdaki analtımda Linux Rhel 7.6 üzerine docker kurulumu yapılacaktır. Kurulumda gereksinimlerin yüklenmesi için Rhel 7.6 dvd iso dosyası mount edilecektir. Eğer gerekli şekilde redhat repo tanımlaması yapılmış ise cd mount etme işlemine gerek yoktur. Burada sanal makinalar virtual box üzerine kurulu olduğu için cd’yi  tanıtma işlemi bu duruma göre yapılacaktır. 

GEREKLİ REPO TANIMLAMALARI VE CD MOUNT EDİLMESİ

Kuruluma başlamadan önce eğer eski versiyonlar yüklü ise aşağıdaki komut ile silinmesi sağlanır. Aşağıdaki kurulum sisteminizde işletim sistemine ait repoların tanımlı olduğu varsayılarak yapılmıştır.

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

Aşağıdaki repo ekleme komutunun çalıştırılabilmesi için “yum-utils” yüklemesinin yapılmış olması gerekmektedir.

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Yukarıdaki komut ile docker ile ilgili repo dosyası “https://download.docker.com/linux/centos/docker-ce.repo” adresinden repo listesine eklenir. İlgili komutlar ile kurulum başlatılır. İsteğe bağlı olarak aşağıdaki adımlar ile ilgli repoları aktif edebilirsiniz.

yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-nightly
yum install docker-ce docker-ce-cli containerd.io

Yukarıdaki komuttan sonra docker için gereksinim isteyecektir(Duruma göre). container-selinux >= 2:2.74
ilgili rpm dosya indirilerek makine üzerinde /opt dizini altına atılır. Dilerseniz başka bir dizinede atabilirsiniz. İlgili eklentiyi kurduktan sonra yukarıdaki komutu tekrar çalıştırmanız gerekecektir.
İndirilecek dosya rhel 7.6 için aşağıdaki adresi kullanabilirsiniz: http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.107-1.el7_6.noarch.rpm

yum install /opt/container-selinux-2.107-1.el7_6.noarch.rpm

Gelen adımlarda  “y” seçilerek kurulum yapılır.
Kurulum yapıldıktan sonra “yum install docker-ce” adımı tekrarlanır ve docker kurulumu tamamlanır. Daha sonra docker servisi oluşturulur, başlatılır ve durumu kontrol edilir.

systemctl enable docker
systemctl start docker
systemctl status docker

DOCKER ÜZERİNDE NGİNX CONTAINER’ININ OLUŞTURULMASI

Aşağıda basit bir şekilde docker üzerinde nginx web server uygulamasının container olarak ayağa kaldırılması gösterilecektir.

docker run -d --name nginx-deneme -p 8081:80 nginx

Yukarıdaki docker-cli komut setinde docker run komutu ile container oluşturma işlemi başlatılmıştır. ‘-d’ parametresini container başlatıldığında içerisine girilmeden arka planda çalışması sağlanır. Eğer parametre kullanılmasaydı container başlatılınca içerisinde olurduk ve container içerisinden çıktığımız zaman container kapanırdı. ‘–name’ parametresinde container ismi belirtilmiştir. ‘-p’ kısmında  local makineden 8081 portunun dinleneceğini ve container içerisinde 80 portuna yönlendirildiği belirtilmektedir.  ‘nginx’ parametresi ise imagenin ismini belirtir. İlgili image  indirilirken katman katman indirildiği gözlemlenebilir. Yukarıda konu anlatımın da  anlatıldığı üzere aşağıdaki görselde katmanların indirildiği gözlemlenecektir.

Docker Container Oluşturulması
Docker Container Oluşturulması
Docker Container Oluşturulması

Aşağıdaki komut ile oluşturulan docker üzerinde oluşturulmuş container listesi gözlemlenebilir.

docker container ls
Docker Container Listelenmesi

Aşağıdaki komut ile sunucumuzda dinelenen portlar arasında 8081 portunu docker-proxy’nin dinlediği gözlemlenir. Sunucu ip adresi ile ilgili porta gittiğimizde ilgili container içerisinde çalışan nginx web server uygulamasının web sayfası ile karşılaşırız.

netstat -tulpn
curl <ip adresi>:8081

Aşağıdaki komut ile ilgili container içerisine gidebiliriz. İlk olarak containerlar listelenir ve id bilgisi alınır. Daha sonra aşağıdaki komut üzerinde ilgili kısıma yazılır.

 docker container ls
docker exec -it 262f21cf7185 bash

Vakit buldukça yazmaya devam edeceğim.