{"id":612,"date":"2026-09-30T12:00:00","date_gmt":"2026-09-30T12:00:00","guid":{"rendered":"https:\/\/konteynerium.com\/index.php\/2026\/09\/30\/dockerignore-ve-build-baglami-docker-build-neden-yavas\/"},"modified":"2026-09-30T12:00:00","modified_gmt":"2026-09-30T12:00:00","slug":"dockerignore-ve-build-baglami-docker-build-neden-yavas","status":"publish","type":"post","link":"https:\/\/konteynerium.com\/index.php\/2026\/09\/30\/dockerignore-ve-build-baglami-docker-build-neden-yavas\/","title":{"rendered":".dockerignore ve Build Ba\u011flam\u0131: docker build Neden Yava\u015f ve \u015ei\u015fkin?"},"content":{"rendered":"<p><code>docker build .<\/code> komutundaki o k\u00fc\u00e7\u00fck nokta asl\u0131nda \u00f6nemli bir \u015fey s\u00f6yler: &#8220;<strong>build ba\u011flam\u0131<\/strong> (build context) bu dizindir.&#8221; Docker, build ba\u015flarken bu dizinin i\u00e7eri\u011fini build motoruna g\u00f6nderir. Dizinde b\u00fcy\u00fck dosyalar, <code>node_modules<\/code> ya da gizli bir <code>.env<\/code> varsa; build yava\u015flar, imaj \u015fi\u015fer ve \u2014 en k\u00f6t\u00fcs\u00fc \u2014 o gizli dosya imaj\u0131n i\u00e7ine girebilir.<\/p>\n<h2>Ba\u011flam ger\u00e7ekte ne kadar b\u00fcy\u00fck?<\/h2>\n<p>\u00d6rnek bir proje d\u00fc\u015f\u00fcnelim: 50 MB&#8217;l\u0131k bir veri dosyas\u0131, 20 MB&#8217;l\u0131k bir <code>node_modules<\/code> klas\u00f6r\u00fc, bir <code>.env<\/code> dosyas\u0131 ve k\u00fc\u00e7\u00fck bir <code>app.txt<\/code>. Dockerfile ise yaln\u0131zca t\u00fcm klas\u00f6r\u00fc kopyal\u0131yor:<\/p>\n<pre><code>FROM temel-imaj\nCOPY . \/app<\/code><\/pre>\n<p>BuildKit&#8217;in ayr\u0131nt\u0131l\u0131 \u00e7\u0131kt\u0131s\u0131nda (<code>--progress=plain<\/code>) ba\u011flam\u0131n boyutu g\u00f6r\u00fcn\u00fcr:<\/p>\n<pre><code>$ docker build --progress=plain -t ornek:1 .\n...\n#5 transferring context: 70.02MB 0.9s done<\/code><\/pre>\n<p>Tek sat\u0131rl\u0131k uygulama i\u00e7in <strong>70 MB<\/strong> g\u00f6nderildi \u2014 ve <code>COPY . \/app<\/code> bunlar\u0131n hepsini (gizli <code>.env<\/code> dahil) imaja yazd\u0131. Her <code>docker build<\/code>&#8216;da bu transfer tekrar edilir.<\/p>\n<h2>.dockerignore ile \u00e7\u00f6z\u00fcm<\/h2>\n<p>Ba\u011flam dizininin k\u00f6k\u00fcne <code>.dockerignore<\/code> dosyas\u0131 koyun. Bi\u00e7imi <code>.gitignore<\/code>&#8216;a benzer; listelenen yollar build ba\u011flam\u0131na <em>hi\u00e7 g\u00f6nderilmez<\/em>:<\/p>\n<pre><code>node_modules\n*.bin\n.env\n.git<\/code><\/pre>\n<p>Ayn\u0131 build&#8217;i yeniden \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda:<\/p>\n<pre><code>#5 transferring context: 124B 0.0s done\n\n$ docker run --rm ornek:2 ls -A \/app\n.dockerignore\nDockerfile\napp.txt<\/code><\/pre>\n<p>70 MB&#8217;dan <strong>124 bayta<\/strong> d\u00fc\u015ft\u00fc; <code>.env<\/code>, <code>node_modules<\/code> ve b\u00fcy\u00fck dosya imajda yok. Bu dosya ayn\u0131 zamanda \u00f6nbelle\u011fi de korur: ilgisiz bir dosya (\u00f6rne\u011fin bir log) de\u011fi\u015fti\u011finde <code>COPY . .<\/code> katman\u0131 gereksiz yere ge\u00e7ersiz kalmaz.<\/p>\n<div class=\"callout\">\n  <span class=\"glyph\">!<\/span><\/p>\n<p><code>.dockerignore<\/code> bir g\u00fcvenlik \u00f6nlemi olarak da d\u00fc\u015f\u00fcn\u00fclmelidir: <code>.env<\/code>, <code>*.pem<\/code>, <code>.git<\/code> gibi dosyalar\u0131 buraya yazmak, <code>COPY . .<\/code> ile yanl\u0131\u015fl\u0131kla imaja girmelerini engeller. Detay i\u00e7in <a href=\"https:\/\/konteynerium.com\/index.php\/2026\/07\/03\/container-image-guvenligi-zafiyet-taramasi-en-iyi-uygulamalar\/\">Container Image G\u00fcvenli\u011fi<\/a> yaz\u0131s\u0131na bak\u0131n.<\/p>\n<\/div>\n<h2>S\u0131k kullan\u0131lan kal\u0131plar<\/h2>\n<table>\n<thead>\n<tr>\n<th>Sat\u0131r<\/th>\n<th>Ne yapar?<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>node_modules<\/code><\/td>\n<td>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 imaj i\u00e7inde <code>npm ci<\/code> ile kurdu\u011funuz i\u00e7in host&#8217;taki kopyay\u0131 d\u0131\u015far\u0131da b\u0131rak\u0131r<\/td>\n<\/tr>\n<tr>\n<td><code>.git<\/code><\/td>\n<td>Depo ge\u00e7mi\u015fini (genellikle b\u00fcy\u00fck) ba\u011flamdan \u00e7\u0131kar\u0131r<\/td>\n<\/tr>\n<tr>\n<td><code>*.log<\/code>, <code>tmp*<\/code><\/td>\n<td>Ge\u00e7ici ve log dosyalar\u0131<\/td>\n<\/tr>\n<tr>\n<td><code>.env*<\/code><\/td>\n<td>Ortam ve gizli bilgi dosyalar\u0131<\/td>\n<\/tr>\n<tr>\n<td><code>Dockerfile<\/code>, <code>.dockerignore<\/code><\/td>\n<td>\u0130maja girmesi gerekmeyen yap\u0131land\u0131rma (bu dosyalar yine de build&#8217;e okunur)<\/td>\n<\/tr>\n<tr>\n<td><code>!istisna.txt<\/code><\/td>\n<td><code>!<\/code> ile bir \u00f6nceki kural\u0131n istisnas\u0131 tan\u0131mlan\u0131r<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Not: Yukar\u0131daki deneyde <code>Dockerfile<\/code> ve <code>.dockerignore<\/code>&#8216;\u0131 listeye yazmad\u0131\u011f\u0131m\u0131z i\u00e7in <code>COPY . \/app<\/code> bunlar\u0131 da imaja kopyalad\u0131 (<code>ls<\/code> \u00e7\u0131kt\u0131s\u0131ndaki iki dosya). Listeye yazarsan\u0131z imaja girmezler; build motoru yine de onlar\u0131 build talimatlar\u0131 i\u00e7in okur.<\/p>\n<h2>B\u00fcy\u00fck ba\u011flam\u0131 fark etmenin yollar\u0131<\/h2>\n<ul>\n<li><code>docker build --progress=plain<\/code> \u00e7\u0131kt\u0131s\u0131nda <code>transferring context<\/code> sat\u0131r\u0131na bak\u0131n; y\u00fczlerce MB g\u00f6r\u00fcyorsan\u0131z bir \u015feyler fazla.<\/li>\n<li>Build ba\u015flamadan \u00f6nce uzun s\u00fcre &#8220;bekliyorsa&#8221; bu \u00e7o\u011funlukla ba\u011flam\u0131n g\u00f6nderilmesidir, derleme de\u011fil.<\/li>\n<li>\u0130maj beklenenden b\u00fcy\u00fckse <code>docker run --rm imaj ls -A \/app<\/code> ile i\u00e7ine neyin girdi\u011fine bak\u0131n.<\/li>\n<\/ul>\n<h2>H\u0131zl\u0131 kontrol listesi<\/h2>\n<ul>\n<li>Projenizin k\u00f6k\u00fcnde <code>.dockerignore<\/code> var m\u0131?<\/li>\n<li><code>.git<\/code>, <code>node_modules<\/code>, log ve <code>.env<\/code> dosyalar\u0131 listede mi?<\/li>\n<li><code>COPY . .<\/code> yerine m\u00fcmk\u00fcnse yaln\u0131zca gereken dosyalar\u0131 m\u0131 kopyal\u0131yorsunuz?<\/li>\n<li><code>transferring context<\/code> boyutu makul m\u00fc?<\/li>\n<\/ul>\n<p>S\u0131radaki ad\u0131m: build&#8217;i bir de \u00f6nbellek a\u00e7\u0131s\u0131ndan h\u0131zland\u0131rmak i\u00e7in <a href=\"https:\/\/konteynerium.com\/index.php\/2026\/10\/03\/buildkit-build-cache-hizli-docker-build\/\">Build Cache ve BuildKit<\/a> yaz\u0131s\u0131na ge\u00e7in. Dockerfile&#8217;\u0131n\u0131z\u0131 otomatik kontrol etmek i\u00e7in sitemizdeki <a href=\"https:\/\/konteynerium.com\/index.php\/dockerfile-optimizasyon-kontrolcusu\/\">Dockerfile Kontrolc\u00fcs\u00fc<\/a> arac\u0131n\u0131 da kullanabilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>docker build neden yava\u015f \u00e7al\u0131\u015f\u0131yor ve imaj neden \u015fi\u015fiyor? Build ba\u011flam\u0131n\u0131 70 MB&#8217;tan 124 bayta indiren .dockerignore kal\u0131plar\u0131n\u0131 ve gizli dosyalar\u0131n imaja s\u0131zmas\u0131n\u0131 nas\u0131l \u00f6nleyece\u011finizi g\u00f6steriyoruz.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"seviye":[7],"class_list":["post-612","post","type-post","status-publish","format-standard","hentry","category-docker-derinlemesine","seviye-baslangic"],"_links":{"self":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/612","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/comments?post=612"}],"version-history":[{"count":0,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/612\/revisions"}],"wp:attachment":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/media?parent=612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/categories?post=612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/tags?post=612"},{"taxonomy":"seviye","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/seviye?post=612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}