Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Dockerfile Temelleri: FROM, RUN, COPY, WORKDIR, ENV, ARG, USER, EXPOSE, CMD ve ENTRYPOINT
Dockerfile'da dosya sistemine dokunan RUN, COPY, ADD ve WORKDIR layer üretir; ENV, ARG, USER, EXPOSE, CMD ve ENTRYPOINT yalnız image config'ine yazılır. Bookstore.Tools için ilk Dockerfile'ı yazıp docker build --check ile taslaktaki hataları yakalıyor, ENTRYPOINT ile CMD'nin nasıl birleştiğini, ARG ile verilen token'ın docker history'de göründüğünü, .dockerignore'un etkisini, EXPOSE'un port açmadığını ve apt-get cache tuzağını gerçek çıktılarla görüyoruz.
Build Cache ve BuildKit: Layer Sırası, Cache Mount, Build Secret'ları ve Bake
Build cache, bir adımın girdisi değişmedikçe onu yeniden çalıştırmaz; COPY'de girdi dosya içeriğidir, bu yüzden önce csproj'u kopyalayıp restore'u kaynak koddan ayırırsan kod değişikliği paketleri yeniden indirmez. Bookstore.Tools'ta build'i 4,6 sn'den 1,6 sn'ye indiriyor, NuGet cache mount'unu ölçüyor, private feed token'ını secret mount ile sızdırmadan veriyor, QEMU ile multi-platform build'e ve docker buildx bake'e bakıyoruz.
Eski Docker Kurulumlarını Okumak ve 2026'ya Taşımak: Legacy Builder'dan BuildKit'e, Port 80'den 8080'e, Debian'dan Ubuntu'ya, Graph Driver'dan containerd'ye
Eski bir Dockerfile'ı 2026'ya taşımak birkaç değişikliği birlikte okumaktır: legacy builder yerine BuildKit, MAINTAINER ve shell form yerine label ve exec form, .NET 8'deki port 80'den 8080'e ve root'tan app kullanıcısına geçiş, .NET 10'daki Debian'dan Ubuntu'ya geçiş, Engine 29'un containerd image store'u ve API sürümü. Bookstore'un 2021 tarihli varsayımsal Dockerfile'ını gerçek çıktılarla satır satır modernize ediyor, .NET 11 SDK'nın lokal runtime seçimini ve SOURCE_DATE_EPOCH'u deniyoruz.