
Docker nedir ve nasıl çalışır?
docker istemcisi, REST API üzerinden dockerd arka plan programına komutlar gönderir.
görüntüler oluşturur ve bunlardan kapsayıcıları çalıştırır.Neden var? Docker, bir uygulamayı tüm bağımlılıklarıyla (kitaplıklar, yapılandırma, çalışma zamanı) tek bir yapı (bir görüntü) halinde paketlemenize ve bunu bir geliştirici dizüstü bilgisayarında, CI'da ve üretimde aynı şekilde çalıştırmanıza olanak tanır. Bu, klasik "makinemde çalışıyor" sorununu çözer.
Kapsayıcılar ve sanal makineler karşılaştırması. Bir VM, donanımı sanallaştırır ve konuk işletim sisteminin tamamını kendi çekirdeğiyle birlikte gönderir. Kapsayıcı, ana bilgisayarın çekirdeğini kullanan yalıtılmış bir işlemdir. Sonuç olarak, konteynerler daha hafiftir, saniyeden çok daha kısa sürede çalışmaya başlar ve daha az kaynak kullanır. Ancak konteyner hafif bir VM değildir: Ana bilgisayar çekirdeğine bağlıdır ve izolasyon sınırı bir VM'ninkinden daha zayıftır. Bir VM'nin donanım tarafından zorlanan izolasyonu vardır, oysa paylaşılan çekirdekteki bir güvenlik açığı potansiyel olarak bir konteynerden kaçabilir; bu, hız ve yoğunluk açısından bir dengedir. Ana bilgisayar, kapsayıcı türüyle eşleşmelidir: Linux kapsayıcılarının bir Linux çekirdeğine ihtiyacı vardır, Windows kapsayıcılarının bir Windows çekirdeğine ihtiyacı vardır. MacOS ve Windows'ta Docker Desktop, küçük bir Linux VM'sini (örneğin WSL2 aracılığıyla) şeffaf bir şekilde çalıştırır; dolayısıyla buradaki Linux kapsayıcıları, işletim sisteminizin çekirdeğini değil, söz konusu VM'nin çekirdeğini paylaşır.
Mimari (istemci-sunucu). Docker'ın belgelerine göre:
dockeristemcisi, kullanıcıların Docker ile etkileşimde bulunmasının birincil yoludur;docker rungibi komutlar arka plan programına gönderilir.dockerdarka plan programı, konteynerlerin oluşturulması, çalıştırılması ve dağıtılmasının "ağır yükünü üstlenir" ve görüntüler, konteynerler, ağlar ve birimler gibi nesneleri yönetir.- İstemci, bir UNIX soketi veya bir ağ arayüzü aracılığıyla bir REST API üzerinden arka plan programıyla konuşur, böylece farklı makinelerde çalışabilirler.
- Bir kayıt defteri görüntüleri saklar; varsayılan genel olan Docker Hub'dır.
Görüntüler ve kapsayıcılar. Kullanışlı bir benzetme: görüntü bir sınıfa (veya diskteki bir programa) benzer ve kapsayıcı da onun bir örneğidir (çalışan bir işlem); tek bir görüntüden birçok kapsayıcıyı başlatabilirsiniz.
- Resim, katmanlardan oluşturulmuş bir kapsayıcı oluşturma talimatlarını içeren salt okunur bir şablondur. Dockerfile ile tanımlanır; değiştirdiğinizde yalnızca değiştirilen katmanlar yeniden oluşturulur.
- konteyner bir görüntünün çalıştırılabilir bir örneğidir. Görüntünün salt okunur katmanlarının üstüne ince bir yazılabilir katman (yazma üzerine kopyalama) ekler; Kap kaldırıldığında orada yazılan her şey kaybolur; kalıcı verilerin hacimlere ihtiyaç duymasının nedeni tam olarak budur.
İzolasyon nasıl çalışır (başlangıçta). dockerd, çekirdeği doğrudan çağırmaz; konteyner yaşam döngüsü yönetimini, bir OCI çalışma zamanını çağıran containerd'e devreder; Docker'da varsayılan değer runc'tur ancak çalışma zamanı takılabilir (crun, gVisor, Kata vb.). Gerçek izolasyon Linux çekirdek özelliklerinden gelir:
- ad alanları kaynakları izole eder (man7 sayfası başına 8 tür vardır: PID, ağ, montaj, UTS, IPC, kullanıcı, grup, zaman). Bir süreç yalnızca kendi PID'lerini, kendi ağ yığınını vb. "görür".
- cgroups (kontrol grupları) kaynak kullanımını (CPU, bellek, I/O) sınırlar ve hesaba katar.
Genel takipler. Görüntü katmanları önbelleğe alınır; docker compose, çok kapsayıcılı uygulamaları çalıştırır; veriler birimler aracılığıyla varlığını sürdürür (bir kapsayıcı varsayılan olarak geçicidir); ve OCI, görüntü formatını (görüntü spesifikasyonu), çalışma zamanını (çalışma zamanı spesifikasyonu) ve kayıt defteri dağıtım protokolünü (dağıtım spesifikasyonu) standartlaştırır; bu üç spesifikasyon, ekosistemin birlikte çalışabilirliğini sağlar.
