D P U S E C

Konteyner Teknolojisinin Gelişimi ve Docker

 

Konteyner Teknolojisi’nin Gelişimi ve Docker

Bu yazıda Konteyner Teknolojisi başta olmak üzere aşağıdaki sorulara cevap bulacağız.

 

Nedir Bu Konteyner Teknolojisi?

 

Kısaca “Konteyner teknolojisi”, uygulamaların ve hizmetlerin bir bilgisayar sistemi içinde izole edilmiş, taşınabilir ve tekrarlanabilir bir şekilde çalışmasını sağlayan bir sanallaştırma yöntemidir.
Bu yöntem günümüzde hem bulutta hem de kişisel geliştirme ortamlarında sıkça kullanılmaktadır.

Konteyner Teknolojisi’ne Neden İhtiyaç Duyduk ?

Hepimizin bildiği gibi bir bilgisayarı oluşturan bir sürü donanım öğesi bulunmaktadır. Geçmiş yıllarda insanlık donanımsal sanallaştırma ile tanışmadan önce bir programın testi için birden fazla fiziksel bilgisayara ihtiyaç duyuluyordu. Daha sonra sanallaştırma teknolojileri hayatımıza girdi ve bizi büyük bir dertten kurtardı. 2000’li yılların ortalarına gelindiğinde geleneksel sanallaştırma teknolojileri, bir ana bilgisayarda birden fazla sanal makine oluşturarak her birinin kendi işletim sistemini çalıştırmasını sağladı. Yeni bir yazılımı test ederken farklı bilgisayarlara ihtiyaç duymadan tek bir bilgisayarda sanal bir deney ortamında test edilebiliyordu. Bu yaklaşım yazılımcılara daha yüksek izolasyon ve güvenlik sağladı ancak aynı zamanda yazılımcılar bilgisayarlarında kaynak tüketimi ve performans açısından sıkıntılar çekmeye başladılar. Konteyner teknolojisi bu ihtiyaca yanıt olarak doğdu.

LXC’nin Ortaya Çıkışı

2008: LXC’nin temelleri, IBM çalışanları tarafından oluşturulan bir prototiple atıldı. Bu prototip, işletim sistemi seviyesinde izolasyon sağlama amacını taşıyordu.

2009: LXC, Linux çekirdeği içine entegre edilmeye başlandı. Bu, Linux’un kernel seviyesindeki özelliklerini kullanarak işletim sistemi seviyesinde sanallaştırmayı desteklemeye başladığı anlamına geliyordu.

2010: LXC, resmi olarak yayınlandı. Bu, LXC’nin daha geniş bir kullanıcı tabanına sahip olmasını sağladı.

LXC, Linux çekirdeği ile birlikte geliyor ve izolasyon, kaynak paylaşımı ve hızlı başlatma gibi avantajlar sunuyor. Bu teknoloji, işletim sistemi seviyesinde çalışan konteynerler oluşturmayı sağlıyor ve farklı uygulamaların birbiriyle çakışmadan çalışmasına olanak tanıyordu. Fakat kullanımı oldukça karmaşık ve zordu.

LXC konteynerizasyon ürünlerinin atası olarak kabul edilir. Docker’ın temelindeki fikirlerden biri olan “konteyner” kavramı, LXC’nin katkılarıyla ortaya çıkmış ve daha sonra Docker ve diğer konteynerleştirme teknolojileriyle geliştirilmiştir.

Docker’ın Ortaya Çıkışı

Solomon Hykes tarafından Docker’ın temelleri atıldı. Solomon, uygulamaların hızlı bir şekilde dağıtılması ve yönetilmesi gerektiği bir projede çalışırken konteyner teknolojilerini daha kullanışlı hale getirmek istedi. Bu projeyi geliştirirken Solomon Hykes, “Docker” adını verdiği bir komut satırı aracı oluşturdu. Bu araç, uygulamaları konteynerlere paketlemeyi, dağıtmayı ve çalıştırmayı sağlıyordu. 2013 yılına kadar Docker, Solomon Hykes ve ekibi tarafından geliştirilen bir açık kaynak projesiydi. 2013 yılında Solomon Hykes, Docker Inc. adlı şirketi kurdu ve bu şirketle beraber Docker teknolojisinin geliştirilmesine ve desteklenmesine odaklandı.
Docker’ın ortaya çıkması, ilerleyen yıllarda konteyner tabanlı uygulama geliştirme ve dağıtımının popülaritesini artırdı. Farklı büyüklükteki şirketler ve geliştiriciler, Docker’ın sunduğu faydalardan yararlanmak için bu teknolojiye yönelmeye başladı.

Docker Nasıl Kurulur?

Docker’ın kurulumu oldukça basittir. Fakat Docker kurulumuna geçmeden önce kafa karışıklığını önlemek amacıyla bilmemiz gereken birkaç şey var.

Docker’ın LXC’nin üzerine kurulduğunu ve LXC’nin de Linux kerneline (çekirdek) entegre olduğunu biliyoruz. Bunun anlamı Docker doğası gereği Linux üstünde çalışırken hiçbir sıkıntı çıkarmayacaktır. Peki biz Docker’i Windows ve MacOS gibi işletim sistemlerinde çalıştırmak istersek ne olur?

Öncelikle Docker’ın iki temel parçadan oluştuğunu bilmemiz gerekiyor. Bunlar Docker Daemon ve Docker CLI (Command Line Interface).
Docker CLI, komut satırı üzerinde Docker Daemon ile iletişim kurmamıza olanak sağlıyor. Docker Daemona ise Dockerın kalbi desek çok yanlış olmaz. Aslında bizim için emrettiğimiz bütün işlemleri yapan şey Docker Daemon. Ve Docker Daemon MacOS ve Windows’ta çalışmak için Linux tabanlı bir sanal makinaya ihtiyaç duyuyor. Yani kısaca siz Docker Desktop uygulamasını çalıştırdığınızda arka planda işletim sisteminiz Linux tabanlı bir sanal makine kuruyor ve bunun üstünde Docker Daemon’u çalıştırıyor.

Kurulumdan önce bilmemiz gerekenleri öğrendiğimize göre kuruluma geçelim.

https://www.docker.com/products/docker-desktop/  adresinizden işletim sistemimize uygun paketi indiriyoruz. Daha sonra aşağıdaki görselleri takip ederek kurulumu tamamlıyoruz.

dockersetup1
dockersetup2
dockersetup3
dockersetup4
dockersetup5

 

Tebrikler, Docker Desktop uygulamamızı başarıyla kurduk. Yazının buradan sonraki kısmı Windows kullanıcılarını ilgilendirmekte. Eğer Windows kullanmıyorsanız “Docker komut satırını nasıl kullanırız?” başlığına geçebilirsiniz.

Sevgili Windows kullanıcıları, gelelim size anlatacaklarıma. Sizlere WSL (Windows Subsystem for Linux) den bahsetmek istiyorum.

Nedir Bu WSL?

WSL herhangi bir sanallaştırma uygulaması kurmadan (VMware Workstation, VirtualBox vs. gibi) Linux işletim sistemlerini doğrudan Windows işletim sistemi mimarisi üzerinde çalıştırabileceğimiz Microsoft teknolojisi. Bu da demek oluyor ki sistemimize WSL kurarsak Docker Daemon’un çalışması için işletim sistemimizin ayrı bir sanal makine açmasına gerek kalmıyor. Bu da bize performans konusunda güçlü bir artış olarak geri dönüyor. Ayrıca Windows WSL olmadığı durumlarda Docker Daemon’u çalıştırmak için Hyper-V teknolojisinden yardım alıyor. İşletim sistemini sürümünüz Hyper-V’yi desteklemiyorsa bu konuda sıkıntı yaşayabilirsiniz. WSL bizi bu dertten de kurtarıyor. Söylemekte fayda var, WSL Windows 10 ve üstü sürümlerde çalışmakta yani Windows 8-7 türevlerinde kullanamıyoruz. Mantığı kavradığımıza göre WSL kurulumuna geçelim.

wsl1
wsl2

Görsellerde görüldüğü üzere WSL’i kurmak çok basit.

Docker komut satırı(CLI) ve mutlaka bilmemiz gereken terimler nedir?

Evet Docker Desktop kurulumunu başarıyla bitirdiğimize göre gelelim Docker’ı nasıl kullanacağımıza. Yazımın bu bölümünde Docker’ı kullanmamız için gereken komutlardan ve bilmemiz gereken terimlerden bahsedeceğim. Daha sonra hep beraber ilk Konteynerimizi ayağa kaldıracağız.

Bilmemiz gereken ilk terim tabi ki Konteyner. Konteynerler, Docker Daemon tarafından izole olarak çalıştırılan process(işlem)lerdir. Daha basit anlatmak gerekirse konteynerin içine bir programın çalıştırılması için gerekenleri ve çalıştıracağımız programı koyarız. Bu program, konteyner içinde izole bir şekilde diğer programlarla alakası olmadan çalışır. İçerisinde yaşamları için gerekli şartlar hazırlanmış karınca kolonilerinin yaşadığı tüpleri konteynerlere benzetebiliriz. Karıncalar dışarıyla bağlantıları olmadan yaşamlarını devam ettirebilmekte ve çalışabilmektedir.

Konteyneri öğrendiğimize göre bilmemiz gereken sıradaki terim Image. Image, Docker konteyner teknolojisi kullanılarak çalıştırılabilir bir uygulamanın, tüm çalıştırma zamanı bağımlılıklarıyla birlikte paketlenmiş halidir. Bunu daha kolay bir şekilde anlamak için örneklendirmek istiyorum. İnternetten bir dolap sipariş ettiniz ve dolabınız kargoyla evinize kadar geldi. Tabi ki dolap kurulu şekilde evimize kadar kargoyla taşınamaz. Dolabımız evimize parçalar halinde içinde bir kurulum kılavuzuyla beraber bir kolide gelecektir. İşte bu koli bizim konteynerimizi kurmamız için gereken Image’dır.

Yukarıda öğrendiğimiz terimler bu yazımızda ayağa kaldıracağımız konteyner için bilmemiz gerekenlerdi. Elbette Docker’i etkin olarak kullanmamız için volume,dockerfile,docker-compose-file……vb gibi birçok terimi bilmemiz gerekiyor ama bu yazım için gerekli olmadığından kafa karışıklığını önlemek amacıyla bunlardan bahsetmeyeceğim. Dilerseniz siz bunları araştırabilirsiniz.

Şimdi gelelim Docker’i kullanırken kullanacağımız komutlara.

“docker pull” komutu herhangi bir image’ı kullanabilmemiz için bilgisayarımıza yüklememizi sağlar. Örnek olarak Nginx Image’ını yüklemek istiyorsak komut satırına “docker pull nginx” yazmalıyız. Böylece Nginx Image’ın son sürümü bilgisayarımıza yükleriz.

“docker image” komutuyla yüklü Image’larımız ile ilgili işlemlerimizi yapabiliyoruz. Bu komut için “docker image –help” yazarak kullanım şekillerine göz atabilirsiniz.

“docker container” komutuyla konteynerler üzerindeki işlemlerimizi gerçekleştiriyoruz. “docker container –help” ile daha fazla seçeneğe ulaşabilirsiniz.

Kendi konteynerimizi nasıl ayağa kaldırırız?

Hep beraber ilk containerimizi ayağa kaldıralım. Docker’ın resmi test Image’ı olan Hello World Image’ını kullanacağız. Buradan Image detaylarına ulaşabilirsiniz.

hello1
hello2
hello3
hello4

Gördüğünüz üzere konteynerimiz başarılı bir şekilde çalıştı ardından çıktımızı loglara bastıktan sonra kendini durdurdu. Konteynerimizin durması kafanızı karıştırmasın. Docker’da konteynerler verilen işlemi bitirdiklerinde otomatik olarak kendilerini durdururlar. Dilerseniz bir örnek daha yapalım ve durumu daha iyi anlayalım.

Bu örneğimizde konteynerimize bir web sunucusu olan Nginx’i kuralım. 

nginx1
nginx2

İlk resimde 8080 portumuzdan bir Nginx konteyneri oluşturuyoruz ve konteyner kendi içinde de 80 portuyla haberleşiyor. Localhost:8080 adresinden kontrol ettiğimizde Nginx’in default açılış sayfasıyla karşılaşıyoruz. Bu örnekte ilk örnekten farklı olarak konteyner kendini durdurmadı biz durdurana kadar web sitemiz faaliyette kalmaya devam edecek çünkü yapılan iş sonlandırılmıyor.

Okuduğunuz için teşekkür ederim.

Kaynakça

https://tr.wikipedia.org/wiki/LXC

https://docs.docker.com/get-docker/

https://learn.microsoft.com/en-us/windows/wsl/install

Sosyal Medyada Paylaş