---
title: 'Konteyner Yaşam Döngüsü'
source: 'https://academia.sh/tr/kurslar/konteynerler/konteyner-yasam-dongusu'
course: Konteynerler
language: tr
updated: '2026-08-17T18:09:03+00:00'
license: 'CC BY-SA 4.0'
---

# Konteyner Yaşam Döngüsü

Oluşturma, çalıştırma, durdurma ve temizleme bir durum makinesi olarak kurulur; her geçişte tutulan kaynak sayılır ve durdurulmuş ama temizlenmemiş konteynerlerin bir dönem boyunca biriktirdiği katman, ağ adı ve birim ölçülür.

Önceki dersler yalıtımın ne olduğunu, neyi kaç bayta ayırdığını ve çıktının nasıl adlandırılıp
taşındığını ölçtü. Hepsi tek bir ana bakıyordu: çıktının **var olduğu** ana. Bir konteynerin
ise başladığı, koştuğu, durduğu ve ortadan kalktığı ayrı anlar vardır ve bu anlar arasında
tutulan şey her seferinde aynı değildir.

Bu ders yaşam döngüsünü bir **durum makinesi** olarak kurar. Beş durum vardır — yok,
oluşturulmuş, çalışıyor, durdurulmuş, temizlenmiş — ve dört geçiş bu durumlar arasında dolaşır.
Ölçülen şey durumların kendisi değil, her geçişten sonra **tutulmaya devam eden kaynaktır**.
Kurgudaki bölgesel ölçüm ağı bu ölçüm için elverişlidir: gecelik toplu iş her gece başlar ve
biter, servisler kusur sonrası yeniden başlatılır, ve hiçbir koşum kendiliğinden ortadan
kalkmaz.

Sorunun neden ölçüm gerektirdiği de buradan görülür. Önceki dört ders yalıtımın bedelini
çıktının **var olma** anında saydı: kaç bayt taşınıyor, kaç ölçüt ayrılıyor, kaç mertebe
başlangıç gecikmesi isteniyor. O sayıların hiçbiri zamanla çarpılmamıştı. Bir konteyner ise
tek bir nesne değil, tekrar tekrar üretilen bir nesnedir; aynı çıktı bir dönemde onlarca kez
oluşturulur ve her oluşum kendi izini bırakır. Bu dersin eklediği eksen zamandır ve eklenmesi
tek bir soruyu ölçülebilir kılar: bedel bir kez mi ödeniyor, yoksa her koşumda yeniden mi.

**KK26.** Yaşam döngüsü beş durumludur ve geçiş tablosunda yazmayan geçiş yoktur. **KK27.**
Tutulan kaynak dört kalemdir: yazılabilir katman, ağ adı, birim, süreç kaydı. **KK28.**
Yazılabilir katmanın büyümesi model değeridir; ilk koşum 340 MB, ikinci koşum 96 MB ekler.

## Dört Geçiş ve Tutulan Kaynak

```js
// olcum-agi/dongu.mjs — konteyner yasam dongusu bir durum makinesi olarak (model)
// Her gecis, tutulan kaynagi degistirir. Tutulan kaynak dort kalemdir.

const KALEM = ["katmanMB", "agAdi", "birim", "surecKaydi"];

// Gecis tablosu: [gecis, once, sonra, kalem degisimleri]
const GECIS = [
  ["olustur",  "yok",          "olusturulmus", { katmanMB: 0, agAdi: 1, birim: 1 }],
  ["calistir", "olusturulmus", "calisiyor",    { surecKaydi: 1, katmanMB: 340 }],
  ["durdur",   "calisiyor",    "durdurulmus",  { surecKaydi: -1 }],
  ["calistir", "durdurulmus",  "calisiyor",    { surecKaydi: 1, katmanMB: 96 }],
  ["durdur",   "calisiyor",    "durdurulmus",  { surecKaydi: -1 }],
  ["temizle",  "durdurulmus",  "temizlenmis",  { katmanMB: "sifirla", agAdi: -1 }],
];

let durum = "yok", durdurulmusHal = null;
const tutulan = Object.fromEntries(KALEM.map((k) => [k, 0]));
const yaz = (etiket) => console.log(etiket.padEnd(13) + durum.padEnd(15) +
  KALEM.map((k) => String(tutulan[k]).padStart(k.length)).join("   "));

console.log("gecis".padEnd(13) + "durum".padEnd(15) + KALEM.join("   "));
yaz("(baslangic)");
for (const [ad, once, sonra, delta] of GECIS) {
  if (durum !== once) throw new Error(`${ad}: ${once} bekleniyordu, ${durum} bulundu`);
  for (const [k, d] of Object.entries(delta)) tutulan[k] = d === "sifirla" ? 0 : tutulan[k] + d;
  durum = sonra;
  if (durum === "durdurulmus") durdurulmusHal = { ...tutulan };
  yaz(ad);
}

console.log("\ndurdurulmus ama temizlenmemis bir konteynerin tuttugu: " +
  KALEM.map((k) => `${k} ${durdurulmusHal[k]}`).join(", "));
console.log("durmakla dusen tek kalem surec kaydidir; diger uc kalem yerinde kalir");
console.log("temizlemeden sonra da sifirlanmayan kalem: birim " + tutulan.birim +
  " (birimin yasam dongusu konteynerinkinden ayridir)");
```

```
gecis        durum          katmanMB   agAdi   birim   surecKaydi
(baslangic)  yok                   0       0       0            0
olustur      olusturulmus          0       1       1            0
calistir     calisiyor           340       1       1            1
durdur       durdurulmus         340       1       1            0
calistir     calisiyor           436       1       1            1
durdur       durdurulmus         436       1       1            0
temizle      temizlenmis           0       0       1            0

durdurulmus ama temizlenmemis bir konteynerin tuttugu: katmanMB 436, agAdi 1, birim 1, surecKaydi 0
durmakla dusen tek kalem surec kaydidir; diger uc kalem yerinde kalir
temizlemeden sonra da sifirlanmayan kalem: birim 1 (birimin yasam dongusu konteynerinkinden ayridir)
```

Tablo iki şeyi ayırır. **Oluşturma** ile **çalıştırma** aynı adım değildir: oluşturma ağ adını
ve birimi ayırır ama hiçbir süreç başlatmaz; yazılabilir katman sıfır bayttır. Çalıştırma süreç
kaydını ekler ve katmanı büyütür — ilk koşumda 340 MB, ikinci koşumda 96 MB daha. Büyüme
kalıcıdır, çünkü yazılabilir katman koşumdan koşuma taşınır; ikinci durduruluşta tutulan 436
MB'dır.

Asıl ayrım durdurma satırındadır. **Durmakla düşen tek kalem süreç kaydıdır.** Yazılabilir
katman, ağ adı ve birim yerinde kalır. Bir konteynerin durmuş olması, bıraktığı şeylerin
serbest kaldığı anlamına gelmez — durdurma bir süreç işlemidir, kaynak işlemi değildir.
Serbest bırakan geçiş temizlemedir ve o da her şeyi bırakmaz: birim temizlemeden sonra da 1'de
kalır, çünkü birimin yaşam döngüsü konteynerinkinden ayrıdır. Kurgudaki ağda bu, gecelik işin
ara dosyalarını yazdığı birimin, işi çalıştıran konteyner silindikten sonra da diskte durması
demektir.

Oluşturulmuş ama hiç çalıştırılmamış durum da ayrı bir kalemdir ve kolay gözden kaçar: katman
sıfır bayttır, süreç kaydı sıfırdır, ama ağ adı ile birim çoktan ayrılmıştır. Bu durumdaki bir
konteyner disk açısından bedavaya yakındır, ad uzayı açısından değildir — adı tutar ve o adla
ikinci bir konteyner oluşturulamaz. Bedelin tek bir kalemle ölçülmesinin yanıltıcı olduğu yer
budur; dört kalemin dördü ayrı ayrı sayılmadıkça "boş duran konteyner bir şey tüketmiyor"
cümlesi kurulabilir ve cümle üç kalemde yanlıştır.

Durum makinesinin geçiş denetimi de bir şey söyler: tabloda yazmayan geçiş yoktur ve model
denetimi düşürür. Durdurulmuş bir konteyner yeniden çalıştırılabilir, ama temizlenmiş bir
konteyner çalıştırılamaz. Yaşam döngüsünün tek yönlü olan tek geçişi temizlemedir; ondan sonra
geri dönüş yoktur.

## Bir Dönem Boyunca Birikim

Tek bir konteynerin 436 MB tutması küçük bir sayıdır. Sayının anlamı, kaç konteynerin bu hâlde
beklediğine bağlıdır.

**KK29.** Bir dönem 30 gündür; servislerin koşum sıklıkları model girdisidir. **KK30.** Disk
512.000 MB, ağ adı havuzu 4.096 addır. **KK31.** Temizleme kuralı "son N dönemi tut"
biçimindedir; kısmi temizleme modellenmez.

```js
// olcum-agi/birikim.mjs — durdurulmus ama temizlenmemis konteynerlerin birikimi (model)
// Bir donem 30 gundur. Her kosum bir konteyner birakir: yazilabilir katman, ag adi, birim.

const DONEM_GUN = 30, DISK_MB = 512_000, AD_HAVUZU = 4_096, CIKTI_MB = 84.11;
const SERVIS = {                        // kurgu bolgesel olcum agi: siklik ve kalan katman
  gecelikIs:   { herKacGun: 1,  katmanMB: 436 },
  faturalama:  { herKacGun: 3,  katmanMB: 52 },
  toplayici:   { herKacGun: 4,  katmanMB: 26 },
  dogrulayici: { herKacGun: 6,  katmanMB: 14 },
  isEmri:      { herKacGun: 10, katmanMB: 8 },
};

console.log(`bir donem = ${DONEM_GUN} gun; temizleme yapilmazsa donem sonunda tutulan`);
console.log("servis".padEnd(14) + "kosum".padEnd(8) + "kosum basina".padEnd(14) + "donem birikimi");
let donemMB = 0, donemKosum = 0;
for (const [ad, s] of Object.entries(SERVIS)) {
  const kosum = Math.floor(DONEM_GUN / s.herKacGun);
  donemMB += kosum * s.katmanMB; donemKosum += kosum;
  console.log(ad.padEnd(14) + String(kosum).padEnd(8) + `${s.katmanMB} MB`.padEnd(14) +
    `${kosum * s.katmanMB} MB`);
}
console.log(`toplam: ${donemKosum} konteyner, ${donemMB} MB, ${donemKosum} ag adi, ` +
  `${donemKosum} birim, 0 surec kaydi`);
console.log(`donem birikimi tek bir ciktinin ${Math.round(donemMB / CIKTI_MB)} katidir ` +
  `(${CIKTI_MB} MB)`);

console.log("\ntemizleme kurali tarandi (son N donem tutulur)");
console.log("N".padEnd(6) + "katman".padEnd(13) + "ag adi".padEnd(10) + "birim".padEnd(9) +
  "diskin yuzdesi");
for (const N of [0, 1, 2, 3, 6, 12]) {
  const mb = N * donemMB, adet = N * donemKosum;
  console.log(String(N).padEnd(6) + `${mb} MB`.padEnd(13) + String(adet).padEnd(10) +
    String(adet).padEnd(9) + "%" + ((mb / DISK_MB) * 100).toFixed(1));
}

const diskDonem = DISK_MB / donemMB, adDonem = AD_HAVUZU / donemKosum;
console.log(`\nhic temizlenmezse ${DISK_MB} MB disk ${diskDonem.toFixed(1)} donemde ` +
  `(${Math.round(diskDonem * DONEM_GUN)} gun) dolar`);
console.log(`${AD_HAVUZU} adlik ag adi havuzu ${adDonem.toFixed(1)} donemde ` +
  `(${Math.round(adDonem * DONEM_GUN)} gun) tukenir`);
console.log(`once tukenen: ${diskDonem < adDonem ? "disk" : "ad havuzu"}; ` +
  `iki sinir arasindaki oran ${(adDonem / diskDonem).toFixed(1)}`);
console.log(`N=1 kurali diskin %${((donemMB / DISK_MB) * 100).toFixed(1)}'ini surekli tutar; ` +
  `N=0 kurali hicbir kosumu geri getirilemez kilar`);
```

```
bir donem = 30 gun; temizleme yapilmazsa donem sonunda tutulan
servis        kosum   kosum basina  donem birikimi
gecelikIs     30      436 MB        13080 MB
faturalama    10      52 MB         520 MB
toplayici     7       26 MB         182 MB
dogrulayici   5       14 MB         70 MB
isEmri        3       8 MB          24 MB
toplam: 55 konteyner, 13876 MB, 55 ag adi, 55 birim, 0 surec kaydi
donem birikimi tek bir ciktinin 165 katidir (84.11 MB)

temizleme kurali tarandi (son N donem tutulur)
N     katman       ag adi    birim    diskin yuzdesi
0     0 MB         0         0        %0.0
1     13876 MB     55        55       %2.7
2     27752 MB     110       110      %5.4
3     41628 MB     165       165      %8.1
6     83256 MB     330       330      %16.3
12    166512 MB    660       660      %32.5

hic temizlenmezse 512000 MB disk 36.9 donemde (1107 gun) dolar
4096 adlik ag adi havuzu 74.5 donemde (2234 gun) tukenir
once tukenen: disk; iki sinir arasindaki oran 2.0
N=1 kurali diskin %2.7'ini surekli tutar; N=0 kurali hicbir kosumu geri getirilemez kilar
```

Bir dönemde 55 konteyner geride kalır ve 13.876 MB tutar. Sayının büyüklüğü tek bir kaynaktan
gelir: gecelik iş toplamın 13.080 MB'ını, yani **%94'ünü** tek başına üretir. Sıklık ile koşum
başına bırakılan katmanın çarpımı bunu açıklar — otuz koşum ve koşum başına 436 MB. Diğer dört
servisin toplamı 796 MB'dır. Temizleme kuralı yazılırken bakılacak yerin hangisi olduğu bu
çarpımdan okunur; servis sayısı değil, sıklık ile katman büyümesinin çarpımı belirler. İş emri
servisi dönemde üç kez koşar ve 24 MB bırakır; ona uygulanacak bir kural toplamı ölçülebilir
biçimde değiştirmez — 13.876 MB'ın 24'ünü kapatır. Aynı kural gecelik işe uygulandığında ise
13.080 MB'ı, yani birikimin %94'ünü kapatır. Beş servise tek bir kural yazmak ile en çok üreten
servise ayrı bir kural yazmak arasındaki fark, bu iki sayının oranıdır.

Dönem birikimi tek bir çıktının **165 katıdır**. İlk derste ölçülen 84,11 MB'lık çıktı, bir ay
temizlenmemiş koşumların yanında küçük kalır. Yalıtım bütçesinin bu derse düşen kalemi budur:
yalıtımın bedeli yalnız çıktının boyutu değil, o çıktının **her koşumda bıraktığı izdir**. İlk
dersin sorduğu soru "fark ortamdan çıkarılırsa çıktı ne kadar büyür" idi ve yanıt 84,11 MB
olmuştu; bu ders aynı soruyu bir dönem boyunca sorar ve yanıt 13.876 MB olur. İki sayı aynı
kararın iki farklı ölçeğidir ve yalnız birincisine bakan bir hesap, ikincisini bir sürpriz
olarak bırakır.

Tarama kuralın maliyetini doğrudan verir. N=1'de disk sürekli %2,7 dolu tutulur, N=3'te %8,1,
N=12'de %32,5. Hiç temizlenmezse disk 36,9 dönemde — 1.107 günde — dolar. Ağ adı havuzu ise 74,5
dönemde tükenir; iki sınır arasındaki oran 2,0'dır, yani disk ad havuzundan iki kat önce biter.
Bu sıralama kuralın hangi kaynağa göre yazılacağını belirler: bir temizleme kuralı adları
korumak için değil, diski korumak için konur.

Kuralın diğer ucu da sayılmalıdır. N=0 diski hiç tutmaz ama koşumdan geriye hiçbir şey
bırakmaz — yazılabilir katman, kusurlu bir koşumun ardından geriye kalan tek kanıttır ve
temizlenmiş bir konteynerin katmanı geri getirilemez. Kurgudaki gecelik iş yarıda kaldığında
bakılacak yer o katmandır: kısmi fatura dosyaları, işlenmiş sayaç sayısı, son yazılan kayıt.
N=0 kuralı bu kanıtı koşum biter bitmez siler; N=12 kuralı diskin üçte birini kalıcı olarak
tutar. Arada yazılacak sayı bir tercih değil, iki ölçülmüş büyüklük arasındaki dengedir:
saklanan gün sayısı ile tutulan disk yüzdesi. Tarama tabloyu verdiği için tartışma "temizlik
yapılsın mı" olmaktan çıkar, "kaç dönemlik kanıt kaç yüzde diske değer" olur.

## Yalıtımın Delindiği Yer

Yaşam döngüsünün üç deliği vardır ve üçü de "durmuş olmak" ile "yok olmak" arasındaki farktan
gelir.

Birincisi **yazılabilir katmandır**. Durmuş bir konteynerin katmanı diskte durur ve içindeki her
şey — gecelik işin ara dosyaları, kısmi fatura çıktıları, günlükler — okunabilir hâldedir.
Önceki derste ölçülen silme işareti burada ikinci kez karşımıza çıkar: katmandan silinen bir
dosya alt katmanda kalıyordu; şimdi katmanın kendisi de konteyner durduktan sonra kalıyor.
Yalıtım koşarken çalışır, koşum bittikten sonra geride kalan bayt üzerinde çalışmaz.

İkincisi **ağ adıdır**. Durdurulmuş bir konteynerin adı ad uzayında yer tutmayı sürdürür; aynı
adla yeni bir konteyner oluşturulamaz. Bu, kurgudaki gecelik iş için doğrudan bir kusur
kaynağıdır — bir gecenin işi temizlenmeden ertesi gecenin işi aynı adla başlatılamaz.

Üçüncüsü **birimdir** ve en sessiz olanıdır: temizleme geçişi bile onu bırakmaz. Yaşam
döngüsünün dışında kalan tek kalem odur ve dört kalemin içinde tek bir geçişle sıfırlanmayan
tek kalem olduğu için, birikimi de kendi kuralıyla ölçülmek zorundadır.

Üçünün ortak nedeni de yazılmalıdır: **temizleme geçişini kendiliğinden yapan bir şey yoktur.**
Oluşturma, çalıştırma ve durdurma bir işin akışı içinde gerçekleşir — gecelik iş başlar, biter,
durur. Temizleme o akışın parçası değildir; ayrıca istenmesi gereken bir geçiştir. Yaşam
döngüsünün dört geçişinden üçü işin kendisi tarafından tetiklenir, dördüncüsü bir kural
tarafından. Kural yazılmadığında döngü dört geçişli değil, üç geçişli çalışır ve yukarıdaki
tarama tam olarak o üç geçişli hâlin bedelini sayar.

## Özet

- Yaşam döngüsü beş durumlu bir durum makinesidir; oluşturma ile çalıştırma ayrı adımlardır —
  oluşturma ağ adı ile birimi ayırır, çalıştırma süreç kaydını ekler ve katmanı büyütür.
- Durmakla düşen tek kalem süreç kaydıdır. Yazılabilir katman, ağ adı ve birim yerinde kalır;
  modelde durdurulmuş bir konteyner 436 MB, 1 ağ adı ve 1 birim tutar.
- Temizleme de her şeyi bırakmaz: birim temizlemeden sonra da durur, çünkü yaşam döngüsü
  konteynerinkinden ayrıdır. Temizleme tek yönlü olan tek geçiştir.
- Bir dönemde 55 konteyner ve 13.876 MB birikir; bunun %94'ünü tek başına gecelik iş üretir.
  Birikim tek bir çıktının 165 katıdır.
- Temizleme kuralı tarandı: N=1'de diskin %2,7'si, N=3'te %8,1'i, N=12'de %32,5'i sürekli
  tutulur. Hiç temizlenmezse disk 36,9 dönemde dolar, ad havuzu 74,5 dönemde tükenir; kural diski
korumak için yazılır, adları korumak için değil.
- Yalıtım koşarken çalışır, koşumdan sonra kalan bayt üzerinde çalışmaz: katman okunabilir
  kalır, ad yer tutar, birim hiç gitmez. Temizleme geçişini kendiliğinden yapan bir şey yoktur;
  dört geçişten yalnız üçü işin akışı içinde gerçekleşir.

## Sonraki Adım

Bu konu yalıtımın ne olduğunu ölçtü: hangi ölçütün ayrıldığını, ayrılmanın kaç megabayt ve kaç
mertebe başlangıç gecikmesi istediğini, hangi mekanizmanın hangi kuralı koyduğunu, çıktının nasıl
adlandırılıp taşındığını ve koştuktan sonra geride ne bıraktığını. Bütün bu ölçümlerin ortak bir
boşluğu var: çalıştırılan şeyin **nereden geldiği** hiç sorulmadı. Ölçülen 84,11 MB'lık çıktı,
gölgelenen katmanlar ve özet zinciri hep hazır kabul edildi — oysa o yığını biri üretti.

Sorular buradan başlar. O çıktı nasıl üretiliyor; hangi adım hangi katmanı doğuruyor? Neden tek
bir dosya değil de bir **yığın** — bir dosya olsaydı ne kaybedilirdi, yığın olduğu için ne
kazanılıyor? Katmanların sırası kim tarafından ve neye göre belirleniyor; sıra değişince
zincirin yeniden hesaplanan bölümü ne kadar büyüyor? Sonraki konu çıktının üretimini ele alır ve
ilk sorusu şudur: bir çıktının katmanlara ayrılmasının ölçülebilir karşılığı nedir?
