Ana Sayfa

BuildKit: Docker'ın Gizli Gücü ve Çok Yönlü Yapı Aracı

1 dk okuma

BuildKit, çoğu kullanıcının farkında olmadan her gün etkileşimde bulunduğu, Docker'ın arkasındaki güçlü yapı motorudur. docker build komutunu çalıştırdığınızda devreye giren BuildKit, sadece Dockerfile'ları derleyen bir araçtan çok daha fazlasıdır; genel amaçlı ve takılabilir bir yapı framework'üdür. OCI imajları üretmenin yanı sıra, tarball'lar, yerel dizinler, APK ve RPM paketleri gibi dosya sistemi operasyonlarının yönlendirilmiş bir döngüsel grafiği (DAG) olarak tanımlanabilen her türlü çıktıyı üretebilir. Dockerfile'lar BuildKit için yalnızca bir ön uçtur; kendi özel yapı tanımlarınızı oluşturup kullanabilirsiniz.

BuildKit'in mimarisi üç temel kavram üzerine kuruludur. Kalbinde, dosya sistemi operasyonlarının bir DAG'ını ikili bir protokol (protobuf) olarak tanımlayan LLB (Low-Level Build definition) bulunur. LLB, içerik adreslenebilir olduğundan, aynı operasyonlar aynı hash'leri üreterek agresif önbellekleme sağlar. Ön uçlar (frontends), BuildKit'in yapı tanımınızı (Dockerfile, YAML, JSON veya özel bir DSL) LLB'ye dönüştürmek için çalıştırdığı container imajlarıdır. Bu, yapı dilinin BuildKit'e sabitlenmediği, aksine takılabilir bir katman olduğu anlamına gelir. # syntax= yönergesi, hangi ön uç imajının kullanılacağını belirler.

Çözücü (solver), LLB grafiğini alır ve yürütür. DAG'daki her bir düğüm içerik adreslenebilir olduğundan, BuildKit aynı girdilerle daha önce oluşturulmuş bir adımı tamamen atlar. Bu, BuildKit'i hızlı yapar; eski Docker derleyicisinin katmanları doğrusal olarak önbelleklemesinin aksine, BuildKit tüm grafik boyunca operasyon düzeyinde önbellekleme yapar ve bağımsız dalları paralel olarak yürütebilir. Önbellek yerel, imaj içine gömülü (inline) veya uzak (registry) olabilir, bu da BuildKit derlemelerini tekrarlanabilir ve CI ortamlarında paylaşılabilir kılar. --output bayrağı ile BuildKit'in çıktıyı bir imaj olarak bir registry'ye itmesini veya yerel bir dizine dökmesini sağlayabilirsiniz.

İçgörü

BuildKit, Docker'ın arkasındaki gizli gücü temsil ederek, sadece Docker imajları oluşturmanın ötesinde, her türlü yapı sürecini hızlandıran, esnek ve genişletilebilir bir framework sunar.

Kaynak