{"id":36645,"date":"2025-12-21T03:00:43","date_gmt":"2025-12-21T00:00:43","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/"},"modified":"2025-12-21T03:00:43","modified_gmt":"2025-12-21T00:00:43","slug":"kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/","title":{"rendered":"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri"},"content":{"rendered":"<h2>K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz bulut tabanl\u0131 ve mikroservis mimarilerinde konteynerler, uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131 ve \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 i\u00e7in vazge\u00e7ilmez hale geldi. Ancak, \u00e7o\u011fu zaman g\u00f6z ard\u0131 edilen bir ger\u00e7ek var: B\u00fcy\u00fck konteyner imajlar\u0131, da\u011f\u0131t\u0131m s\u00fcrelerini uzat\u0131r, depolama maliyetlerini art\u0131r\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00e7o\u011faltabilir. \u00d6zellikle yapay zeka (AI) modelleri ve Java tabanl\u0131 uygulamalar, do\u011falar\u0131 gere\u011fi b\u00fcy\u00fck ba\u011f\u0131ml\u0131l\u0131klara sahip olabilir ve bu da imaj boyutlar\u0131n\u0131n kontrol d\u0131\u015f\u0131na \u00e7\u0131kmas\u0131na neden olabilir. Bu makalede, AI ve Java uygulamalar\u0131 i\u00e7in konteyner imaj boyutlar\u0131n\u0131 y\u00fczlerce megabayt azaltmaya y\u00f6nelik pratik teknikleri ve en iyi uygulamalar\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>Neden K\u00fc\u00e7\u00fck \u0130majlar \u00d6nemli?<\/h3>\n<p>Konteyner imaj boyutlar\u0131n\u0131 optimize etmek, sadece estetik bir kayg\u0131 de\u011fil, ayn\u0131 zamanda operasyonel verimlilik ve maliyet a\u00e7\u0131s\u0131ndan kritik faydalar sunar.<\/p>\n<h4>H\u0131z ve Performans<\/h4>\n<ul>\n<li><strong>Daha H\u0131zl\u0131 \u0130ndirme:<\/strong> K\u00fc\u00e7\u00fck imajlar, konteyner kay\u0131t defterlerinden (Docker Hub, ECR, GCR vb.) daha h\u0131zl\u0131 \u00e7ekilir, bu da da\u011f\u0131t\u0131m s\u00fcrelerini ve \u00f6l\u00e7eklendirme h\u0131z\u0131n\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>Daha H\u0131zl\u0131 Ba\u015flatma:<\/strong> Daha az veri y\u00fcklenmesi gerekti\u011fi i\u00e7in konteynerler daha \u00e7abuk ba\u015flat\u0131l\u0131r. Bu, \u00f6zellikle oto-\u00f6l\u00e7eklendirme senaryolar\u0131nda veya hata durumunda h\u0131zl\u0131 kurtarma (failover) durumlar\u0131nda hayati \u00f6nem ta\u015f\u0131r.<\/li>\n<\/ul>\n<h4>Maliyet Azaltma<\/h4>\n<ul>\n<li><strong>Depolama Maliyetleri:<\/strong> Kay\u0131t defterlerinde ve sunucularda daha az disk alan\u0131 kullan\u0131l\u0131r, bu da depolama maliyetlerini do\u011frudan d\u00fc\u015f\u00fcr\u00fcr.<\/li>\n<li><strong>Bant Geni\u015fli\u011fi Tasarrufu:<\/strong> \u0130majlar\u0131n a\u011f \u00fczerinden aktar\u0131m\u0131 i\u00e7in daha az bant geni\u015fli\u011fi t\u00fcketilir, bu da \u00f6zellikle bulut ortamlar\u0131nda ek maliyet avantajlar\u0131 sa\u011flar.<\/li>\n<\/ul>\n<h4>G\u00fcvenlik<\/h4>\n<ul>\n<li><strong>Daha Az Sald\u0131r\u0131 Y\u00fczeyi:<\/strong> K\u00fc\u00e7\u00fck imajlar, genellikle daha az paket, k\u00fct\u00fcphane ve ara\u00e7 i\u00e7erir. Bu, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n say\u0131s\u0131n\u0131 azalt\u0131r ve sald\u0131r\u0131 y\u00fczeyini daralt\u0131r.<\/li>\n<li><strong>Daha Kolay G\u00fcvenlik Taramas\u0131:<\/strong> Taranacak dosya say\u0131s\u0131 azald\u0131\u011f\u0131 i\u00e7in g\u00fcvenlik taramalar\u0131 daha h\u0131zl\u0131 ve verimli hale gelir.<\/li>\n<\/ul>\n<h4>\u00c7eviklik ve Verimlilik<\/h4>\n<ul>\n<li><strong>Daha H\u0131zl\u0131 Geli\u015ftirme D\u00f6ng\u00fcs\u00fc:<\/strong> \u0130maj olu\u015fturma ve test etme s\u00fcreleri k\u0131sal\u0131r.<\/li>\n<li><strong>Kolay Y\u00f6netim:<\/strong> Daha k\u00fc\u00e7\u00fck imajlar, CI\/CD boru hatlar\u0131nda daha kolay y\u00f6netilir ve ta\u015f\u0131n\u0131r.<\/li>\n<\/ul>\n<h3>Temel Strateji: Multi-Stage Build&#8217;ler<\/h3>\n<p>Multi-stage build&#8217;ler, konteyner imaj boyutlar\u0131n\u0131 optimize etmenin en g\u00fc\u00e7l\u00fc ve yayg\u0131n kullan\u0131lan y\u00f6ntemlerinden biridir. Bu teknik, bir Dockerfile i\u00e7inde birden fazla <code>FROM<\/code> ifadesi kullanarak, geli\u015ftirme ve derleme ortamlar\u0131n\u0131 nihai \u00fcretim ortam\u0131ndan ay\u0131rman\u0131za olanak tan\u0131r.<\/p>\n<h4>\u00c7al\u0131\u015fma Prensibi<\/h4>\n<p>Multi-stage build&#8217;lerde, ilk a\u015famalar (builder a\u015famalar\u0131) uygulaman\u0131n derlenmesi, test edilmesi ve gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131n indirilmesi i\u00e7in kullan\u0131l\u0131r. Bu a\u015famalarda b\u00fcy\u00fck derleyici ara\u00e7lar\u0131, SDK&#8217;lar ve test k\u00fct\u00fcphaneleri bulunabilir. Ancak, son a\u015fama (runtime a\u015famas\u0131) sadece uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in kesinlikle gerekli olan dosyalar\u0131 ve k\u00fct\u00fcphaneleri i\u00e7erir. Bu sayede, derleme s\u0131ras\u0131nda kullan\u0131lan ancak \u00e7al\u0131\u015fma zaman\u0131nda gereksiz olan t\u00fcm fazlal\u0131klar nihai imaja dahil edilmez.<\/p>\n<h4>Dockerfile Yap\u0131s\u0131 ve \u00d6rnek<\/h4>\n<p>Bir multi-stage Dockerfile, genellikle bir &#8220;builder&#8221; a\u015famas\u0131 ve bir &#8220;final&#8221; a\u015famas\u0131 i\u00e7erir. A\u015fa\u011f\u0131daki \u00f6rnek, genel bir Python uygulamas\u0131n\u0131 derlemek ve paketlemek i\u00e7in bu yap\u0131y\u0131 g\u00f6stermektedir:<\/p>\n<pre><code class=\"language-dockerfile\"># Builder A\u015famas\u0131\nFROM python:3.9-slim-buster AS builder\n\nWORKDIR \/app\n\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\nCOPY . .\n\n# Final A\u015famas\u0131\nFROM python:3.9-slim-buster\n\nWORKDIR \/app\n\nCOPY --from=builder \/usr\/local\/lib\/python3.9\/site-packages \/usr\/local\/lib\/python3.9\/site-packages\nCOPY --from=builder \/app .\n\nCMD [\"python\", \"app.py\"]\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, ilk <code>FROM<\/code> ifadesi (<code>AS builder<\/code> ile etiketlenmi\u015f) t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckler ve kodu kopyalar. \u0130kinci <code>FROM<\/code> ifadesi ise daha temiz bir ba\u015flang\u0131\u00e7 yapar ve sadece builder a\u015famas\u0131ndan gerekli olan <code>site-packages<\/code> dizinini ve uygulama kodunu kopyalar. Bu, gereksiz build ara\u00e7lar\u0131n\u0131n veya ge\u00e7ici dosyalar\u0131n nihai imaja dahil edilmesini engeller.<\/p>\n<h4>Faydalar\u0131<\/h4>\n<ul>\n<li><strong>Gereksiz Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Eleme:<\/strong> Derleme ara\u00e7lar\u0131, SDK'lar, test k\u00fct\u00fcphaneleri gibi sadece build zaman\u0131nda kullan\u0131lan bile\u015fenler nihai imaja girmez.<\/li>\n<li><strong>Daha K\u00fc\u00e7\u00fck \u0130majlar:<\/strong> En b\u00fcy\u00fck faydas\u0131, imaj boyutunda \u00f6nemli \u00f6l\u00e7\u00fcde azalmad\u0131r.<\/li>\n<li><strong>Daha Temiz \u0130majlar:<\/strong> \u00dcretim imajlar\u0131 sadece uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken minimum bile\u015fenleri i\u00e7erir.<\/li>\n<\/ul>\n<h3>Taban \u0130maj Se\u00e7imi: En K\u00fc\u00e7\u00fck Ba\u015flang\u0131\u00e7<\/h3>\n<p>Konteyner imaj\u0131n\u0131z\u0131 olu\u015fturmaya ba\u015flarken se\u00e7ece\u011finiz taban imaj, nihai boyut \u00fczerinde en b\u00fcy\u00fck etkiye sahip fakt\u00f6rlerden biridir. Do\u011fru taban imaj\u0131 se\u00e7mek, y\u00fczlerce megabayt tasarruf sa\u011flayabilir.<\/p>\n<h4>Alpine Linux<\/h4>\n<p>Alpine Linux, \u00e7ok k\u00fc\u00e7\u00fck boyutuyla bilinen bir Linux da\u011f\u0131t\u0131m\u0131d\u0131r. Genellikle birka\u00e7 megabayt boyutundad\u0131r ve bu \u00f6zelli\u011fi onu konteynerler i\u00e7in pop\u00fcler bir se\u00e7im haline getirir. <code>FROM alpine<\/code> ile ba\u015flayan imajlar, \u00e7o\u011fu durumda di\u011fer taban imajlar\u0131na g\u00f6re \u00e7ok daha k\u00fc\u00e7\u00fckt\u00fcr.<\/p>\n<ul>\n<li><strong>Avantajlar\u0131:<\/strong> \u00c7ok k\u00fc\u00e7\u00fck boyut, h\u0131zl\u0131 indirme, d\u00fc\u015f\u00fck sald\u0131r\u0131 y\u00fczeyi.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> <code>glibc<\/code> yerine <code>musl libc<\/code> kullan\u0131r, bu da baz\u0131 uygulamalar\u0131n uyumluluk sorunlar\u0131 ya\u015famas\u0131na neden olabilir. \u00d6zellikle C\/C++ ba\u011f\u0131ml\u0131l\u0131klar\u0131 olan Python veya Java k\u00fct\u00fcphaneleri i\u00e7in ek derleme ad\u0131mlar\u0131 veya \u00f6zel Alpine paketleri gerekebilir.<\/li>\n<\/ul>\n<h4>Distroless \u0130majlar<\/h4>\n<p>Distroless imajlar, Google taraf\u0131ndan geli\u015ftirilen ve sadece uygulaman\u0131z\u0131n ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in kesinlikle gerekli olan runtime ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 i\u00e7eren imajlard\u0131r. \u0130\u015fletim sistemi kabu\u011fu (shell), paket y\u00f6neticileri veya di\u011fer standart Linux ara\u00e7lar\u0131 gibi bile\u015fenleri i\u00e7ermezler. Bu, onlar\u0131 hem son derece k\u00fc\u00e7\u00fck hem de g\u00fcvenli k\u0131lar.<\/p>\n<pre><code class=\"language-dockerfile\"># Distroless Python \u00f6rne\u011fi\nFROM python:3.9-slim-buster AS builder\nWORKDIR \/app\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\nCOPY . .\n\nFROM gcr.io\/distroless\/python3-debian11:latest\nWORKDIR \/app\nCOPY --from=builder \/usr\/local\/lib\/python3.9\/site-packages \/usr\/local\/lib\/python3.9\/site-packages\nCOPY --from=builder \/app .\nCMD [\"app.py\"]\n<\/pre>\n<p><\/code><\/p>\n<ul>\n<li><strong>Avantajlar\u0131:<\/strong> Maksimum g\u00fcvenlik (neredeyse s\u0131f\u0131r sald\u0131r\u0131 y\u00fczeyi), minimum boyut.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> Hata ay\u0131klama (debugging) \u00e7ok zordur \u00e7\u00fcnk\u00fc i\u00e7inde shell veya temel ara\u00e7lar yoktur. Sadece iyi test edilmi\u015f ve kararl\u0131 uygulamalar i\u00e7in idealdir.<\/li>\n<\/ul>\n<h4>Do\u011fru Taban\u0131 Se\u00e7mek<\/h4>\n<p>Taban imaj se\u00e7imi, uygulaman\u0131z\u0131n gereksinimlerine ve tolerans\u0131n\u0131za ba\u011fl\u0131d\u0131r. \u0130\u015fte baz\u0131 genel y\u00f6nergeler:<\/p>\n<table border=\"1\">\n<thead>\n<tr>\n<th>Taban \u0130maj<\/th>\n<th>Tipik Boyut<\/th>\n<th>Kullan\u0131m Durumu<\/th>\n<th>Notlar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>alpine<\/code><\/td>\n<td>~5-10 MB<\/td>\n<td>Basit uygulamalar, Go\/Rust gibi statik derlenmi\u015f diller, baz\u0131 Python\/Node.js uygulamalar\u0131.<\/td>\n<td><code>musl libc<\/code> uyumluluk sorunlar\u0131na dikkat.<\/td>\n<\/tr>\n<tr>\n<td><code>slim-buster<\/code> \/ <code>slim-bullseye<\/code> (Debian)<\/td>\n<td>~50-100 MB<\/td>\n<td>\u00c7o\u011fu Python\/Node.js\/Java uygulamas\u0131, daha geni\u015f uyumluluk.<\/td>\n<td>Alpine'dan b\u00fcy\u00fck ama tam Debian'dan \u00e7ok k\u00fc\u00e7\u00fck.<\/td>\n<\/tr>\n<tr>\n<td><code>distroless<\/code><\/td>\n<td>~10-50 MB<\/td>\n<td>G\u00fcvenli\u011fin ve minimum boyutun kritik oldu\u011fu \u00fcretim ortamlar\u0131.<\/td>\n<td>Hata ay\u0131klama zorlu\u011fu.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi: Sadece Gerekli Olanlar<\/h3>\n<p>Uygulaman\u0131z\u0131n ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 do\u011fru bir \u015fekilde y\u00f6netmek, imaj boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde etkileyebilir. Gereksiz paketleri ve ge\u00e7ici dosyalar\u0131 temizlemek kritik \u00f6neme sahiptir.<\/p>\n<h4>Build-Time ve Runtime Ba\u011f\u0131ml\u0131l\u0131klar\u0131<\/h4>\n<p>Multi-stage build'ler bu ayr\u0131m\u0131 zaten yapar, ancak her iki a\u015famada da sadece gerekli olan ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurdu\u011funuzdan emin olun. \u00d6rne\u011fin, bir Python uygulamas\u0131nda, <code>pip install<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131rken <code>--no-cache-dir<\/code> bayra\u011f\u0131n\u0131 kullanmak, pip'in indirdi\u011fi paketlerin \u00f6nbelle\u011fini tutmas\u0131n\u0131 engeller ve bu da imaj boyutunu azalt\u0131r.<\/p>\n<pre><code class=\"language-dockerfile\">RUN pip install --no-cache-dir -r requirements.txt\n<\/pre>\n<p><\/code><\/p>\n<h4>\u00d6nbellekleme Katmanlar\u0131<\/h4>\n<p>Docker, her <code>RUN<\/code>, <code>COPY<\/code> veya <code>ADD<\/code> komutunu ayr\u0131 bir katman olarak \u00f6nbelle\u011fe al\u0131r. Ba\u011f\u0131ml\u0131l\u0131klar\u0131 ayr\u0131 bir katmanda tutmak, kodunuzda de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda ba\u011f\u0131ml\u0131l\u0131klar\u0131n yeniden y\u00fcklenmesini engeller ve build s\u00fcrelerini h\u0131zland\u0131r\u0131r. \u00d6rne\u011fin, <code>requirements.txt<\/code> dosyas\u0131n\u0131 kopyalay\u0131p ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurmak, uygulama kodunu kopyalamadan \u00f6nce yap\u0131lmal\u0131d\u0131r:<\/p>\n<pre><code class=\"language-dockerfile\">WORKDIR \/app\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\nCOPY . . # Uygulama kodunu en son kopyala\n<\/pre>\n<p><\/code><\/p>\n<h4>Gereksiz Dosyalar\u0131 Temizleme<\/h4>\n<p>Kurulumdan sonra paket y\u00f6neticilerinin \u00f6nbelleklerini temizlemek, imaj boyutunu k\u00fc\u00e7\u00fcltmenin etkili bir yoludur. Bir <code>RUN<\/code> komutu i\u00e7inde birden fazla i\u015flemi zincirleyerek, her ad\u0131m\u0131n ayr\u0131 bir katman olu\u015fturmas\u0131n\u0131 engellersiniz:<\/p>\n<pre><code class=\"language-dockerfile\"># Debian tabanl\u0131 imajlar i\u00e7in\nRUN apt-get update \\\n    && apt-get install -y --no-install-recommends your-package \\\n    && apt-get clean \\\n    && rm -rf \/var\/lib\/apt\/lists\/*\n\n# Alpine tabanl\u0131 imajlar i\u00e7in\nRUN apk add --no-cache your-package \\\n    && rm -rf \/var\/cache\/apk\/*\n<\/pre>\n<p><\/code><\/p>\n<p>Ayr\u0131ca, ge\u00e7ici dosyalar\u0131, loglar\u0131 veya derleme s\u0131ras\u0131nda olu\u015fan ancak runtime'da gereksiz olan di\u011fer dosyalar\u0131 da temizlemeyi unutmay\u0131n.<\/p>\n<h3>Java \u00d6zelinde Optimizasyonlar<\/h3>\n<p>Java uygulamalar\u0131, JVM'nin kendisi ve genellikle b\u00fcy\u00fck JAR dosyalar\u0131 nedeniyle b\u00fcy\u00fck konteyner imajlar\u0131na sahip olabilir. Ancak, modern Java s\u00fcr\u00fcmleri ve ak\u0131ll\u0131 Dockerfile stratejileri ile bu durumun \u00f6n\u00fcne ge\u00e7mek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<h4>JLink ile \u00d6zel JRE Olu\u015fturma<\/h4>\n<p>Java 9 ve sonraki s\u00fcr\u00fcmlerle birlikte gelen JLink arac\u0131, uygulaman\u0131z\u0131n sadece ihtiya\u00e7 duydu\u011fu Java mod\u00fcllerini i\u00e7eren \u00f6zel bir Runtime Environment (JRE) olu\u015fturman\u0131za olanak tan\u0131r. Bu, tam bir JDK veya JRE imaj\u0131 kullanmak yerine, sadece uygulaman\u0131z\u0131n gereksinimlerini kar\u015f\u0131layan minimal bir Java runtime'\u0131 elde etmenizi sa\u011flar.<\/p>\n<pre><code class=\"language-dockerfile\"># Builder A\u015famas\u0131\nFROM openjdk:17-jdk-slim AS builder\nWORKDIR \/app\nCOPY .mvn .mvn\nCOPY mvnw pom.xml .\/\nRUN .\/mvnw dependency:go-offline\nCOPY src .\/src\nRUN .\/mvnw package -DskipTests\n\n# JLink ile \u00f6zel JRE olu\u015fturma\nFROM openjdk:17-jdk-slim AS jre-builder\nRUN jlink --compress=2 --no-header-files --no-man-pages --output \/opt\/jre \\\n    --add-modules java.base,java.logging,java.sql # Uygulaman\u0131z\u0131n ihtiya\u00e7 duydu\u011fu mod\u00fclleri ekleyin\n\n# Final A\u015famas\u0131\nFROM scratch # veya gcr.io\/distroless\/java17-debian11 gibi bir distroless imaj\nCOPY --from=jre-builder \/opt\/jre \/opt\/jre\nCOPY --from=builder \/app\/target\/your-app.jar \/app\/your-app.jar\n\nENV PATH=\"\/opt\/jre\/bin:$PATH\"\nCMD [\"java\", \"-jar\", \"\/app\/your-app.jar\"]\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, JLink ile sadece <code>java.base<\/code>, <code>java.logging<\/code> ve <code>java.sql<\/code> mod\u00fcllerini i\u00e7eren k\u00fc\u00e7\u00fck bir JRE olu\u015fturulur. Kendi uygulaman\u0131z i\u00e7in hangi mod\u00fcllere ihtiyac\u0131n\u0131z oldu\u011funu belirlemek i\u00e7in <code>jdeps<\/code> gibi ara\u00e7lar\u0131 kullanabilirsiniz.<\/p>\n<h4>JPackage ile Y\u00fcr\u00fct\u00fclebilir Dosyalar<\/h4>\n<p>Java 14 ile tan\u0131t\u0131lan JPackage arac\u0131, uygulaman\u0131z\u0131 ve \u00f6zel JRE'nizi tek bir y\u00fcr\u00fct\u00fclebilir pakette birle\u015ftirmenize olanak tan\u0131r. Bu, da\u011f\u0131t\u0131m\u0131 daha da basitle\u015ftirebilir.<\/p>\n<h4>Layering Optimizasyonu<\/h4>\n<p>Maven veya Gradle ile olu\u015fturulan b\u00fcy\u00fck JAR dosyalar\u0131 yerine, ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve uygulama kodunu ayr\u0131 katmanlarda tutmak, imaj olu\u015fturma s\u00fcresini ve boyutunu optimize edebilir. \u00d6rne\u011fin, Maven'\u0131n <code>spring-boot-maven-plugin<\/code>'i ile \"layered JAR\" olu\u015fturarak ba\u011f\u0131ml\u0131l\u0131klar\u0131 ayr\u0131 bir katmanda tutabilirsiniz.<\/p>\n<h4>GraalVM Native Image<\/h4>\n<p>Daha ileri d\u00fczey bir optimizasyon olarak, GraalVM'nin Native Image \u00f6zelli\u011fi, Java uygulaman\u0131z\u0131 do\u011frudan makine koduna derlemenizi sa\u011flar. Bu, bir JVM'ye ihtiya\u00e7 duymadan uygulaman\u0131z\u0131n \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar ve \u00e7ok daha k\u00fc\u00e7\u00fck, h\u0131zl\u0131 ba\u015flang\u0131\u00e7 s\u00fcrelerine sahip ikili dosyalar \u00fcretir. Ancak, derleme s\u00fcresi uzundur ve dinamik \u00f6zelliklerin (reflection, proxy) kullan\u0131m\u0131 k\u0131s\u0131tl\u0131 olabilir.<\/p>\n<h3>AI\/Python \u00d6zelinde Optimizasyonlar<\/h3>\n<p>Yapay zeka ve makine \u00f6\u011frenimi uygulamalar\u0131 genellikle b\u00fcy\u00fck k\u00fct\u00fcphane ba\u011f\u0131ml\u0131l\u0131klar\u0131na (TensorFlow, PyTorch, NumPy, SciPy vb.) sahiptir. Bu ba\u011f\u0131ml\u0131l\u0131klar imaj boyutlar\u0131n\u0131 kolayca y\u00fczlerce megabayta \u00e7\u0131karabilir. \u0130\u015fte bu durumu y\u00f6netmek i\u00e7in baz\u0131 teknikler:<\/p>\n<h4>Virtual Ortamlar ve Pip<\/h4>\n<p>Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmek i\u00e7in <code>pip<\/code> ve <code>requirements.txt<\/code> kullanmak en yayg\u0131n ve etkili y\u00f6ntemdir. Multi-stage build'ler ile birle\u015ftirildi\u011finde, sadece \u00fcretim i\u00e7in gerekli olan paketlerin nihai imaja dahil edilmesi sa\u011flan\u0131r.<\/p>\n<pre><code class=\"language-dockerfile\"># Builder A\u015famas\u0131\nFROM python:3.9-slim-buster AS builder\nWORKDIR \/app\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\nCOPY . .\n\n# Final A\u015famas\u0131\nFROM python:3.9-slim-buster\nWORKDIR \/app\nCOPY --from=builder \/usr\/local\/lib\/python3.9\/site-packages \/usr\/local\/lib\/python3.9\/site-packages\nCOPY --from=builder \/app .\nCMD [\"python\", \"app.py\"]\n<\/pre>\n<p><\/code><\/p>\n<p><code>--no-cache-dir<\/code> bayra\u011f\u0131n\u0131 kullanmak, pip'in indirdi\u011fi paketlerin \u00f6nbelle\u011fini tutmas\u0131n\u0131 engelleyerek imaj boyutunu azalt\u0131r.<\/p>\n<h4>Conda Yerine Pip<\/h4>\n<p>Conda, \u00f6zellikle bilimsel hesaplama ve veri bilimi toplulu\u011funda pop\u00fcler olsa da, genellikle daha b\u00fcy\u00fck ve \u015fi\u015fkin ortamlar olu\u015fturur. M\u00fcmk\u00fcnse, Conda yerine <code>pip<\/code> ve minimal taban imajlar\u0131 kullanmay\u0131 tercih edin. E\u011fer Conda kullanmak zorundaysan\u0131z, <code>conda clean --all<\/code> komutunu kullanarak gereksiz paketleri ve \u00f6nbelle\u011fi temizleyin ve <code>--freeze-installed<\/code> gibi se\u00e7eneklerle sadece gerekli paketleri kurun.<\/p>\n<h4>Model Dosyalar\u0131n\u0131 Ay\u0131rma<\/h4>\n<p>Makine \u00f6\u011frenimi modelleri (\u00f6rn. <code>.h5<\/code>, <code>.pt<\/code> dosyalar\u0131) genellikle \u00e7ok b\u00fcy\u00fckt\u00fcr. Bu modelleri do\u011frudan konteyner imaj\u0131na dahil etmek yerine, bunlar\u0131 harici bir depolama \u00e7\u00f6z\u00fcm\u00fcnde (S3, GCS, Azure Blob Storage) tutun ve uygulama ba\u015flat\u0131ld\u0131\u011f\u0131nda indirin. Bu, imaj\u0131n boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r ve model g\u00fcncellemelerini daha esnek hale getirir.<\/p>\n<pre><code class=\"language-dockerfile\"># Uygulama ba\u015flat\u0131ld\u0131\u011f\u0131nda modeli indirme \u00f6rne\u011fi\nCMD [\"sh\", \"-c\", \"wget https:\/\/example.com\/my_model.h5 -O \/app\/model.h5 && python app.py\"]\n<\/pre>\n<p><\/code><\/p>\n<h4>Gereksiz K\u00fct\u00fcphaneleri Kald\u0131rma<\/h4>\n<p>Baz\u0131 AI\/ML k\u00fct\u00fcphaneleri, GPU deste\u011fi gibi \u00e7e\u015fitli \u00f6zellikler i\u00e7in opsiyonel ba\u011f\u0131ml\u0131l\u0131klar i\u00e7erir. E\u011fer uygulaman\u0131z belirli bir \u00f6zelli\u011fi (\u00f6rne\u011fin GPU) kullanm\u0131yorsa, bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurmaktan ka\u00e7\u0131n\u0131n veya sadece CPU versiyonlar\u0131n\u0131 kullan\u0131n. \u00d6rne\u011fin, <code>tensorflow-cpu<\/code> yerine <code>tensorflow<\/code> kurmak, GPU ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 indirmenizi engeller.<\/p>\n<h3>Genel \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h3>\n<p>Dile \u00f6zel optimizasyonlar\u0131n yan\u0131 s\u0131ra, t\u00fcm konteyner imajlar\u0131 i\u00e7in ge\u00e7erli olan baz\u0131 genel en iyi uygulamalar bulunmaktad\u0131r.<\/p>\n<h4><code>.dockerignore<\/code> Kullan\u0131m\u0131<\/h4>\n<p><code>.dockerignore<\/code> dosyas\u0131, Docker'\u0131n imaj olu\u015fturma ba\u011flam\u0131na hangi dosyalar\u0131 dahil etmeyece\u011fini belirtir. Bu, gereksiz dosyalar\u0131n (\u00f6rn. <code>.git<\/code> dizinleri, <code>node_modules<\/code> (e\u011fer multi-stage build'de de\u011filse), <code>.env<\/code> dosyalar\u0131, test \u00e7\u0131kt\u0131lar\u0131) imaja kopyalanmas\u0131n\u0131 engeller ve build ba\u011flam\u0131n\u0131 k\u00fc\u00e7\u00fclterek build s\u00fcrelerini h\u0131zland\u0131r\u0131r.<\/p>\n<pre><code class=\"language-dockerignore\">.git\n.gitignore\n.env\nnode_modules\ntarget\/\n*.log\nDockerfile\nREADME.md\n<\/pre>\n<p><\/code><\/p>\n<h4>Tek <code>RUN<\/code> Komutu<\/h4>\n<p>Her <code>RUN<\/code> komutu yeni bir katman olu\u015fturur. Birden fazla i\u015flemi tek bir <code>RUN<\/code> komutunda birle\u015ftirmek (<code>&&<\/code> ile), katman say\u0131s\u0131n\u0131 azalt\u0131r ve her katman\u0131n boyutunu optimize etmeye yard\u0131mc\u0131 olur. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-dockerfile\"># K\u00f6t\u00fc pratik: Birden fazla RUN\nRUN apt-get update\nRUN apt-get install -y your-package\nRUN apt-get clean\n\n# \u0130yi pratik: Tek RUN komutu\nRUN apt-get update && \\\n    apt-get install -y --no-install-recommends your-package && \\\n    apt-get clean && \\\n    rm -rf \/var\/lib\/apt\/lists\/*\n<\/pre>\n<p><\/code><\/p>\n<h4>S\u0131k\u0131\u015ft\u0131rma ve S\u0131k\u0131\u015ft\u0131rmay\u0131 Kald\u0131rma<\/h4>\n<p>Baz\u0131 durumlarda, b\u00fcy\u00fck dosyalar\u0131 veya dizinleri imaja kopyalamadan \u00f6nce s\u0131k\u0131\u015ft\u0131rmak ve ard\u0131ndan imaj i\u00e7inde s\u0131k\u0131\u015ft\u0131rmay\u0131 kald\u0131rmak, ara katman boyutunu azaltabilir. Ancak, bu i\u015flem CPU maliyeti ve ek katmanlar olu\u015fturma potansiyeli nedeniyle dikkatli kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h4>G\u00fcvenlik Taramas\u0131<\/h4>\n<p>K\u00fc\u00e7\u00fck imajlar, daha az sald\u0131r\u0131 y\u00fczeyi sunman\u0131n yan\u0131 s\u0131ra, g\u00fcvenlik taramalar\u0131n\u0131n da daha h\u0131zl\u0131 ve verimli olmas\u0131n\u0131 sa\u011flar. G\u00fcvenlik ara\u00e7lar\u0131 (\u00f6rn. Trivy, Clair) ile imajlar\u0131n\u0131z\u0131 d\u00fczenli olarak tarayarak potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 tespit edin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Konteyner imaj boyutlar\u0131n\u0131 optimize etmek, sadece teknik bir g\u00f6rev de\u011fil, ayn\u0131 zamanda operasyonel verimlilik, maliyet tasarrufu ve g\u00fcvenlik a\u00e7\u0131s\u0131ndan stratejik bir yat\u0131r\u0131md\u0131r. Bu makalede ele ald\u0131\u011f\u0131m\u0131z multi-stage build'ler, do\u011fru taban imaj se\u00e7imi, ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi ve dile \u00f6zel optimizasyonlar (JLink, JPackage, model ay\u0131rma gibi) gibi tekniklerle, AI ve Java uygulamalar\u0131n\u0131z\u0131n konteyner imajlar\u0131ndan y\u00fczlerce megabayt t\u0131ra\u015flayabilir, b\u00f6ylece daha h\u0131zl\u0131, daha g\u00fcvenli ve daha ekonomik sistemler kurabilirsiniz. K\u00fc\u00e7\u00fck imajlar, modern bulut yerel mimarilerinin temel ta\u015flar\u0131ndan biridir ve geli\u015ftirme s\u00fcre\u00e7lerinizin her a\u015famas\u0131nda bu prensibi g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z, uzun vadede b\u00fcy\u00fck faydalar sa\u011flayacakt\u0131r.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>S1: K\u00fc\u00e7\u00fck imajlar ger\u00e7ekten performans fark\u0131 yarat\u0131r m\u0131?<\/h4>\n<p>Evet, \u00f6zellikle bulut ortamlar\u0131nda ve mikroservis mimarilerinde \u00f6nemli performans farklar\u0131 yarat\u0131r. Daha h\u0131zl\u0131 indirme s\u00fcreleri, konteynerlerin daha \u00e7abuk ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar, bu da \u00f6l\u00e7eklendirme ve hata durumunda kurtarma s\u00fcrelerini do\u011frudan etkiler. Ayr\u0131ca, daha az disk I\/O ve a\u011f bant geni\u015fli\u011fi kullan\u0131m\u0131 genel sistem performans\u0131na olumlu katk\u0131da bulunur.<\/p>\n<h4>S2: Distroless imajlar her uygulama i\u00e7in uygun mudur?<\/h4>\n<p>Distroless imajlar, g\u00fcvenlik ve boyut a\u00e7\u0131s\u0131ndan m\u00fckemmeldir ancak her uygulama i\u00e7in uygun olmayabilir. \u0130\u00e7lerinde shell veya temel Linux ara\u00e7lar\u0131 bulunmad\u0131\u011f\u0131 i\u00e7in, \u00e7al\u0131\u015fma zaman\u0131nda hata ay\u0131klama veya dinamik yap\u0131land\u0131rma gerektiren uygulamalar i\u00e7in zorluklar yaratabilirler. Genellikle iyi test edilmi\u015f, kararl\u0131 ve minimal ba\u011f\u0131ml\u0131l\u0131klara sahip \u00fcretim uygulamalar\u0131 i\u00e7in idealdirler.<\/p>\n<h4>S3: Multi-stage build'ler ne kadar karma\u015f\u0131k?<\/h4>\n<p>Multi-stage build'ler, ilk bak\u0131\u015fta biraz daha karma\u015f\u0131k g\u00f6r\u00fcnebilir, ancak temel prensipleri anla\u015f\u0131ld\u0131\u011f\u0131nda olduk\u00e7a basittir. Genellikle bir \"builder\" a\u015famas\u0131 ve bir \"final\" a\u015famas\u0131 i\u00e7erirler. Sa\u011flad\u0131klar\u0131 faydalar (boyut ve g\u00fcvenlik) g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, \u00f6\u011frenme e\u011frisi kesinlikle de\u011ferlidir ve \u00e7o\u011fu modern konteynerle\u015ftirilmi\u015f uygulamada standart bir uygulama haline gelmi\u015ftir.<\/p>\n<h4>S4: Python uygulamalar\u0131nda <code>requirements.txt<\/code> kullanmak yeterli mi?<\/h4>\n<p>Evet, <code>requirements.txt<\/code> genellikle Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00f6netmek i\u00e7in yeterlidir. Ancak, multi-stage build ile birle\u015ftirildi\u011finde ve <code>--no-cache-dir<\/code> gibi optimizasyonlarla kullan\u0131ld\u0131\u011f\u0131nda en iyi sonu\u00e7lar\u0131 verir. Ayr\u0131ca, sadece uygulaman\u0131z\u0131n ger\u00e7ekten ihtiya\u00e7 duydu\u011fu paketleri listeledi\u011finizden emin olun.<\/p>\n<h4>S5: JLink\/JPackage ile olu\u015fturulan JRE'ler tam \u00f6zellikli mi?<\/h4>\n<p>JLink ile olu\u015fturulan JRE'ler, uygulaman\u0131z\u0131n ihtiya\u00e7 duydu\u011fu mod\u00fcllere g\u00f6re \u00f6zelle\u015ftirildi\u011fi i\u00e7in \"tam \u00f6zellikli\" de\u011fildir; tam aksine, sadece gerekli olan mod\u00fclleri i\u00e7erir. Bu, imaj boyutunu k\u00fc\u00e7\u00fcltmenin anahtar\u0131d\u0131r. Uygulaman\u0131z\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 do\u011fru bir \u015fekilde analiz edip JLink komutuna eklemeniz \u00f6nemlidir. Eksik mod\u00fcller, \u00e7al\u0131\u015fma zaman\u0131nda hatalara neden olabilir.<\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz bulut tabanl\u0131 ve mikroservis mimarilerinde konteynerler, uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131 ve \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 i\u00e7in vazge\u00e7ilmez hale geldi. Ancak&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-36645","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz bulut tabanl\u0131 ve mikroservis mimarilerinde konteynerler, uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131 ve \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 i\u00e7in vazge\u00e7ilmez hale geldi. Ancak...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-21T00:00:43+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri\",\"datePublished\":\"2025-12-21T00:00:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/\"},\"wordCount\":2652,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/\",\"name\":\"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-21T00:00:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/","og_locale":"tr_TR","og_type":"article","og_title":"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri","og_description":"G\u00fcn\u00fcm\u00fcz bulut tabanl\u0131 ve mikroservis mimarilerinde konteynerler, uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131 ve \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 i\u00e7in vazge\u00e7ilmez hale geldi. Ancak...","og_url":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-21T00:00:43+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri","datePublished":"2025-12-21T00:00:43+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/"},"wordCount":2652,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/","url":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/","name":"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-21T00:00:43+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kucuk-imajlarin-sanati-ai-ve-java-konteynerlerinden-yuzlerce-mb-tiraslamanin-pratik-yontemleri\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"K\u00fc\u00e7\u00fck \u0130majlar\u0131n Sanat\u0131: AI ve Java Konteynerlerinden Y\u00fczlerce MB T\u0131ra\u015flaman\u0131n Pratik Y\u00f6ntemleri"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36645"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36645\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36645"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}