https://www.accuwebhosting.com/blog/wp-content/uploads/2020/04/hyper-virtualization.jpg

Sanallaştırma Teknolojileri ve Docker Nedir?

1. Sanallaştırma Nedir

Birol EMEKLİ
5 min readDec 18, 2020

--

Sanallaştırma kavramı tarihte ilk defa 1950’lerde işlemcilerin daha efektif bir şekilde kullanılmasına üzerine konuşulmaya başlanmıştır. Bu tarihleri izleyen aşamalarda 1960’larda IBM sanal makine mönitörü, 1970–1990 yılları arasında donanım maaliyetlerini düşürmek için bu alandan uzaklaşılmış olsada 1990’lı yıllarda Vmware şirketi ile yeniden gündeme gelmesi ile XenSource, SWsoft, Microsoft, Oracle gibi bir çok firmanın bu alana yönelmesine neden olmuştur.

Sanallaştırma teknolojisi, bir ara katman yazılım (hypervizör) kullanarak aynı fiziksel kaynaklar üzerinde birden fazla işletim sisteminin yönetilmesine imkan sağlayan bir teknolojidir. Bu teknoloji ile birlikte fiziksel kaynakların daha verimli kullanılması sağlanmıştır.

Hypervizör, fiziksel donanım üzerinde oluşturulacak olan sanal makineler için kaynaklar oluşturulmasını ve yönetilmesini sağlayan bir yazılımdır. Bu ara katman yazılımı ile kullanıcıların direk donanımlara erişimi kısıtlanmış olur. Kullanıcıdan gelen talepleri uygun yöntem ve metodlarla donanıma iletmekle görevlidir.

2.Hipervizör Tabanlı Sanallaştırma Teknoloji

Şekil 1. Hipervizör Tabanlı Tip 1 ve Tip 2 Sanallaştırma

2.1. Tip 1 Hipervizör Tabanlı Sanallaştırma

Bu teknolojide hipervizör yazılımı direk olarak fiziksel kaynak üzerinde çalışmaktadır. Öncesinde herhangi bir işletim sistemi yüklenmesine gerek duymamaktadır. Doğrudan donanım üzerine kurulduğundan yüksek performansta çalışırlar. Örneğin VMware ESXi, Microsoft Hyper-V ve Apple Boot Camp bu katmanda çalışmaktadır.

2.2. Tip 2 Hipervizör Tabanlı Sanallaştırma

Bu tip sanallaştırma da hipervizör bir işletim sistemi üzerine uygulama gibi kurulur. Bu tip kullanımlarda fiziksel kaynaklara erişimde araya işletim sistemi katmanı girdiği için biraz daha düşük performansla çalışmakta ve genellikle test amaçlı kullanılmaktadır. Örneğin VMware Workstation, Oracle VirtualBox, VMware Workstation/Fusion/Player bu tipte kullanılan bazı hipervizörlerdir.

3. Konteyner Tabanlı Sanallaştırma Teknolojileri

İşletim sistemi çekirdeği üzerinde çalışan, temel donanımlardan ziyade işletim sistemi takliti yapan çalışma ortamıdır. Aynı işletim sistemi üzerinde aynı çekirdeği kullanan izole edilmiş sanal makinaları kapsamaktadır. Linux tabanlı geliştirilmiş bir sanallaştırma teknolojisidir. Bu teknoloji ile birlikte artık sunucu üzerine hypervisor kurup işletim sistemi kurmak yerine, sunucu üzerine tek bir işletim sistemi kurarak üzerinde direk uygulamaları çalıştırılabilir hale getirildi.

Kaynak yönetimi Linux çekirdeğindeki kontrol grupları (cgroups) ile yapılmaktadır. Bu kontrol ile konteynerlerin kaynak kullanımlar kontrol edilebilmektedir.

Endüstride en çok kullanılan sanallaştırma teknolojileri Docker, Solaris Konteynerler, OpenVZ vb. bulunmaktadır.

4. Docker

Docker; konteyner teknolojisi kullanarak uygulama geliştirmeyi, konumlandırmayı ve çalıştırmayı sağlayan açık kaynak kodlu bir sanallaştırma platformudur. Docker ile Linux, Windows, MacOSX üzerinde sanal konteynerler yaratabilirsiniz. Bu esneklik ile oluşturulan konteynerlar farklı işletim sistemi üzerinde de çalışabilmektedir.

Şekil 2. Konteyner Mimarisi

Docker sanallaştırma teknolojisi bir hipervizör içermemektedir. Bunun yerine docker engine üzerinden işletim sistemine erişmekte ve kaynak paylaşımı yapmaktadır. Bu özelliği sayesinde klasik VM’lerden daha az kaynak kullanmaktadır.

Docker tamamen RESTful API üzerine geliştirilmiş bir teknolojidir. Şekil 3’de görüleceği üzere client “docker” istemciler api ile ilk olarak docker server’ın bulunduğu sunucudaki docker servisi ile iletişime geçerler. Docker servisi gelen komutlara istinaden gerekli işlemleri yürüterek konteyner oluştururlar.

Şekil 3. Docker Sunucu İstemci Mimarisi[4]

4.1. Docker Bileşenleri

· Dockerfile: İmage’leri üretmek için önceden belirlenmiş kural ve komutları içeren özel dosya yapısıdır.

· İmage: Uygulamanızın altyapısında çalışması gereken işletim sistemi kütüphanelerinin barındığı yapıdır. İmage’ler container yaratmak için kullanılan şablonlardır diye düşuünebiliriz.

· Container: İmage’lardan türetilen çalışan veya durdurulmuş izole ortamlardır.

· DockerHub: Docker imagelerinin paylaşıldığı depodur. Birçok official image barınmaktadır.

· DockerEngine: Containerlerin izole edildiği, image içerisindeki tanımlamalardaki yapılandırmalar gibi çalışması gereken alt yapıyı oluşturur. Container’ın bütün yaşam döngüsü burada belirlenir.

· DockerCLI: Komutlar ile container yönetimini sağlayan birimdir. Aldığı komutları Docker engine iletir.

4.2. Dockerfile Örneği ve Konteyner Oluşturma

Şimdi bir Dockerfile oluşturarak kendi image’mızı oluşturalım. Dockerfile oluştururken dosyanın ismi “Dockerfile” olması gerekmektedir. Hangi ortamı kullanıyorsak Dockerfile isminde bir yeni not defteri oluşturuyoz ve içerisine giriyoruz. Aşağıdaki örnekte komutların açıklaması belirtilmiştir.

# Hangi base image kullanılacağı https://hub.docker.com üzerinden çeker

# İstenilirse bu örnekteki gibi Dockerda işletim sistemi çalıştırabilir,isterseniz direk paketlerin official imagelarını kurabilirsiniz

FROM centos:centos7.7.1908

# İmage yaratan kişi bilgisi zorunlu değil

MAINTAINER BirolEmekli

# Linux komutları kullanılabilir

RUN yum -y update && \

yum -y install wget curl nano net-tools

RUN yum -y install httpd

# Mevcut sistemdeki dosyalarınızı hangi dizine atmak istediğiniz

ADD ./index.html /var/www/html

# Container çalıştığında yürütülecek komut

ENTRYPOINT [“/usr/sbin/httpd”, “-D”, “FOREGROUND”]

# Hangi portu bağlantı için kullanacağı

EXPOSE 80

# docker build -t birolemekli/test:1.0 . #(1)

Dockerfile oluşturduktan sonra bu dosyamızı kullanarak image yaratabiliriz. Docker build -t komutu ile image isim atıyoruz ve “.” Ile bulunduğumuz dizindeki dockerfile kullanarak image oluşturmasını belirtiyoruz. Burada bulunduğunuz dizinde hangi dosyalar varsa docker image içerisine o dosyaları alacak ve boyutu artacaktır. Dockerfile boş bir dizinde oluşturmakta fayda vardır.

# docker image ls -a #(2)

Yukarıdaki 2 numaralı komut ile image oluşup oluşmadığını kontrol edebiliriz. Bu aşamadan sonra image kullanarak bir konteyner oluşturma aşamasına geçebiliriz.

# docker run — rm -it — name web-test -p 80:80 birolemekli/test:1.0 #(3)

Yukarıdaki 3 numaralı komut ile mevcut image üzerinden bir konteyner ayağa kaldırıyoruz. Burdaki bazı parametreler;

· — rm : Konteyner çalışmasını bitirdikten sonra silinmesi için verilen komut

· -it : Konteyner ile interactive bir şekilde iletişim kurmak için, shell

· -name: Çalışan konteynere verilecek isim

· -p: İmage içerisindeki portu hangi porttan yayınlayacağımız

· En sonda da hangi image kullanacağını belirtiyoruz

Tabi burada konteynerlar öldümü tekrar geri gelmezler ve içerisindeki verilerde olduğu gibi silinirler. Bu yüzden konteynerlera bir kalıcı disk alanı (volume) tanımlamamız gerekmektedir.

# docker run — rm -it — name web-test -p 80:80 -v /mnt/apache:/usr/local/apache2/htdocs/ httpd:2.4 #(4)

Yukarıdaki 4 numaralı komut ile mevcut image ile bir konteyner ayağa kaldırıyoruz ve apache dizinini kalıcı olarak /mnt/apache dizini olarak belirtiyoruz. Artık bu konteyner bu dizinden okuma işlemini gerçekleştirecektir. Bu dizini vererek tekrar konteyner oluşturduğumuzda burdaki verileri okuyacağı için veri kaybı yaşamamız olacağız. Bu veri tabanları için çok önemli bir noktadır. Zira siz konteyner içine yazdırırsanız, konteyner silindiği zaman tüm verileriniz de yok olacaktır.

4.3. Bazı Docker Örnek Komutları

· docker ps > Çalışan konteynerlerı listeler

· docker ps -a > Çalışan veya duran tüm konteylerlar gösterir

· docker stop konteynerID > Çalışan bir konteyneri durdurmak için

· docker kill konteynerID > Konteyneri zorla durdurmak için

· docker rm konteynerID > Konteyneri silmek için

· docker rm $(docker ps -aq) > Tüm konteyleri silmek için bir döngü

· docker inspect konteynerID > Konteyner hakkında detayları verir

· docker volume ls > Tüm volumeleri listelemek

· docker exec -it test /bin/bash > Test isimli konteyner terminal ekranı

Kaynaklar

[1] https://image.slidesharecdn.com/inf1503adamsformatted2v2-150401112859-conversion-gate01/95/vmworld-2014-virtualization-101-13-638.jpg?cb=1427905880

[2] http://openaccess.maltepe.edu.tr/xmlui/bitstream/handle/20.500.12415/254/538721%20%281%29.pdf?sequence=1&isAllowed=y

[3] https://networklessons.com/wp-content/uploads/2018/12/hypervisor-type-1-type-2.png

[4] https://docs.docker.com/engine/images/architecture.svg

--

--