Docker Nedir
Docker Giriş & Component
Merhabalar,
Bu yazımda aşağıdaki maddeleri tek tek ne olduklarına bakacağız.
- Docker Giriş
- Docker Tarihçesi ?
- Docker Neden Kullanmalıyız ?
- Docker Özellikleri ve Avantajları ?
- Docker Mimari ?
- Docker Kurulumu (windows ve linux) ?
- Terminoloji ?
- Docker Engine ?
- Docker Daemon ?
- Docker Machine ?
- Docker Registry ?
- Docker Hub ?
- Docker Images ?
- Docker Network ?
- Docker Volume ?
- Dockerfile ?
- Docker compose ?
- Docker Swarm ?
- Hello-World örneği örneğine yaparak yazımızı sonlandırcaz
Docker Giriş
Docker açık kaynaklı (open source) container teknolojisidir. Linux ( LXC ) üzerine kurulu bir container enginedir. Docker aynı işletim sistemi üzerinde birbirinden bağımsız ve izole container oluşturmamızı ve uygulamamızı test etmenizi sağlayan teknolojidir. Bu sayede uygulamamızı derlemesini(build), testini (testing) ve dağıtımını(deploy) gerçekleştirebiliriz. Docker tek işletim sistemi üzerinde çalıştığı için sunucu maliyetini ve disk alanında “tasarruf” etmemizi sağlar.
Docker Tarihçesi
Docker, Linux Kernel’e 2008 yılında eklenen Linux Containers (LXC) üzerine kurulu bir teknolojidir. LXC, işletim sistemi seviyesinde bir sanallaştırma (virtualization) altyapısı sunmaktadır.
Docker, 2013 yılında open-source bir proje olarak dotCloud isimli PaaS cloud hizmetleri sunan bir San Francisco firması tarafından tanıtıldı. Kurucusu Solomon Hykes Tı’ dir.
Docker 5 yıl geçmişe bakarsak ;
Neden Docker Kullanmalıyız ?
Docker, Linux çekirdeğini paylaşarak tek bir işletim sistemini üzerinde birbirinden bağımsız ve izole container oluşturmamızı sağlar. Linux ,LXC üzerinde koşar. Docker client ve Docker server yapısını kullanır. Docker client docker yüklü olduğu yeri ,Docker Server ise docker daemon bahseder. Uygulamızı production ve/veya master sunucusuna almadan önce test etmemize olanak sağlar. Uygulamaya ait kütüphaneleri ve bağımlılıkları server’a kurmadan hızlı bir şekilde test etmek için docker kullanmalıyız.
Docker’ın Özellikleri ve Avantajları
- Uygulamamızı saniyeler içinde çalıştırabiliriz.
- Kendi imajlarımızı oluşturabiliriz veya hub.docker.com da var olan image’ları kullanabiliriz.
- Uygulamamız için gerekli olan framework bağımlılıklarını kurmaya gerek yoktur. hub.docker.com sitesinde bulunan hazır image’ları veya kendi oluşturduğumuz image’ları kullanabiliriz.
- Kendi image’larımız Docker Registry sayesinde kaydedebiliriz. Büyük projelerde uygulamaya ait base image’ları kaydetmek için Docker Local Registry kullanabiliriz.
- Uygulamamızı çalışabilirliğini test edebiliriz.
- Docker Containerları yönetmek için Docker Swarm veya Kubernetes orchestration kullanabiliriz. Bu sayede uygulama dağıtımını(Deployment),ölçeklendirmeyi(Scalability) ve sistemi yönetebiliriz.
- Uygulamamızı production ve/veya master ortamı seviyesinde test edebiliriz.
- Tek işletim sistemi üzerinde çalıştığı için kaynak kullanımı verimlidir.
- İşletim sistemi bağımsızdır.
- Cloud servislerle entegre olarak çalışabilir.
Docker Mimarisi
Baştan beri Docker’ın Linux Kernel’inden destek alarak ortaya çıkan ve Linux İşletim Sistemi üzerinde çalışan bir sistem olduğunu bahsettik. Peki nasıl oluyor da Docker Linux dışında hem Windows hem de Mac OS X’te kullanılabiliyor. Docker temel de iki parçadan oluşmaktadır. Birincisi Linux Kernel’la direkt iletişim halinde olan Docker Daemon, ikincisi ise bu Daemon (Motor) ile iletişim kurmamıza olanak tanıyan Docker CLI (Command-Line Interface)’dır. Linux’ta hem Docker Daemon hem de Docker CLI doğal olarak direkt Linux üzerinde koşmaktadır. Windows ve Mac OS X’te ise Docker CLI Windows ve Mac OS X işletim sistemleri üzerinde koşmakta, Docker Daemon ise bu işletim sistemlerinde bir Hypervisor (duruma göre VMware, VirtualBox, Hyperkit, Hyper-V) yardımıyla çalıştırılan Linux üzerinde koşmaktadır.
Docker Kurulumu
Docker Windows Kurulumu
Docker Windows kurulumu için ;
hub.docker.com giriş yapıp Explore sekmesinde platforms desktop operating systems windows ,Docker Desktop for Windows’u local sistemimize indiriyoruz.
İndirdiğimiz Docker Desktop for Windows’u yönetici olarak çalıştıralım. Gelen ekranı “Ok” deyip yükleme işlemini başlatalım. Docker Desktop kullanımı best practise olarak önerilmemektedir.
Yükleme işlemi tamamlandıktan sonra alttaki görüntüyü alırsınız. ”Close” deyip kapatabilirsiniz. Yükleme işlemi başarılı şekilde gerçekleşmiştir.
Aşağıdaki ekran görüntüsünde alınan hata Windows için Linux kernel yüklememiz gerektiği söylemektedir. Belirtilen linkten indirip kurulumu tamamlayabiliriz.
Windows kurulumdan bilmemiz gereken önemli noktalar var.
Bunlar ;
- Docker Linux kerneli üzerinde çalışır. Bundan dolayı Windows üzerine sanal bir linux işletim sistemi kurar. Bu kurulum öncesi Windows’ta; Görev yöneticisi -> Performans -> cpu sekmesinde sanallaştırmanın (Virtualization) etkin olması gerekmektedir. Aşağıdaki şekilde gösterilmiştir.
- Windows da Docker arka planda çalışırken Linux işletim sistemini kontrol etmemiz için Denetim masası -> Program Kaldır -> Windows özelliklerini aç veya kapat -> Hyper-V kurulu olması gerekmektedir.
Bilgisayarınızı yeniden başlattıktan sonra aktifleşecektir. Şekil 9 ‘da gösterilmiştir.
Komut satırına docker version yazıp enter’a bastığınızda aşağıdaki gibi çıktı alıyorsanız Docker başarılı şekilde sisteminize kurulmuştur.
Burada dikkatinizi çekmek istediğim bir nokta var. Hep söylüyoruz, Docker linux kernel üzerinde çalışıyor ama farklı işletim sistemlerine destek veriyor, bunu nasıl yapıyor? İsterseniz kontrolünü yapalım.”
Windows tekrar başlattıktan sonra Hyper-V yöneticisi açıyorum. Şuan Docker Linux kernel göre çalıştığı için sanal makine boş gelmektedir. Şekilde 11 de gösterilmişltir.
Docker Windows’ a göre çalıştırdığımda Docker benim için arka tarafta Linux sanal makine oluşturmaktadır. Docker Daemon sayesinde bu sanallaştırmayı yapmaktadır.
Docker Linux Kurulumu
hub.docker.com sitesimde explore -> Docker CE -> operating system -> Linux seçip gerekli talimatları takip ederek dockerı sisteminize kurabilirsiniz.
Linux e docker kurmanın daha kolay bir yolu vardır. Bu yolu kullanarak kurulumu tamamlıycaz .İlk önce get.docker.com sitesine gidip terminale kurulum scriptleri çalıştıralım.
Terminale docker version yazdığımızda aşağıdaki gibi bir çıktı alıyorsak kurulum başarılı ile yapılmış demektir.
Not : Linux e docker kurulumda root ile yapmak best practices değildir. Kendi kullanıcımız ile kurulum yapmak daha doğrudur. Daha sonrasında kullanıcınısa root yetkisi vermek için;
sudo usermod -aG docker your_user
Docker Terminoloji:
- Docker CLI : Docker Daemon ile kullanıcın konuşmasını sağlar. Docker komutların çalıştırıldığı CLI(Command Line İnterface) dir. - -help komutu ile komutların nasıl kullanılacağı veya ne işlem yaptıklarının bilgisini alabilirsiniz. docker container -help ile aşağıdaki komutları görebiliriz.
Daha detaylı kullanım için docker container komut_ismi - -help örneğin docker container attach -help komutu kullanımına göz atalım.
- Docker Engine (Docker Daemon) : Hypervisör’ ün karşılığıdır. Container’ ların birbirinden bağımsız ve izole şekilde çalışması için gerekli ortamı sağlar. Container yaşam döngüsünü(life-cycle) işlerin çözüldüğü bölümdür.
- Docker Machine : Kendi local bilgisayarımızda ve/veya cloud ortamda docker ortamı kurmamızı sağlar. Docker machine komutları ile yönetmemizi sağlar. Docker-machine, birden fazla host’ ları oluşturmak ve yönetmek için kullanılır. Yani bir veya birden fazla sistem üzerine Docker Engine yüklemek için kullanılır.
docker-machine create web — driver virtualbox
Yukarıdaki komut ile sanal bir makine oluşturarak başlayabilirsiniz.
- Docker Registry : Docker image’ların tutulduğu ve dağıtıldığı yerdir. hub.docker.com daki var olan imajları ya da kendi oluşturduğunuz image’ları depolamasını sağlar.
- Docker Image : Uygulamamızın paketlenmiş halidir. Docker image’ dan container oluşturulur ve uygulamamızı doğru bir şekilde çalışıp çalışmadığını test edebiliriz.
- Dockerfile : Dockerfile, Docker’a temel bir image belirtmek için kullanılan metin belgesidir. Dosya ismi kesinlikle Dockerfile olmalıdır ve herhangi bir uzantısı yoktur. Dockerfile içerisinde hangi image’ın kullanılacağı, hangi dosyaları içereceği ve hangi uygulamanın hangi parametrelerle çalışacağı yazılır. Dockerfile içerisindeki her bir satır bir katmanı temsil eder.
- Docker Network : Containerların birbirleriyle iletişim kurmaları için aynı network’te olmaları gerekmektedir. Yani eğer bir container diğer bir container ile iletişim kurcak ise aynı network’te olmak zorundadır. Docker network bu amaca yöneliktir. Herhangi bir network bağlantı yapılmaz ise docker network default olarak bridge network atanır.
Docker network çeşitleri:
- Bridge Network
- Host Network
- None Network ve kendimiz oluşturduğu bir network olabilir.
- Docker Volume : Containerlar docker host üzerinde stateless olarak yani herhangi bir durum bilgisi tutmadan çalışırlar ve container bir kez silinince içindeki her şey sonsuza dek kaybolur. İşte burada silinmesini istemediğimiz container image’ları kaydetmek için docker volume kullanırız. Docker volumes tamamem docker tarafından yönetilmektedir.
- Docker Compose: Docker Compose, kompleks uygulamaların tanımlanmasını ve çalıştırılmasını sağlar. Docker Compose ile birlikte birden fazla container tanımını tek bir dosyada yapabilir, tek bir komut ile uygulamanızın ihtiyaç duyduğu tüm gereksinimleri ayağa kaldırarak uygulamayı çalıştırabilirsiniz. Docker Compose ile birden fazla container çalıştırabilir, bu containerlardan bazılarının birbirine bağımlı kalmasını isteyebiliriz. Docker compose yaml formatında hazırlanır. docker-compose.yml dosyası içerinde gerekli tanımlamalar yapılır.
- Docker Swarm: Docker Swarm, Docker platformu için konteyner orkestrasyon aracıdır. Veritabanı, uygulama sunucuları, web sunucuları gibi bileşenlerden oluşan büyük kapsama sahip uygulamalarınızı Docker Swarm ile yönetilmekte ve yük altında kolaylıkla ölçekleme yapılabilmektedir.
Docker Hello-World Örneği
Örneği Docker Desktop for Windows ile linux kernel göre yapıyoruz. ilk olarak windows cmd ekranı açıyoruz ve hub.docker.com var olan hello-world image’ını kullanıyoruz.Bunun için,
docker container run hello-world komutundan sonra Şekil 17 deki çıktıyı alıyorsanız örneğimiz doğru bir şekilde çalışmaktadır. Bu arada yapılan aşamaları anlatmak gerekirse ;
- ilk olarak docker client docker daemon ile iletişim kurdu.
- ikinci olarak bizim local bilgisayarımızda bu image olmadığı için pull ederek local bilgisayarımıza indirme işlemi yapıldı.
- üçüncü olarak image okudu ve image ın içeriği bize gösterdi.
Bu yazımızında sonu geldik. Araştırmalarım ve sektör de karşılaştığım senaryolar üzerine yazılarımı yazmaya devam edeceğim. Umarım faydalı bir yazı olmuştur. Yazımı okuduğunuz için teşekkürler.
Referanslar ;