Container Nedir?
Containerları diğer processlerden ayrı olarak bir process grubu olarak düşünebiliriz. Bu konteynerlar kendi process ID’lerine, mem/CPU limitlerine, network’lerine, namespace’lerine ve dosya sistemlerine sahiptirler.
Containerlar da aslında Sanal Makineler (Virtual Machine) gibi bir sanallaştırma (virtualization) türüdür. Containerlarda sanallaştırma Kernel sayesinde yapılır ve Sanal Makinelerin aksine birden çok container tek bir makinenin Kernel’i üzerinde yürütülür. Sanal Makinelerde ise her SM (VM) kendi Kernel’ine sahiptir. Sanal Makinelerle kıyasladığımız zaman Containerlar oldukça hızlıdırlar. Sanal Makineleri çalıştırmak dakikalar sürerken bu süre Konteynerlarda milisaniyelerle ölçülür. Ayrıca Sanal Makinelerden daha az yer kaplarlar. Fakat izolasyon bakımından Sanal Makinelere göre zayıftırlar çünkü tek bir Kernel üzerinden yürütülürler.
Docker Nedir?
Docker, yazılımları kitaplıklar, sistem araçları, kod ve çalışma zamanı dahil olmak üzere yazılımların çalışması için gerekli her şeyi içeren containerlar halinde paketleyen bir container platformudur ve Linux Containers (LXC) üzerine kurulu bir teknolojidir. Bulut yazılım veya Blockchain teknolojisinde yeri oldukça önemlidir.
Docker Client-Server modeli ile çalışır. Client Docker host’u ile konuşarak program ile ilgili “build”, “pull”, “run” gibi talimatları (instructions) bildirir. Host RESTful API aracılığıyla client ile konuşur. Registry ise bir Docker image kütüphanesidir.
Bu noktada sizlere küçük bir Docker sözlüğüne ihtiyacımız olacak sanırım:
Image çalıştırmak istediğimiz programların paketlenmiş halleridir. Her image layer’lardan oluşur ve her image’ın bir base layer’ı vardır. Her yeni yaratılan container için image üzerine bir layer eklenir.
Popüler image’lar için: Explore - Docker Hub
Image’lar Docker Registry kütüphanesinden indirilir.
Containerlar ise image’ların çalışabilen bir örneğidir.
Dockerfile ise image yaratmak için instructionlar içeren bir dosyadır.
Dockerfile’daki bilgiler Docker Engine tarafından işlenir ve image yaratılır.
Volumes ise data directory’sidir. Data volume sunucu ile
/var/lib/docker/volumes directory’sinde paylaşılır.
Neden Docker ?
Docker uygulamalar arası dağıtım yapmayı, hataları belirlemeyi ve bu hataları düzeltmek için geri almayı kolaylaştırır.
Bir yerde build edilip her yerde çalıştırılabilir.
Her container izole olduğundan birden fazla uygulamanın aynı veya benzer versiyonu aynı anda yürütülebilir.
Docker daha hafif olduğundan bir sunucuda daha fazla kod çalıştırabilirsiniz ve bu tasarruf etmenizi sağlar.
Kolay ölçeklendirilebilir çünkü uygulama halihazırda paketli ve yüklenmiştir. Sadece çalıştırmak yeterlidir.
Amazon verilerine göre Docker uygulama geliştirme sürecini 7 katına kadar hızlandırabilir.
Kurulum ve Komutlar
Öncelikle Docker kurulumu için: https://docs.docker.com/get-docker/
create: Docker imagelarını bir container olarak çalıştırmamızı sağlar.
ps: Çalışan containerları listeler. -a parametresini eklersiniz, çalışan ve çalışmayan tüm containerlar listelenecektir.
start: Oluşturulmuş olan containerları başlatır.
attach: Terminalinizi standart giriş/çıkış’ını (I/O) containerlara bağlar.
build: Dockerfile dosyasını alarak image haline getirir.
images: Makineniz içerisinde çalıştırılabilir Docker imagelarını gösterir.
run: Containerı çalıştırır ve belirtilirse container içinde komut çalıştırır.
rmi: Bir veya birden fazla Docker image ını silmek için kullanılır.
rm: Bir veya birden fazla containerı silmek için kullanılır.
kill: Bir veya birden fazla çalışan containerı durdurmak için kullanılır.
ps: Çalışan containerları listelemek için kullanılır.
tag: Oluşturulan imagelara tekrar ulaşabilmek için etiketleme yapar. (Versiyonlama için kullanılabilir)
login: Docker Registery (Hub)’a bağlanmak için gerekli olan doğrulamayı yapar.