Docker build önbellekleme fiziği: üç ayrı önbellek, tek dalga
Docker build önbelleğinin katman zinciri, mount önbelleği ve image store olmak üzere üç farklı mekanizmadan oluştuğunu ölçümlerle inceleyen teknik analiz.
Docker'ın önbellekleme davranışı tek bir mekanizma değil; katman zinciri, mount önbellekleri ve image store olmak üzere farklı ömür ve geçersizleşme kurallarına sahip üç ayrı sistemden oluşuyor. Bir Dockerfile değişikliği, o katmandan itibaren zincirin sonuna kadar yayılan bir 'dalga' tetikliyor ve hangi önbelleğin devreye girdiği build'in şekline göre değişiyor.
Go, Python, Rust, Node, Java ve Bazel üzerinde 18 senaryoluk bir kıyaslama, manifest-önce sıralamanın (bağımlılık dosyalarını kaynak koddan önce kopyalamak) kaynak-değişikliği build sürelerinde 3x ile 24x arası kazanç sağladığını gösteriyor; kazanç doğrudan korunan adımın maliyetiyle orantılı. Ayrıca export/import tabanlı önbellek arka uçlarının (GHA, registry gibi) mount önbelleklerini (derleyici/paket yöneticisi durumu) taşımadığı, bu yüzden bazı senaryolarda hiç önbellek kullanmamaktan bile daha yavaş sonuç verebildiği ortaya konuyor.
Mühendisler için sonuç: CI'daki tipik build bir 'source-change' senaryosudur, cold build değil. Dockerfile'ları buna göre sıralamak ve kazancın katman zincirinde mi yoksa mount önbelleklerinde mi olduğunu bilmek, doğru önbellekleme stratejisini seçmenin anahtarı.