dev-tools
Sözlük ↗Konteynerleştirme (Containerization)
Konteynerleştirme, bir uygulamayı çalışması için ihtiyaç duyduğu her şeyle — kod, çalışma zamanı, sistem kütüphaneleri, yapılandırma — birlikte, konteyner adı verilen tek, taşınabilir bir birime paketleme yöntemidir; bu birim daha sonra bir geliştiricinin dizüstü bilgisayarında, bir CI sunucusunda veya bir üretim kümesinde olsun aynı şekilde çalışır. Bu, klasik "benim makinemde çalışıyor" sorununu çözer: bir üretim sunucusunun bir geliştiricinin dizüstü bilgisayarıyla tam olarak aynı Python sürümüne, sistem kütüphanelerine ve ortam değişkenlerine sahip olmasını ummak yerine, konteyner tüm ortamını beraberinde taşır. Docker, 2013'ten itibaren modern konteyner biçimini ve araçlarını popülerleştirdi ve konteynerler artık çoğu bulut-yerel uygulama için standart dağıtım birimidir; tipik olarak ölçekte Kubernetes tarafından orkestre edilir. AI/SaaS geliştiricileri için önemi: konteynerler dağıtımları tekrarlanabilir ve dev/staging/üretim genelinde ortamları tutarlı hale getirir; bu, ortam kaymasının neden olduğu "testte çalıştı ama üretimde bozuldu" hatalarının tüm bir kategorisini ortadan kaldırır. Ayrıca yatay ölçeklemeyi basitleştirirler — bir yük dengeleyicinin arkasında bir konteynerin 50 özdeş kopyasını başlatmak, iyi çözülmüş, otomatikleştirilebilir bir sorundur — ve bağımlılıkları izole ederler, böylece aynı makinedeki farklı hizmetler birbirini etkilemeden çakışan kütüphane sürümlerini kullanabilir. Nasıl çalışır: konteynerler, ayrı bir işletim sistemi çekirdeği önyükleyen tam bir sanal makinenin ek yükü olmadan, bir işlemin dosya sistemini, ağını ve kaynak kullanımını ana bilgisayardan izole etmek için OS düzeyinde sanallaştırma (öncelikle Linux ad alanları ve cgroup'lar) kullanır. Bir konteyner görüntüsü, bir Dockerfile'dan (bir derleme talimatları metin dosyası) katmanlar halinde oluşturulur ve dağıtılan eserin test edilenle bayt bayt aynı olduğunu garanti eden aynı değişmez görüntü her yerde çalışır. Uygulamalı örnek: bir ekibin Node.js API'sinin, temel bir `node:20-slim` görüntüsünden başlayan, `package.json`'ı kopyalayan, tam bağımlılık sürümlerini kurmak için `npm ci` çalıştıran, uygulama kodunu kopyalayan ve `CMD ["node", "server.js"]` ayarlayan bir `Dockerfile`'ı var. `docker build -t myapp:v1.4 .` çalıştırmak, tam Node sürümünü, tam npm paketlerini ve uygulama kodunu içeren tek bir görüntü üretir. Aynı görüntü bir kayıt defterine gönderilir ve bir geliştiricinin dizüstü bilgisayarında, CI test aşamasında ve üretimde `docker run -p 3000:3000 myapp:v1.4` ile aynı şekilde çalıştırılır — eksik bir sistem kütüphanesinin veya yanlış bir Node sürümünün ortamlar arasında bir tutarsızlığa neden olma olasılığını ortadan kaldırır. Bir hata yalnızca "üretimde" yeniden üretilirse, ekip, hiçbir yerde belgelenmemiş olabilecek ortam farklarını tahmin etmeye çalışmak yerine, tam olarak aynı üretim görüntüsünü çekip yerel olarak çalıştırarak hata ayıklayabilir.
İlgili terimler