{"id":38025,"date":"2026-01-21T16:23:32","date_gmt":"2026-01-21T13:23:32","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/"},"modified":"2026-01-21T16:23:32","modified_gmt":"2026-01-21T13:23:32","slug":"giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/","title":{"rendered":"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?"},"content":{"rendered":"<p><title>Ubuntu&#8217;da Docker Kurulumu ve Kullan\u0131m\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber<\/title><br \/>\n<body><\/p>\n<style>\n        \/* Mobil uyumluluk i\u00e7in \u00f6rnek bir CSS kural\u0131 *\/\n        .expert-tip {\n            background-color: #e0f7fa;\n            border-left: 5px solid #00bcd4;\n            padding: 15px;\n            margin: 20px 0;\n            border-radius: 4px;\n        }<\/p>\n<p>        .expert-tip p {\n            margin: 0;\n            font-style: italic;\n            color: #006064;\n        }<\/p>\n<p>        \/* K\u00fc\u00e7\u00fck ekranlar i\u00e7in stil ayarlamalar\u0131 *\/\n        @media (max-width: 768px) {\n            .expert-tip {\n                padding: 10px;\n                margin: 15px 0;\n                font-size: 0.9em;\n            }\n            \/* Daha fazla mobil uyumlu stil burada tan\u0131mlanabilir *\/\n        }<\/p>\n<p>        \/* Kod bloklar\u0131 i\u00e7in genel stil *\/\n        pre {\n            background-color: #272822;\n            color: #f8f8f2;\n            padding: 15px;\n            border-radius: 5px;\n            overflow-x: auto;\n            font-family: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;\n            line-height: 1.4;\n            margin-bottom: 20px;\n        }<\/p>\n<p>        code {\n            font-family: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;\n            background-color: #e0e0e0;\n            padding: 2px 4px;\n            border-radius: 3px;\n            color: #c7254e;\n        }\n    <\/style>\n<h2>Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?<\/h2>\n<p>Ubuntu \u00fczerinde Docker&#8217;\u0131 kurmak ve kullanmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, konteyner teknolojisinin temellerinden ileri d\u00fczey ipu\u00e7lar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor, projelerinizi verimli y\u00f6netmenizi sa\u011fl\u0131yor.<\/p>\n<p>Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda &#8220;Benim makinemde \u00e7al\u0131\u015f\u0131yor!&#8221; c\u00fcmlesiyle s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131yor musunuz? Geli\u015ftiricilerin ortak bir sorunu olan bu durum, farkl\u0131 geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki tutars\u0131zl\u0131klardan kaynaklan\u0131r. Uygulamalar bir ortamda sorunsuz \u00e7al\u0131\u015f\u0131rken, ba\u015fka bir ortamda beklenmedik hatalar verebilir. \u0130\u015fte tam da bu noktada, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin vazge\u00e7ilmezi haline gelen Docker devreye giriyor. Peki, Docker nedir ve geli\u015ftirme s\u00fcre\u00e7lerinizi nas\u0131l d\u00f6n\u00fc\u015ft\u00fcrebilir?<\/p>\n<p>Docker, uygulamalar\u0131n\u0131z\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 &#8220;konteyner&#8221; ad\u0131 verilen izole, ta\u015f\u0131nabilir birimler halinde paketlemenizi sa\u011flayan a\u00e7\u0131k kaynakl\u0131 bir platformdur. Bu konteynerler, uygulaman\u0131z\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken her \u015feyi (kod, \u00e7al\u0131\u015fma zaman\u0131, sistem ara\u00e7lar\u0131, k\u00fct\u00fcphaneler ve ayarlar) i\u00e7erir. B\u00f6ylece, uygulaman\u0131z\u0131n farkl\u0131 ortamlarda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 garanti alt\u0131na al\u0131r. Bir geli\u015ftiricinin makinesinde, test sunucusunda veya \u00fcretim ortam\u0131nda olsun, Docker konteynerleri her yerde ayn\u0131 \u015fekilde davran\u0131r. Bu, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k uygulamalar\u0131n geli\u015ftirilmesi ve da\u011f\u0131t\u0131lmas\u0131 s\u00f6z konusu oldu\u011funda paha bi\u00e7ilmez bir avantaj sunar.<\/p>\n<p>Docker&#8217;\u0131n sundu\u011fu en \u00f6nemli faydalardan biri, geli\u015ftirme ve operasyon (DevOps) ekipleri aras\u0131ndaki i\u015fbirli\u011fini kolayla\u015ft\u0131rmas\u0131d\u0131r. Geli\u015ftiriciler, uygulamalar\u0131n\u0131 konteynerize ederek operasyon ekiplerine &#8220;\u00e7al\u0131\u015fan bir paket&#8221; teslim ederler. Operasyon ekipleri ise bu paketi herhangi bir uyumluluk sorunu ya\u015famadan da\u011f\u0131tabilir ve y\u00f6netebilir. Ayr\u0131ca, Docker konteynerleri hafif yap\u0131da olduklar\u0131 i\u00e7in sanal makinelere g\u00f6re daha az kaynak t\u00fcketir ve daha h\u0131zl\u0131 ba\u015flar. Bu durum, \u00f6zellikle mikroservis mimarisine sahip uygulamalar\u0131n geli\u015ftirilmesinde ve bulut tabanl\u0131 da\u011f\u0131t\u0131mlarda b\u00fcy\u00fck bir performans ve maliyet avantaj\u0131 sa\u011flar. \u00d6rne\u011fin, bir e-ticaret platformu d\u00fc\u015f\u00fcn\u00fcn; \u00f6deme, \u00fcr\u00fcn y\u00f6netimi ve kullan\u0131c\u0131 aray\u00fcz\u00fc gibi farkl\u0131 servisler ayr\u0131 ayr\u0131 konteynerize edilerek birbirinden ba\u011f\u0131ms\u0131z olarak geli\u015ftirilebilir, da\u011f\u0131t\u0131labilir ve \u00f6l\u00e7eklenebilir.<\/p>\n<p>Bu makalede, Ubuntu i\u015fletim sistemi \u00fczerinde Docker&#8217;\u0131 s\u0131f\u0131rdan nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, temel komutlar\u0131n\u0131 \u00f6\u011frenerek ilk konteynerinizi nas\u0131l \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z\u0131 ve hatta \u00e7oklu konteyner uygulamalar\u0131n\u0131 Docker Compose ile nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, ister yeni ba\u015flayan bir geli\u015ftirici olun ister deneyimli bir DevOps m\u00fchendisi, Docker&#8217;\u0131n g\u00fcc\u00fcnden tam anlam\u0131yla faydalanman\u0131z\u0131 sa\u011flayacak pratik bilgiler ve ipu\u00e7lar\u0131 sunmakt\u0131r. Haz\u0131rsan\u0131z, konteyner teknolojisinin heyecan verici d\u00fcnyas\u0131na dal\u0131\u015f yapal\u0131m!<\/p>\n<h2>Docker&#8217;\u0131n Temel Ta\u015flar\u0131 Nelerdir? Konteyner ve \u0130maj Kavramlar\u0131<\/h2>\n<p>Docker&#8217;\u0131 anlaman\u0131n anahtar\u0131, onun temel yap\u0131 ta\u015flar\u0131 olan imajlar ve konteynerler aras\u0131ndaki ili\u015fkiyi kavramaktan ge\u00e7er. Bu iki kavram, Docker ekosisteminin kalbinde yer al\u0131r ve uygulaman\u0131z\u0131n paketlenmesi ile \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 s\u00fcre\u00e7lerini tan\u0131mlar. Geleneksel sanalla\u015ft\u0131rma y\u00f6ntemlerinden farkl\u0131 olarak, Docker bu kavramlar\u0131 kullanarak \u00e7ok daha hafif ve verimli bir izolasyon katman\u0131 sunar. Peki, bu kavramlar tam olarak ne anlama geliyor ve birbirlerinden nas\u0131l ayr\u0131l\u0131yorlar?<\/p>\n<p>\u00d6ncelikle, <strong>Docker \u0130majlar\u0131 (Images)<\/strong> ile ba\u015flayal\u0131m. Bir Docker imaj\u0131, bir uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken t\u00fcm bile\u015fenleri i\u00e7eren, sadece okunabilir bir \u015fablondur. Bu bile\u015fenler aras\u0131nda uygulaman\u0131n kodu, \u00e7al\u0131\u015fma zaman\u0131 (runtime), k\u00fct\u00fcphaneler, ortam de\u011fi\u015fkenleri ve yap\u0131land\u0131rma dosyalar\u0131 bulunur. Bir imaj\u0131, bir yaz\u0131l\u0131m\u0131n &#8220;kal\u0131b\u0131&#8221; veya &#8220;plan\u0131&#8221; olarak d\u00fc\u015f\u00fcnebilirsiniz. \u00d6rne\u011fin, bir Nginx web sunucusu imaj\u0131, Nginx yaz\u0131l\u0131m\u0131n\u0131n kendisini, gerekli t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ve varsay\u0131lan yap\u0131land\u0131rmas\u0131n\u0131 i\u00e7erir. \u0130majlar katmanl\u0131 bir yap\u0131ya sahiptir; yani, bir imaj ba\u015fka bir imaj\u0131n \u00fczerine in\u015fa edilebilir. Bu katmanl\u0131 yap\u0131, imajlar\u0131n boyutunu optimize eder ve yeniden kullan\u0131labilirli\u011fi art\u0131r\u0131r. Docker Hub gibi merkezi bir depodan haz\u0131r imajlar\u0131 \u00e7ekebilir veya kendi \u00f6zel imajlar\u0131n\u0131z\u0131 bir <code>Dockerfile<\/code> kullanarak olu\u015fturabilirsiniz.<\/p>\n<p>Daha sonra, <strong>Docker Konteynerleri (Containers)<\/strong> devreye girer. Bir konteyner, bir Docker imaj\u0131n\u0131n \u00e7al\u0131\u015fan bir \u00f6rne\u011fidir. E\u011fer imaj bir s\u0131n\u0131fsa, konteyner o s\u0131n\u0131f\u0131n bir nesnesidir. Bir imajdan birden fazla konteyner olu\u015fturabilir ve her biri birbirinden tamamen izole edilmi\u015f ba\u011f\u0131ms\u0131z ortamlar olarak \u00e7al\u0131\u015f\u0131r. Her konteynerin kendine ait bir dosya sistemi, a\u011f aray\u00fcz\u00fc ve i\u015flem alan\u0131 vard\u0131r. Bu izolasyon, uygulamalar\u0131n birbirini etkilemeden ayn\u0131 ana bilgisayar \u00fczerinde g\u00fcvenli bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Konteynerler, imajlardan farkl\u0131 olarak yaz\u0131labilir katmanlara sahiptir; yani, bir konteyner \u00e7al\u0131\u015f\u0131rken yap\u0131lan de\u011fi\u015fiklikler (\u00f6rne\u011fin, bir dosyan\u0131n olu\u015fturulmas\u0131 veya bir ayar\u0131n de\u011fi\u015ftirilmesi) sadece o konteynere \u00f6zg\u00fcd\u00fcr ve imaj\u0131 etkilemez. Konteynerleri ba\u015flatabilir, durdurabilir, yeniden ba\u015flatabilir, kald\u0131rabilir ve hatta bir imaja d\u00f6n\u00fc\u015ft\u00fcrerek kal\u0131c\u0131 hale getirebilirsiniz.<\/p>\n<p>Bu temel kavramlar\u0131n yan\u0131 s\u0131ra, Docker ekosisteminde ba\u015fka \u00f6nemli bile\u015fenler de bulunmaktad\u0131r:<\/p>\n<ul>\n<li><strong>Docker Engine:<\/strong> Docker&#8217;\u0131n ana bile\u015fenidir ve konteynerleri olu\u015fturan, \u00e7al\u0131\u015ft\u0131ran ve y\u00f6neten arka plan servisidir (daemon). Kullan\u0131c\u0131lar, Docker CLI (Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc) arac\u0131l\u0131\u011f\u0131yla Docker Engine ile etkile\u015fime girer.<\/li>\n<li><strong>Dockerfile:<\/strong> Kendi Docker imajlar\u0131n\u0131z\u0131 olu\u015fturmak i\u00e7in kullan\u0131lan talimatlar\u0131 i\u00e7eren metin dosyas\u0131d\u0131r. Bu dosya, uygulaman\u0131z\u0131n nas\u0131l in\u015fa edilece\u011fini ve hangi ba\u011f\u0131ml\u0131l\u0131klara sahip oldu\u011funu ad\u0131m ad\u0131m tan\u0131mlar.<\/li>\n<li><strong>Docker Hub:<\/strong> Docker imajlar\u0131 i\u00e7in bulut tabanl\u0131 bir kay\u0131t defteridir (registry). Binlerce haz\u0131r imaj\u0131 bar\u0131nd\u0131r\u0131r ve kendi imajlar\u0131n\u0131z\u0131 depolaman\u0131za, payla\u015fman\u0131za olanak tan\u0131r.<\/li>\n<\/ul>\n<p>Geleneksel sanal makineler (VM&#8217;ler) ile Docker konteynerleri aras\u0131ndaki temel fark\u0131 anlamak da \u00f6nemlidir. Sanal makineler, her biri kendi i\u015fletim sistemini (Guest OS) i\u00e7eren tam te\u015fekk\u00fcll\u00fc sanal donan\u0131m katmanlar\u0131 \u00fczerinde \u00e7al\u0131\u015f\u0131r. Bu da onlar\u0131 a\u011f\u0131r ve kaynak yo\u011fun yapar. Docker konteynerleri ise ana bilgisayar\u0131n i\u015fletim sistemini (Host OS) payla\u015f\u0131r ve sadece uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7erir. Bu &#8220;i\u015fletim sistemi sanalla\u015ft\u0131rmas\u0131&#8221; yakla\u015f\u0131m\u0131, konteynerleri \u00e7ok daha hafif, h\u0131zl\u0131 ve verimli hale getirir. Sonu\u00e7 olarak, Docker&#8217;\u0131n bu temel ta\u015flar\u0131, modern uygulama geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde esneklik, verimlilik ve tutarl\u0131l\u0131k sa\u011flayarak devrim yaratm\u0131\u015ft\u0131r.<\/p>\n<h2>Ubuntu \u00dczerinde Docker Nas\u0131l Kurulur? Ad\u0131m Ad\u0131m Kurulum Rehberi<\/h2>\n<p>Docker&#8217;\u0131n ne oldu\u011funu ve neden \u00f6nemli oldu\u011funu anlad\u0131ktan sonra, s\u0131ra onu Ubuntu sisteminize kurmaya geldi. Bu b\u00f6l\u00fcm, Docker Engine&#8217;i Ubuntu 20.04 veya 22.04 gibi g\u00fcncel bir Ubuntu s\u00fcr\u00fcm\u00fcne sorunsuz bir \u015fekilde y\u00fcklemek i\u00e7in ad\u0131m ad\u0131m bir rehber sunmaktad\u0131r. Kurulum s\u00fcreci, sisteminizin g\u00fcncel olmas\u0131n\u0131 sa\u011flamak, gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemek ve Docker&#8217;\u0131n resmi deposunu eklemek gibi birka\u00e7 basit ad\u0131mdan olu\u015fur. Bu ad\u0131mlar\u0131 dikkatlice takip ederek, k\u0131sa s\u00fcrede ilk Docker konteynerinizi \u00e7al\u0131\u015ft\u0131rmaya haz\u0131r hale geleceksiniz. Kurulum s\u0131ras\u0131nda herhangi bir hata ya\u015famamak ad\u0131na, her komutu do\u011fru s\u0131rayla ve dikkatlice uygulaman\u0131z \u00f6nemlidir.<\/p>\n<h3>Ad\u0131m 1: Sistem G\u00fcncellemesi ve Gerekli Paketlerin Kurulumu<\/h3>\n<p>Kuruluma ba\u015flamadan \u00f6nce, sisteminizin g\u00fcncel oldu\u011fundan emin olmak her zaman iyi bir uygulamad\u0131r. Ayr\u0131ca, Docker&#8217;\u0131n HTTPS \u00fczerinden paket depolar\u0131na eri\u015febilmesi i\u00e7in baz\u0131 yard\u0131mc\u0131 paketlere ihtiyac\u0131m\u0131z var. Terminali a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\nsudo apt update\nsudo apt install ca-certificates curl gnupg lsb-release\n    <\/code><\/pre>\n<p><code>sudo apt update<\/code> komutu, paket listelerinizi g\u00fcncellerken, <code>sudo apt install<\/code> komutu ise <code>ca-certificates<\/code> (g\u00fcvenli sertifikalar i\u00e7in), <code>curl<\/code> (URL&#8217;lerden veri almak i\u00e7in), <code>gnupg<\/code> (GPG anahtarlar\u0131n\u0131 y\u00f6netmek i\u00e7in) ve <code>lsb-release<\/code> (Linux Standard Base bilgilerini almak i\u00e7in) paketlerini kurar. Bu paketler, Docker&#8217;\u0131n resmi deposunu sisteminize g\u00fcvenli bir \u015fekilde eklemek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>Ad\u0131m 2: Docker&#8217;\u0131n GPG Anahtar\u0131n\u0131 Eklemek<\/h3>\n<p>Docker&#8217;\u0131n resmi deposundan indirilen paketlerin do\u011frulu\u011funu sa\u011flamak i\u00e7in Docker&#8217;\u0131n GPG anahtar\u0131n\u0131 sisteminizin anahtar halkas\u0131na eklememiz gerekir. Bu, indirdi\u011fimiz paketlerin ger\u00e7ekten Docker taraf\u0131ndan yay\u0131nland\u0131\u011f\u0131n\u0131 ve de\u011fi\u015ftirilmedi\u011fini do\u011frulamam\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code>\nsudo mkdir -p \/etc\/apt\/keyrings\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\n    <\/code><\/pre>\n<p>\u0130lk komut, GPG anahtarlar\u0131 i\u00e7in bir dizin olu\u015ftururken, ikinci komut Docker&#8217;\u0131n GPG anahtar\u0131n\u0131 indirir ve <code>\/etc\/apt\/keyrings<\/code> dizinine kaydeder. <code>--dearmor<\/code> se\u00e7ene\u011fi, anahtar\u0131 APT&#8217;nin anlayabilece\u011fi bir formata d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/p>\n<h3>Ad\u0131m 3: Docker Deposunu Eklemek<\/h3>\n<p>\u015eimdi, Docker paketlerinin bulundu\u011fu resmi depoyu APT kaynak listenize eklememiz gerekiyor. Bu sayede <code>apt<\/code> komutunu kullanarak Docker&#8217;\u0131 kolayca kurabilir ve g\u00fcncelleyebilirsiniz.<\/p>\n<pre><code>\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\\n  $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null\n    <\/code><\/pre>\n<p>Bu komut, sisteminizin mimarisine (<code>dpkg --print-architecture<\/code>) ve Ubuntu s\u00fcr\u00fcm\u00fcn\u00fcze (<code>lsb_release -cs<\/code>) uygun Docker deposu sat\u0131r\u0131n\u0131 <code>\/etc\/apt\/sources.list.d\/docker.list<\/code> dosyas\u0131na ekler. <code>signed-by=\/etc\/apt\/keyrings\/docker.gpg<\/code> k\u0131sm\u0131, bu depodan indirilen paketlerin daha \u00f6nce ekledi\u011fimiz GPG anahtar\u0131 ile imzalanm\u0131\u015f olmas\u0131 gerekti\u011fini belirtir.<\/p>\n<h3>Ad\u0131m 4: Docker Engine&#8217;i Kurmak<\/h3>\n<p>Depoyu ekledikten sonra, paket listelerinizi tekrar g\u00fcncelleyin ve Docker Engine&#8217;i, Docker CLI&#8217;yi ve containerd&#8217;i kurun:<\/p>\n<pre><code>\nsudo apt update\nsudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n    <\/code><\/pre>\n<p>Bu komut, Docker&#8217;\u0131n ana bile\u015fenlerini kurar. <code>docker-ce<\/code> (Community Edition) Docker Engine&#8217;in kendisidir, <code>docker-ce-cli<\/code> Docker komut sat\u0131r\u0131 aray\u00fcz\u00fcd\u00fcr ve <code>containerd.io<\/code>, konteyner ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc y\u00f6neten bir konteyner \u00e7al\u0131\u015fma zaman\u0131d\u0131r. <code>docker-buildx-plugin<\/code> ve <code>docker-compose-plugin<\/code> ise Docker&#8217;\u0131n geli\u015fmi\u015f build ve \u00e7oklu konteyner y\u00f6netim ara\u00e7lar\u0131d\u0131r.<\/p>\n<h3>Ad\u0131m 5: Docker Servisini Do\u011frulamak ve Test Etmek<\/h3>\n<p>Kurulum tamamland\u0131ktan sonra, Docker servisinin \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edebilir ve basit bir test konteyneri \u00e7al\u0131\u015ft\u0131rarak kurulumu do\u011frulayabilirsiniz:<\/p>\n<pre><code>\nsudo systemctl status docker\ndocker run hello-world\n    <\/code><\/pre>\n<p><code>systemctl status docker<\/code> komutu, Docker servisinin durumunu g\u00f6sterir. E\u011fer &#8220;active (running)&#8221; olarak g\u00f6r\u00fcyorsan\u0131z, Docker ba\u015far\u0131yla \u00e7al\u0131\u015f\u0131yordur. <code>docker run hello-world<\/code> komutu ise, Docker Hub&#8217;dan &#8220;hello-world&#8221; imaj\u0131n\u0131 \u00e7eker ve ondan bir konteyner \u00e7al\u0131\u015ft\u0131r\u0131r. E\u011fer her \u015fey yolundaysa, terminalinizde &#8220;Hello from Docker!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz. Bu mesaj, Docker kurulumunuzun do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve ilk konteynerinizi ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z\u0131 g\u00f6sterir.<\/p>\n<h3>Ad\u0131m 6: Docker Komutlar\u0131n\u0131 Sudo Olmadan \u00c7al\u0131\u015ft\u0131rmak (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nemli)<\/h3>\n<p>Varsay\u0131lan olarak, Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <code>sudo<\/code> kullanman\u0131z gerekir. Bu, g\u00fcvenlik nedeniyle b\u00f6yledir. Ancak, her seferinde <code>sudo<\/code> yazmak yerine, kullan\u0131c\u0131n\u0131z\u0131 <code>docker<\/code> grubuna ekleyerek bu k\u0131s\u0131tlamay\u0131 kald\u0131rabilirsiniz. Bu ad\u0131m\u0131 dikkatli uygulay\u0131n, \u00e7\u00fcnk\u00fc <code>docker<\/code> grubuna eklenen kullan\u0131c\u0131lar, ana sistem \u00fczerinde k\u00f6k ayr\u0131cal\u0131klar\u0131na benzer yeteneklere sahip olabilir.<\/p>\n<pre><code>\nsudo usermod -aG docker $USER\nnewgrp docker\n    <\/code><\/pre>\n<p>\u0130lk komut, mevcut kullan\u0131c\u0131n\u0131z\u0131 (<code>$USER<\/code> de\u011fi\u015fkeni ile temsil edilir) <code>docker<\/code> grubuna ekler. \u0130kinci komut olan <code>newgrp docker<\/code>, mevcut oturumunuz i\u00e7in grup de\u011fi\u015fikliklerini an\u0131nda etkinle\u015ftirir. Alternatif olarak, oturumu kapat\u0131p tekrar a\u00e7abilirsiniz. Bu ad\u0131mdan sonra, <code>sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. \u00d6rne\u011fin, tekrar <code>docker run hello-world<\/code> komutunu <code>sudo<\/code> olmadan deneyin.<\/p>\n<p>Tebrikler! Ubuntu sisteminize Docker&#8217;\u0131 ba\u015far\u0131yla kurdunuz ve ilk konteynerinizi \u00e7al\u0131\u015ft\u0131rd\u0131n\u0131z. Art\u0131k Docker&#8217;\u0131n g\u00fcc\u00fcnden faydalanarak uygulamalar\u0131n\u0131z\u0131 konteynerize etmeye ve y\u00f6netmeye haz\u0131rs\u0131n\u0131z. Bir sonraki b\u00f6l\u00fcmde, daha pratik uygulamalarla Docker&#8217;\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ke\u015ffedece\u011fiz.<\/p>\n<h2>\u0130lk Docker Konteynerinizi Nas\u0131l \u00c7al\u0131\u015ft\u0131r\u0131rs\u0131n\u0131z? Pratik Uygulamalar<\/h2>\n<p>Docker&#8217;\u0131 Ubuntu sisteminize ba\u015far\u0131yla kurdu\u011funuza g\u00f6re, \u015fimdi s\u0131ra onu ger\u00e7ek d\u00fcnya senaryolar\u0131nda kullanmaya geldi. Bu b\u00f6l\u00fcmde, basit bir Nginx web sunucusunu \u00e7al\u0131\u015ft\u0131rmaktan kendi \u00f6zel web uygulaman\u0131z i\u00e7in bir Docker imaj\u0131 olu\u015fturmaya kadar \u00e7e\u015fitli pratik uygulamalar\u0131 ele alaca\u011f\u0131z. Bu \u00f6rnekler, Docker&#8217;\u0131n g\u00fcc\u00fcn\u00fc ve esnekli\u011fini anlaman\u0131za yard\u0131mc\u0131 olacak ve konteynerle\u015ftirilmi\u015f uygulamalarla \u00e7al\u0131\u015fma konusunda size sa\u011flam bir temel olu\u015fturacakt\u0131r. Her ad\u0131mda, kullan\u0131lan komutlar\u0131 ve bu komutlar\u0131n ne anlama geldi\u011fini a\u00e7\u0131klayarak \u00f6\u011frenme s\u00fcrecinizi kolayla\u015ft\u0131raca\u011f\u0131z.<\/p>\n<h3>Basit Bir Nginx Konteyneri \u00c7al\u0131\u015ft\u0131rmak<\/h3>\n<p>Bir web sunucusu \u00e7al\u0131\u015ft\u0131rmak, Docker&#8217;\u0131n en yayg\u0131n kullan\u0131m senaryolar\u0131ndan biridir. Nginx, hafif ve y\u00fcksek performansl\u0131 bir web sunucusu oldu\u011fu i\u00e7in bu t\u00fcr bir \u00f6rnek i\u00e7in m\u00fckemmel bir se\u00e7imdir. A\u015fa\u011f\u0131daki komut, Docker Hub&#8217;dan Nginx imaj\u0131n\u0131 \u00e7eker, ondan bir konteyner olu\u015fturur ve onu arka planda \u00e7al\u0131\u015ft\u0131r\u0131r. Ayr\u0131ca, ana bilgisayar\u0131n\u0131z\u0131n 80 numaral\u0131 portunu konteynerin 80 numaral\u0131 portuna e\u015fleyerek d\u0131\u015far\u0131dan eri\u015filebilir hale getiririz.<\/p>\n<pre><code>\ndocker run -d -p 80:80 --name my-nginx nginx\n    <\/code><\/pre>\n<p>Bu komutun bile\u015fenlerini inceleyelim:<\/p>\n<ul>\n<li><code>docker run<\/code>: Yeni bir konteyner olu\u015fturup \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><code>-d<\/code> (<code>--detach<\/code>): Konteyneri arka planda (detached mode) \u00e7al\u0131\u015ft\u0131r\u0131r, b\u00f6ylece terminaliniz serbest kal\u0131r.<\/li>\n<li><code>-p 80:80<\/code> (<code>--publish<\/code>): Ana bilgisayar\u0131n (host) 80 numaral\u0131 portunu konteynerin 80 numaral\u0131 portuna e\u015fler. B\u00f6ylece web taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost<\/code> adresine giderek Nginx sunucusuna eri\u015febilirsiniz.<\/li>\n<li><code>--name my-nginx<\/code>: Konteynerinize okunabilir bir isim verir. Bu, birden fazla konteyneri y\u00f6netirken kolayl\u0131k sa\u011flar.<\/li>\n<li><code>nginx<\/code>: Kullan\u0131lacak Docker imaj\u0131n\u0131n ad\u0131d\u0131r. E\u011fer yerel olarak bulunmuyorsa, Docker Hub&#8217;dan otomatik olarak \u00e7ekilecektir.<\/li>\n<\/ul>\n<p>Konteynerin \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<\/p>\n<pre><code>\ndocker ps\n    <\/code><\/pre>\n<p>Bu komut, \u00e7al\u0131\u015fan t\u00fcm konteynerleri listeler. Nginx konteynerinizi listede g\u00f6rmelisiniz. \u015eimdi web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve <code>http:\/\/localhost<\/code> adresine gidin. Nginx&#8217;in varsay\u0131lan &#8220;Welcome to nginx!&#8221; sayfas\u0131n\u0131 g\u00f6rmelisiniz. Bu, ilk web sunucunuzu bir Docker konteynerinde ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z anlam\u0131na gelir.<\/p>\n<p>Konteyneri durdurmak ve kald\u0131rmak i\u00e7in:<\/p>\n<pre><code>\ndocker stop my-nginx\ndocker rm my-nginx\n    <\/code><\/pre>\n<p><code>docker stop<\/code> konteyneri durdururken, <code>docker rm<\/code> durdurulmu\u015f bir konteyneri sistemden kald\u0131r\u0131r. Bu komutlar, konteyner ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc y\u00f6netmek i\u00e7in temel ara\u00e7lard\u0131r.<\/p>\n<h3>Kendi Web Uygulaman\u0131z \u0130\u00e7in Dockerfile Olu\u015fturma<\/h3>\n<p>Haz\u0131r imajlar\u0131 kullanmak harika olsa da, genellikle kendi uygulamalar\u0131n\u0131z\u0131 konteynerize etmeniz gerekir. Bunun i\u00e7in <code>Dockerfile<\/code> ad\u0131 verilen bir metin dosyas\u0131 kullan\u0131r\u0131z. Bir <code>Dockerfile<\/code>, Docker&#8217;\u0131n bir imaj\u0131 nas\u0131l in\u015fa edece\u011fini ad\u0131m ad\u0131m talimatlarla anlat\u0131r. A\u015fa\u011f\u0131da, basit bir Python Flask web uygulamas\u0131 i\u00e7in bir <code>Dockerfile<\/code> \u00f6rne\u011fi ve onu nas\u0131l olu\u015fturup \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z g\u00f6sterilmi\u015ftir.<\/p>\n<h4>Vaka Analizi: Python Flask Uygulamas\u0131n\u0131 Konteynerize Etme<\/h4>\n<p>Bir geli\u015ftirici, yerel makinesinde \u00e7al\u0131\u015fan basit bir Python Flask uygulamas\u0131n\u0131 Docker ile konteynerize etmek istiyor. Uygulama, kullan\u0131c\u0131lara &#8220;Merhaba Docker!&#8221; mesaj\u0131 g\u00f6steren tek bir sayfadan olu\u015fuyor. Amac\u0131, bu uygulamay\u0131 farkl\u0131 ortamlara kolayca da\u011f\u0131tabilmek ve ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131ndan ka\u00e7\u0131nmak. \u0130\u015fte bunun i\u00e7in izleyece\u011fi ad\u0131mlar:<\/p>\n<ol>\n<li><strong>Uygulama Dosyalar\u0131n\u0131 Olu\u015fturma:<\/strong><br \/>\n            \u00d6ncelikle, uygulaman\u0131n kodunu i\u00e7eren bir dizin olu\u015fturulur (\u00f6rne\u011fin, <code>my-flask-app<\/code>).<br \/>\n            Bu dizinin i\u00e7ine <code>app.py<\/code> ad\u0131nda bir dosya ve <code>requirements.txt<\/code> ad\u0131nda bir ba\u011f\u0131ml\u0131l\u0131k dosyas\u0131 olu\u015fturulur.<\/p>\n<pre><code>\n# app.py\nfrom flask import Flask\napp = Flask(__name__)\n\n@app.route('\/')\ndef hello():\n    return \"Merhaba Docker! Bu benim konteynerize edilmi\u015f Flask uygulamam.\"\n\nif __name__ == '__main__':\n    app.run(host='0.0.0.0', port=5000)\n            <\/code><\/pre>\n<pre><code>\n# requirements.txt\nFlask==2.3.3\n            <\/code><\/pre>\n<\/li>\n<li><strong>Dockerfile Olu\u015fturma:<\/strong><br \/>\n            Ayn\u0131 dizine (<code>my-flask-app<\/code>), <code>Dockerfile<\/code> ad\u0131nda bir dosya olu\u015fturulur (dosya ad\u0131 tam olarak &#8216;Dockerfile&#8217; olmal\u0131 ve uzant\u0131s\u0131 olmamal\u0131d\u0131r).<\/p>\n<pre><code>\n# Dockerfile\n# Bir Python 3.9 tabanl\u0131 imaj kullan\nFROM python:3.9-slim-buster\n\n# \u00c7al\u0131\u015fma dizinini ayarla\nWORKDIR \/app\n\n# Ba\u011f\u0131ml\u0131l\u0131klar dosyas\u0131n\u0131 kopyala\nCOPY requirements.txt .\n\n# Ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckle\nRUN pip install -r requirements.txt\n\n# Uygulama kodunu kopyala\nCOPY . .\n\n# Uygulaman\u0131n \u00e7al\u0131\u015faca\u011f\u0131 portu belirt\nEXPOSE 5000\n\n# Uygulamay\u0131 ba\u015flat\nCMD [\"python\", \"app.py\"]\n            <\/code><\/pre>\n<p>Bu <code>Dockerfile<\/code>&#8216;daki komutlar\u0131n a\u00e7\u0131klamalar\u0131:<\/p>\n<ul>\n<li><code>FROM python:3.9-slim-buster<\/code>: \u0130maj\u0131m\u0131z\u0131n temelini belirler. Burada, Python 3.9&#8217;un hafif bir Debian (buster) s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131yoruz.<\/li>\n<li><code>WORKDIR \/app<\/code>: Konteyner i\u00e7inde \u00e7al\u0131\u015fma dizinini <code>\/app<\/code> olarak ayarlar. Sonraki t\u00fcm komutlar bu dizinde \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><code>COPY requirements.txt .<\/code>: Yerel makinenizdeki <code>requirements.txt<\/code> dosyas\u0131n\u0131 konteynerin <code>\/app<\/code> dizinine kopyalar.<\/li>\n<li><code>RUN pip install -r requirements.txt<\/code>: Konteyner i\u00e7inde Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fckler.<\/li>\n<li><code>COPY . .<\/code>: Yerel dizindeki t\u00fcm di\u011fer dosyalar\u0131 (yani <code>app.py<\/code>) konteynerin <code>\/app<\/code> dizinine kopyalar.<\/li>\n<li><code>EXPOSE 5000<\/code>: Konteynerin 5000 numaral\u0131 portu dinledi\u011fini belirtir. Bu bir belgeleme gibidir, ger\u00e7ek port e\u015flemesini yapmaz.<\/li>\n<li><code>CMD [\"python\", \"app.py\"]<\/code>: Konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lacak komutu tan\u0131mlar. Bu, Flask uygulamas\u0131n\u0131 ba\u015flat\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u0130maj\u0131 Olu\u015fturma:<\/strong><br \/>\n            <code>my-flask-app<\/code> dizininde terminali a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak Docker imaj\u0131n\u0131z\u0131 olu\u015fturun:<\/p>\n<pre><code>\ndocker build -t my-flask-app .\n            <\/code><\/pre>\n<p><code>-t my-flask-app<\/code>: Olu\u015fturulan imaja <code>my-flask-app<\/code> etiketini verir. Sondaki nokta (<code>.<\/code>), <code>Dockerfile<\/code>&#8216;\u0131n mevcut dizinde oldu\u011funu belirtir.<\/p>\n<\/li>\n<li><strong>Konteyneri \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n            \u0130maj\u0131 olu\u015fturduktan sonra, ondan bir konteyner \u00e7al\u0131\u015ft\u0131rabilirsiniz. Uygulama 5000 numaral\u0131 portta \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, ana bilgisayar\u0131n\u0131z\u0131n bir portunu bu porta e\u015flememiz gerekir.<\/p>\n<pre><code>\ndocker run -d -p 5000:5000 --name flask-app my-flask-app\n            <\/code><\/pre>\n<p>\u015eimdi web taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:5000<\/code> adresine giderek uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz. Bu, kendi \u00f6zel uygulaman\u0131z\u0131 ba\u015far\u0131yla konteynerize etti\u011finiz ve \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z anlam\u0131na gelir. Bu y\u00f6ntem, uygulaman\u0131z\u0131n her ortamda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar ve &#8220;Benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; sorununu ortadan kald\u0131r\u0131r.<\/p>\n<\/li>\n<\/ol>\n<p>Bu pratik uygulamalar, Docker&#8217;\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na dair sa\u011flam bir fikir vermi\u015ftir. Konteynerler, geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi basitle\u015ftirerek size b\u00fcy\u00fck bir esneklik ve verimlilik sunar. Bir sonraki b\u00f6l\u00fcmde, daha karma\u015f\u0131k, \u00e7oklu konteyner uygulamalar\u0131n\u0131 Docker Compose ile nas\u0131l y\u00f6netece\u011finizi inceleyece\u011fiz.<\/p>\n<h2>Docker Compose ile \u00c7oklu Konteyner Uygulamalar\u0131 Nas\u0131l Y\u00f6netilir?<\/h2>\n<p>Modern uygulamalar genellikle tek bir bile\u015fenden olu\u015fmaz; veritabanlar\u0131, \u00f6n u\u00e7 sunucular\u0131, arka u\u00e7 API&#8217;leri ve \u00f6nbellek sistemleri gibi birden fazla servisi bir araya getirirler. Bu t\u00fcr \u00e7oklu konteyner uygulamalar\u0131n\u0131 manuel olarak y\u00f6netmek karma\u015f\u0131k ve hataya a\u00e7\u0131k olabilir. \u0130\u015fte tam da bu noktada Docker Compose devreye girer. Docker Compose, \u00e7oklu konteyner Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir ara\u00e7t\u0131r. Tek bir YAML dosyas\u0131 kullanarak, uygulaman\u0131z\u0131n t\u00fcm servislerini, a\u011flar\u0131n\u0131 ve depolama birimlerini yap\u0131land\u0131rabilir ve tek bir komutla t\u00fcm uygulamay\u0131 ba\u015flatabilir veya durdurabilirsiniz. Bu, \u00f6zellikle geli\u015ftirme ortamlar\u0131nda ve CI\/CD s\u00fcre\u00e7lerinde b\u00fcy\u00fck kolayl\u0131k sa\u011flar.<\/p>\n<h3>Docker Compose Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>Docker Compose, birden fazla Docker konteynerini i\u00e7eren uygulamalar\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc y\u00f6netmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Temel olarak, <code>docker-compose.yml<\/code> adl\u0131 bir YAML dosyas\u0131 arac\u0131l\u0131\u011f\u0131yla uygulaman\u0131z\u0131n servislerini, her servisin kullanaca\u011f\u0131 imaj\u0131, port e\u015flemelerini, volume ba\u011flamalar\u0131n\u0131, ortam de\u011fi\u015fkenlerini ve di\u011fer yap\u0131land\u0131rma detaylar\u0131n\u0131 tan\u0131mlars\u0131n\u0131z. Bu dosya, uygulaman\u0131z\u0131n t\u00fcm mimarisini tek bir yerde belgelemenizi ve y\u00f6netmenizi sa\u011flar.<\/p>\n<p>Docker Compose kullanman\u0131n ba\u015fl\u0131ca avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Kolay Uygulama Tan\u0131m\u0131:<\/strong> T\u00fcm servisleri ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 tek bir dosyada tan\u0131mlars\u0131n\u0131z.<\/li>\n<li><strong>Tek Komutla Y\u00f6netim:<\/strong> <code>docker-compose up<\/code> ile t\u00fcm uygulamay\u0131 tek komutla ba\u015flatabilir, <code>docker-compose down<\/code> ile durdurabilir ve kald\u0131rabilirsiniz.<\/li>\n<li><strong>Geli\u015ftirme Ortam\u0131 Tutarl\u0131l\u0131\u011f\u0131:<\/strong> Geli\u015ftiriciler aras\u0131nda ve farkl\u0131 ortamlar aras\u0131nda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir uygulama ortam\u0131 sa\u011flar.<\/li>\n<li><strong>Servisler Aras\u0131 A\u011f \u0130leti\u015fimi:<\/strong> Compose, servisler aras\u0131nda varsay\u0131lan olarak bir a\u011f olu\u015fturur, b\u00f6ylece servisler birbirleriyle isimleriyle ileti\u015fim kurabilir.<\/li>\n<li><strong>Verimlilik:<\/strong> \u00d6zellikle geli\u015ftirme ve test s\u00fcre\u00e7lerinde kurulum ve da\u011f\u0131t\u0131m s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/li>\n<\/ul>\n<h3>Vaka Analizi: E-ticaret Uygulamas\u0131n\u0131n Docker Compose ile Y\u00f6netilmesi<\/h3>\n<p>Bir e-ticaret uygulamas\u0131 geli\u015ftirdi\u011finizi hayal edin. Bu uygulama genellikle a\u015fa\u011f\u0131daki servislerden olu\u015fur:<\/p>\n<ul>\n<li><strong>Web (\u00d6n U\u00e7):<\/strong> Kullan\u0131c\u0131lar\u0131n etkile\u015fimde bulundu\u011fu aray\u00fcz (\u00f6rne\u011fin, Nginx ile sunulan bir React uygulamas\u0131).<\/li>\n<li><strong>API (Arka U\u00e7):<\/strong> \u0130\u015f mant\u0131\u011f\u0131n\u0131 i\u00e7eren ve veritaban\u0131yla etkile\u015fime giren servis (\u00f6rne\u011fin, bir Node.js veya Python API).<\/li>\n<li><strong>Veritaban\u0131:<\/strong> \u00dcr\u00fcn bilgileri, kullan\u0131c\u0131 verileri vb. depolayan veritaban\u0131 (\u00f6rne\u011fin, PostgreSQL).<\/li>\n<\/ul>\n<p>Bu servisleri tek tek manuel olarak ba\u015flatmak ve y\u00f6netmek yerine, Docker Compose ile hepsini bir araya getirebiliriz. \u0130\u015fte basit bir <code>docker-compose.yml<\/code> \u00f6rne\u011fi:<\/p>\n<pre><code>\n# docker-compose.yml\nversion: '3.8'\n\nservices:\n  web:\n    image: nginx:latest\n    ports:\n      - \"80:80\"\n    volumes:\n      - .\/nginx\/conf.d:\/etc\/nginx\/conf.d\n      - .\/frontend\/build:\/usr\/share\/nginx\/html\n    depends_on:\n      - api\n    networks:\n      - app-network\n\n  api:\n    build: .\/backend\n    ports:\n      - \"5000:5000\"\n    environment:\n      DATABASE_URL: postgres:\/\/user:password@db:5432\/mydatabase\n    depends_on:\n      - db\n    networks:\n      - app-network\n\n  db:\n    image: postgres:13\n    environment:\n      POSTGRES_DB: mydatabase\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n    volumes:\n      - db-data:\/var\/lib\/postgresql\/data\n    networks:\n      - app-network\n\nnetworks:\n  app-network:\n    driver: bridge\n\nvolumes:\n  db-data:\n    driver: local\n    <\/code><\/pre>\n<p>Bu <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 a\u00e7\u0131klayal\u0131m:<\/p>\n<ul>\n<li><code>version: '3.8'<\/code>: Compose dosyas\u0131n\u0131n format s\u00fcr\u00fcm\u00fcn\u00fc belirtir.<\/li>\n<li><code>services:<\/code>: Uygulaman\u0131zdaki her bir servisi tan\u0131mlad\u0131\u011f\u0131n\u0131z b\u00f6l\u00fcmd\u00fcr.\n<ul>\n<li><code>web<\/code>: Nginx tabanl\u0131 \u00f6n u\u00e7 web sunucusu.\n<ul>\n<li><code>image: nginx:latest<\/code>: En son Nginx imaj\u0131n\u0131 kullan\u0131r.<\/li>\n<li><code>ports: - \"80:80\"<\/code>: Ana bilgisayar\u0131n 80 portunu konteynerin 80 portuna e\u015fler.<\/li>\n<li><code>volumes:<\/code>: Yerel dizinleri konteyner i\u00e7indeki dizinlere ba\u011flar. Burada Nginx yap\u0131land\u0131rmas\u0131 ve frontend build dosyalar\u0131 e\u015flenir.<\/li>\n<li><code>depends_on: - api<\/code>: <code>web<\/code> servisinin <code>api<\/code> servisi ba\u015flamadan \u00f6nce ba\u015flamayaca\u011f\u0131n\u0131 belirtir (ba\u015flang\u0131\u00e7 s\u0131ras\u0131n\u0131 garanti eder, sa\u011fl\u0131kl\u0131 \u00e7al\u0131\u015fmay\u0131 de\u011fil).<\/li>\n<\/ul>\n<\/li>\n<li><code>api<\/code>: Arka u\u00e7 API servisi.\n<ul>\n<li><code>build: .\/backend<\/code>: Mevcut dizindeki <code>backend<\/code> klas\u00f6r\u00fcnde bulunan <code>Dockerfile<\/code>&#8216;dan imaj\u0131 in\u015fa eder.<\/li>\n<li><code>ports: - \"5000:5000\"<\/code>: API&#8217;nin portunu e\u015fler.<\/li>\n<li><code>environment:<\/code>: Konteyner i\u00e7ine ortam de\u011fi\u015fkenleri tan\u0131mlar (veritaban\u0131 ba\u011flant\u0131 bilgileri gibi).<\/li>\n<li><code>depends_on: - db<\/code>: API&#8217;nin veritaban\u0131 ba\u015flamadan \u00f6nce ba\u015flamayaca\u011f\u0131n\u0131 belirtir.<\/li>\n<\/ul>\n<\/li>\n<li><code>db<\/code>: PostgreSQL veritaban\u0131 servisi.\n<ul>\n<li><code>image: postgres:13<\/code>: PostgreSQL 13 imaj\u0131n\u0131 kullan\u0131r.<\/li>\n<li><code>environment:<\/code>: Veritaban\u0131 i\u00e7in gerekli ortam de\u011fi\u015fkenlerini ayarlar.<\/li>\n<li><code>volumes: - db-data:\/var\/lib\/postgresql\/data<\/code>: Veritaban\u0131 verilerini kal\u0131c\u0131 olarak saklamak i\u00e7in bir Docker volume&#8217;u kullan\u0131r. Bu, konteyner kald\u0131r\u0131lsa bile verilerin korunmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><code>networks:<\/code>: Servisler aras\u0131 ileti\u015fimi sa\u011flayan \u00f6zel bir a\u011f tan\u0131mlar\u0131z.<\/li>\n<li><code>volumes:<\/code>: Kal\u0131c\u0131 veri depolama i\u00e7in Docker volume&#8217;lar\u0131n\u0131 tan\u0131mlar\u0131z.<\/li>\n<\/ul>\n<h3>Uygulamay\u0131 Ba\u015flatma, Durdurma ve Kald\u0131rma<\/h3>\n<p>Bu <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 (ve ilgili <code>nginx\/conf.d<\/code>, <code>frontend\/build<\/code>, <code>backend<\/code> dizinlerini ve dosyalar\u0131n\u0131) projenizin k\u00f6k dizinine yerle\u015ftirdikten sonra, terminalde o dizine giderek a\u015fa\u011f\u0131daki komutlarla uygulaman\u0131z\u0131 y\u00f6netebilirsiniz:<\/p>\n<pre><code>\n# T\u00fcm servisleri arka planda (detached mode) ba\u015flat\ndocker-compose up -d\n\n# \u00c7al\u0131\u015fan servisleri listele\ndocker-compose ps\n\n# Servis loglar\u0131n\u0131 g\u00f6r\u00fcnt\u00fcle (t\u00fcm servisler i\u00e7in)\ndocker-compose logs -f\n\n# T\u00fcm servisleri durdur ve kald\u0131r (volume'lar hari\u00e7)\ndocker-compose down\n\n# T\u00fcm servisleri, a\u011flar\u0131 ve volume'lar\u0131 kald\u0131r\ndocker-compose down --volumes\n    <\/code><\/pre>\n<p><code>docker-compose up -d<\/code> komutu, t\u00fcm servisleri tan\u0131mlad\u0131\u011f\u0131n\u0131z \u015fekilde olu\u015fturur, a\u011flar\u0131 kurar ve arka planda \u00e7al\u0131\u015ft\u0131r\u0131r. <code>docker-compose down<\/code> komutu ise t\u00fcm konteynerleri durdurur ve kald\u0131r\u0131r. <code>--volumes<\/code> se\u00e7ene\u011fi ile veritaban\u0131 volume&#8217;u gibi kal\u0131c\u0131 depolama birimlerini de kald\u0131rabilirsiniz (dikkatli kullan\u0131n, veri kayb\u0131na yol a\u00e7abilir!).<\/p>\n<p>Docker Compose, \u00f6zellikle mikroservis tabanl\u0131 uygulamalar\u0131n geli\u015ftirilmesinde ve yerel geli\u015ftirme ortamlar\u0131n\u0131n h\u0131zl\u0131 bir \u015fekilde kurulmas\u0131nda vazge\u00e7ilmez bir ara\u00e7t\u0131r. Bu sayede, karma\u015f\u0131k uygulamalar\u0131n t\u00fcm bile\u015fenlerini tutarl\u0131 ve kolay bir \u015fekilde y\u00f6netebilir, geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131rabilirsiniz. Bir sonraki b\u00f6l\u00fcmde, Docker kullan\u0131m\u0131n\u0131z\u0131 daha da optimize etmek i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar\u0131 inceleyece\u011fiz.<\/p>\n<h2>Docker \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar: Daha Verimli \u00c7al\u0131\u015f\u0131n<\/h2>\n<p>Docker&#8217;\u0131 kurmay\u0131 ve temel d\u00fczeyde kullanmay\u0131 \u00f6\u011frendikten sonra, s\u0131ra daha verimli ve g\u00fcvenli bir \u015fekilde \u00e7al\u0131\u015fmak i\u00e7in ileri d\u00fczey ipu\u00e7lar\u0131na ve en iyi uygulamalara geliyor. Bu b\u00f6l\u00fcmde, Docker imajlar\u0131n\u0131z\u0131n boyutunu optimize etmekten g\u00fcvenlik pratiklerine, kaynak y\u00f6netiminden temizlik i\u015flemlerine kadar \u00e7e\u015fitli konular\u0131 ele alaca\u011f\u0131z. Bu teknikler, konteynerle\u015ftirilmi\u015f uygulamalar\u0131n\u0131z\u0131n performans\u0131n\u0131 art\u0131rman\u0131za, kaynak t\u00fcketimini azaltman\u0131za ve genel olarak Docker deneyiminizi geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>\u0130maj Boyutunu Optimize Etmek: Multi-Stage Build Nedir?<\/h3>\n<p>Docker imajlar\u0131n\u0131n boyutu, da\u011f\u0131t\u0131m s\u00fcresini, depolama maliyetini ve g\u00fcvenlik risklerini do\u011frudan etkiler. Daha k\u00fc\u00e7\u00fck imajlar daha h\u0131zl\u0131 \u00e7ekilir, daha az yer kaplar ve sald\u0131r\u0131 y\u00fczeyini azalt\u0131r. \u0130maj boyutunu k\u00fc\u00e7\u00fcltmenin en etkili yollar\u0131ndan biri &#8220;Multi-Stage Build&#8221; kullanmakt\u0131r.<\/p>\n<p>Multi-stage build, bir <code>Dockerfile<\/code> i\u00e7inde birden fazla <code>FROM<\/code> ifadesi kullanarak, imaj olu\u015fturma s\u00fcrecini farkl\u0131 a\u015famalara ay\u0131rman\u0131za olanak tan\u0131r. Genellikle, ilk a\u015famada uygulaman\u0131n derlenmesi veya ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n y\u00fcklenmesi gibi geli\u015ftirme ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 i\u00e7eren daha b\u00fcy\u00fck bir imaj kullan\u0131l\u0131r. \u0130kinci (veya son) a\u015famada ise, sadece uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken nihai \u00e7\u0131kt\u0131lar (derlenmi\u015f kod, statik dosyalar vb.) daha k\u00fc\u00e7\u00fck, minimalist bir temel imaja kopyalan\u0131r. Bu sayede, geli\u015ftirme s\u0131ras\u0131nda kullan\u0131lan derleyiciler, test ara\u00e7lar\u0131 ve gereksiz ba\u011f\u0131ml\u0131l\u0131klar nihai imaja dahil edilmez.<\/p>\n<p>\u00d6rnek bir Node.js uygulamas\u0131 i\u00e7in multi-stage build:<\/p>\n<pre><code>\n# Dockerfile (Multi-Stage Build \u00d6rne\u011fi)\n\n# A\u015fama 1: Build A\u015famas\u0131 (Geli\u015ftirme ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 i\u00e7erir)\nFROM node:18-alpine AS builder\nWORKDIR \/app\nCOPY package*.json .\/\nRUN npm install\nCOPY . .\nRUN npm run build\n\n# A\u015fama 2: \u00c7al\u0131\u015fma Zaman\u0131 A\u015famas\u0131 (Sadece uygulama ve \u00e7al\u0131\u015fma zaman\u0131)\nFROM node:18-alpine\nWORKDIR \/app\nCOPY --from=builder \/app\/node_modules .\/node_modules\nCOPY --from=builder \/app\/dist .\/dist\nCOPY --from=builder \/app\/package*.json .\/\nCMD [\"npm\", \"start\"]\nEXPOSE 3000\n    <\/code><\/pre>\n<p>Bu \u00f6rnekte, ilk a\u015famada (<code>builder<\/code> olarak adland\u0131r\u0131lan) t\u00fcm <code>npm install<\/code> ve <code>npm run build<\/code> i\u015flemleri yap\u0131l\u0131r. \u0130kinci a\u015fama ise, sadece nihai <code>node_modules<\/code> ve derlenmi\u015f <code>dist<\/code> klas\u00f6r\u00fcn\u00fc kopyalayarak \u00e7ok daha k\u00fc\u00e7\u00fck bir \u00e7al\u0131\u015fma zaman\u0131 imaj\u0131 olu\u015fturur. Bu teknik, imaj boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/p>\n<h3>Docker G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>Konteynerler izole olsa da, g\u00fcvenlik her zaman \u00f6ncelikli olmal\u0131d\u0131r. \u0130\u015fte baz\u0131 temel Docker g\u00fcvenlik ipu\u00e7lar\u0131:<\/p>\n<ol>\n<li><strong>Minimal \u0130majlar Kullan\u0131n:<\/strong> <code>alpine<\/code> veya <code>slim<\/code> etiketli imajlar gibi minimalist temel imajlar kullan\u0131n. Bu imajlar, daha az paket i\u00e7erdi\u011fi i\u00e7in sald\u0131r\u0131 y\u00fczeyini daralt\u0131r.<\/li>\n<li><strong>Root Olmayan Kullan\u0131c\u0131lar Kullan\u0131n:<\/strong> Konteyner i\u00e7inde uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <code>root<\/code> kullan\u0131c\u0131s\u0131 yerine \u00f6zel, ayr\u0131cal\u0131ks\u0131z bir kullan\u0131c\u0131 olu\u015fturun.\n<pre><code>\n# Dockerfile i\u00e7inde kullan\u0131c\u0131 olu\u015fturma \u00f6rne\u011fi\nFROM ubuntu:latest\nRUN adduser --system --group appuser\nUSER appuser\nCMD [\".\/my-app\"]\n            <\/code><\/pre>\n<\/li>\n<li><strong>En Az Ayr\u0131cal\u0131k Prensibi:<\/strong> Konteynerlere sadece ihtiya\u00e7 duyduklar\u0131 kaynaklara eri\u015fim izni verin. \u00d6rne\u011fin, <code>--cap-drop ALL --cap-add NET_BIND_SERVICE<\/code> gibi komutlarla yetenekleri d\u00fc\u015f\u00fcrebilirsiniz.<\/li>\n<li><strong>G\u00fcvenlik Taramas\u0131 Yap\u0131n:<\/strong> Docker Hub gibi platformlar, imajlar\u0131n\u0131zdaki bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 taraman\u0131za olanak tan\u0131r. Ayr\u0131ca, Clair veya Trivy gibi ara\u00e7lar\u0131 CI\/CD s\u00fcrecinize entegre edebilirsiniz.<\/li>\n<li><strong>S\u00fcrekli G\u00fcncel Tutun:<\/strong> Docker Engine&#8217;i ve kulland\u0131\u011f\u0131n\u0131z temel imajlar\u0131 d\u00fczenli olarak g\u00fcncelleyin. G\u00fcvenlik yamalar\u0131 ve d\u00fczeltmeleri genellikle yeni s\u00fcr\u00fcmlerle birlikte gelir.<\/li>\n<\/ol>\n<div class=\"expert-tip\">\n<p>Uzman \u0130pucu: Konteynerlerinizi d\u00fczenli olarak temizlemek, disk alan\u0131ndan tasarruf etmenizi ve gereksiz kaynak t\u00fcketimini \u00f6nlemenizi sa\u011flar. Kullan\u0131lmayan imajlar\u0131, konteynerleri ve volume&#8217;lar\u0131 temizlemek i\u00e7in <code>docker system prune -a<\/code> komutunu kullanabilirsiniz. Bu komut, durdurulmu\u015f konteynerleri, kullan\u0131lmayan a\u011flar\u0131, dangling imajlar\u0131 ve iste\u011fe ba\u011fl\u0131 olarak t\u00fcm build cache&#8217;i temizler. Dikkatli kullan\u0131n, \u00e7\u00fcnk\u00fc t\u00fcm kullan\u0131lmayan kaynaklar\u0131 kald\u0131r\u0131r!<\/p>\n<\/p><\/div>\n<h3>Konteyner Kaynak Y\u00f6netimi ve Temizlik<\/h3>\n<p>B\u00fcy\u00fck \u00f6l\u00e7ekli ortamlarda veya yo\u011fun kullan\u0131mda, konteynerlerin kaynak t\u00fcketimini y\u00f6netmek kritik hale gelir. Docker, konteynerlerin CPU ve bellek kullan\u0131m\u0131n\u0131 s\u0131n\u0131rlaman\u0131za olanak tan\u0131r.<\/p>\n<ul>\n<li><strong>Bellek S\u0131n\u0131rlamas\u0131:<\/strong> <code>-m<\/code> veya <code>--memory<\/code> ile bellek limiti belirleyebilirsiniz. \u00d6rne\u011fin, <code>docker run -m 512m my-app<\/code> konteynere 512 MB bellek s\u0131n\u0131r\u0131 koyar.<\/li>\n<li><strong>CPU S\u0131n\u0131rlamas\u0131:<\/strong> <code>--cpus<\/code> ile CPU \u00e7ekirdek say\u0131s\u0131n\u0131, <code>--cpu-shares<\/code> ile CPU a\u011f\u0131rl\u0131\u011f\u0131n\u0131 belirleyebilirsiniz. \u00d6rne\u011fin, <code>docker run --cpus 0.5 my-app<\/code> konteynere yar\u0131m CPU \u00e7ekirde\u011fi ay\u0131r\u0131r.<\/li>\n<\/ul>\n<p>Zamanla, sisteminizde \u00e7ok say\u0131da kullan\u0131lmayan Docker imaj\u0131, durdurulmu\u015f konteyner ve volume birikebilir. Bu, disk alan\u0131n\u0131 t\u00fcketir ve performans\u0131 etkileyebilir. D\u00fczenli temizlik yapmak \u00f6nemlidir:<\/p>\n<pre><code>\n# Durdurulmu\u015f t\u00fcm konteynerleri kald\u0131r\ndocker container prune\n\n# Kullan\u0131lmayan t\u00fcm imajlar\u0131 kald\u0131r (hi\u00e7bir konteyner taraf\u0131ndan kullan\u0131lmayan)\ndocker image prune\n\n# Hi\u00e7bir konteyner taraf\u0131ndan kullan\u0131lmayan t\u00fcm volume'lar\u0131 kald\u0131r\ndocker volume prune\n\n# Yukar\u0131dakilerin hepsini ve daha fazlas\u0131n\u0131 temizle (dikkatli kullan\u0131n!)\ndocker system prune\n# T\u00fcm durdurulmu\u015f konteynerleri, kullan\u0131lmayan a\u011flar\u0131, dangling imajlar\u0131 ve iste\u011fe ba\u011fl\u0131 olarak t\u00fcm build cache'i temizler.\n# T\u00fcm kullan\u0131lmayan imajlar\u0131 (dangling ve hi\u00e7 bir konteyner taraf\u0131ndan referans al\u0131nmayan) kald\u0131rmak i\u00e7in:\ndocker system prune -a\n    <\/code><\/pre>\n<p>Bu komutlar, Docker ortam\u0131n\u0131z\u0131 d\u00fczenli ve optimize tutman\u0131za yard\u0131mc\u0131 olur. \u00d6zellikle <code>docker system prune -a<\/code> komutu, disk alan\u0131n\u0131 geri kazanmak i\u00e7in olduk\u00e7a etkilidir, ancak dikkatli kullan\u0131lmal\u0131d\u0131r \u00e7\u00fcnk\u00fc geri d\u00f6n\u00fc\u015f\u00fc olmayan bir temizlik yapar. Bu ipu\u00e7lar\u0131 ve en iyi uygulamalarla Docker kullan\u0131m\u0131n\u0131z\u0131 daha profesyonel bir seviyeye ta\u015f\u0131yabilir, uygulamalar\u0131n\u0131z\u0131n daha g\u00fcvenli, verimli ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<h2>Sonu\u00e7: Docker ile Geli\u015ftirme S\u00fcre\u00e7lerinizi D\u00f6n\u00fc\u015ft\u00fcr\u00fcn<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Ubuntu \u00fczerinde Docker&#8217;\u0131n kurulumundan temel kullan\u0131m\u0131na, \u00e7oklu konteyner uygulamalar\u0131n\u0131 y\u00f6netmekten ileri d\u00fczey optimizasyon ve g\u00fcvenlik ipu\u00e7lar\u0131na kadar bir\u00e7ok konuyu ele ald\u0131k. &#8220;Benim makinemde \u00e7al\u0131\u015f\u0131yor!&#8221; sorununa veda ederek, uygulamalar\u0131n\u0131z\u0131 her ortamda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilmenizi sa\u011flayan konteyner teknolojisinin temel prensiplerini ve pratik uygulamalar\u0131n\u0131 derinlemesine inceledik. Docker&#8217;\u0131n sundu\u011fu esneklik, verimlilik ve ta\u015f\u0131nabilirlik, modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinin vazge\u00e7ilmez bir par\u00e7as\u0131 haline gelmi\u015ftir.<\/p>\n<p>Docker, sadece uygulamalar\u0131 paketlemekle kalmaz, ayn\u0131 zamanda geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki bo\u015flu\u011fu kapatarak DevOps k\u00fclt\u00fcr\u00fcn\u00fcn benimsenmesini h\u0131zland\u0131r\u0131r. Geli\u015ftiricilerin daha h\u0131zl\u0131 kod yazmas\u0131na ve da\u011f\u0131tmas\u0131na olanak tan\u0131rken, operasyon ekiplerinin de uygulamalar\u0131 daha g\u00fcvenli ve tutarl\u0131 bir \u015fekilde y\u00f6netmesini sa\u011flar. \u0130ster k\u00fc\u00e7\u00fck bir proje \u00fczerinde \u00e7al\u0131\u015fan ba\u011f\u0131ms\u0131z bir geli\u015ftirici olun, ister b\u00fcy\u00fck \u00f6l\u00e7ekli bir kurumsal uygulamay\u0131 y\u00f6neten bir ekip \u00fcyesi, Docker&#8217;\u0131n sundu\u011fu avantajlar yads\u0131namaz. \u0130maj boyutlar\u0131n\u0131 optimize etmek i\u00e7in multi-stage build&#8217;ler kullanmak, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azaltmak i\u00e7in root olmayan kullan\u0131c\u0131lar \u00e7al\u0131\u015ft\u0131rmak ve sistem kaynaklar\u0131n\u0131 d\u00fczenli olarak temizlemek gibi en iyi uygulamalar\u0131 benimsemek, Docker deneyiminizi daha da zenginle\u015ftirecektir.<\/p>\n<p>Gelecekte, konteyner teknolojisinin ve \u00f6zellikle Docker&#8217;\u0131n \u00f6nemi daha da artacak gibi g\u00f6r\u00fcn\u00fcyor. Mikroservis mimarileri, bulut tabanl\u0131 da\u011f\u0131t\u0131mlar ve CI\/CD otomasyonlar\u0131 gibi modern yaz\u0131l\u0131m trendleri, konteynerlerin merkezi bir rol oynamas\u0131n\u0131 gerektiriyor. Kubernetes gibi konteyner orkestrasyon ara\u00e7lar\u0131 ile entegrasyonu sayesinde, Docker konteynerleri b\u00fcy\u00fck \u00f6l\u00e7ekli, da\u011f\u0131t\u0131k sistemlerin y\u00f6netiminde de kilit bir rol oynamaya devam edecektir. Bu nedenle, Docker&#8217;\u0131 \u00f6\u011frenmek ve ustala\u015fmak, g\u00fcn\u00fcm\u00fcz ve gelece\u011fin yaz\u0131l\u0131m d\u00fcnyas\u0131nda rekabet\u00e7i kalmak i\u00e7in kritik bir beceridir. Umar\u0131z bu rehber, Docker yolculu\u011funuzda size sa\u011flam bir ba\u015flang\u0131\u00e7 noktas\u0131 sunmu\u015ftur ve konteyner teknolojisinin sundu\u011fu s\u0131n\u0131rs\u0131z potansiyeli ke\u015ffetmenize ilham vermi\u015ftir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>Docker ve konteyner teknolojisi hakk\u0131nda s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan baz\u0131 sorular ve yan\u0131tlar\u0131:<\/p>\n<table class=\"faq-table\">\n<thead>\n<tr>\n<th>Soru<\/th>\n<th>Cevap<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Docker \u00fccretsiz mi?<\/td>\n<td>Evet, Docker&#8217;\u0131n topluluk s\u00fcr\u00fcm\u00fc (Docker Community Edition &#8211; Docker CE) a\u00e7\u0131k kaynakl\u0131 ve \u00fccretsizdir. \u0130\u015fletmeler i\u00e7in ek \u00f6zellikler sunan \u00fccretli s\u00fcr\u00fcmleri (Docker Desktop Business vb.) de bulunmaktad\u0131r.<\/td>\n<\/tr>\n<tr>\n<td>Docker ile sanal makine aras\u0131ndaki fark nedir?<\/td>\n<td>Sanal makineler (VM&#8217;ler), her biri kendi i\u015fletim sistemini i\u00e7eren tam te\u015fekk\u00fcll\u00fc sanal donan\u0131m katmanlar\u0131 \u00fczerinde \u00e7al\u0131\u015f\u0131r. Docker konteynerleri ise ana bilgisayar\u0131n i\u015fletim sistemini payla\u015f\u0131r ve sadece uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7erir. Bu, konteynerleri VM&#8217;lerden \u00e7ok daha hafif, h\u0131zl\u0131 ve verimli yapar.<\/td>\n<\/tr>\n<tr>\n<td>Docker konteynerleri g\u00fcvenli midir?<\/td>\n<td>Konteynerler, uygulamalar i\u00e7in bir izolasyon katman\u0131 sa\u011flar ve bu da g\u00fcvenli\u011fi art\u0131r\u0131r. Ancak, imajlar\u0131n\u0131z\u0131 g\u00fcvenilir kaynaklardan almak, root olmayan kullan\u0131c\u0131lar kullanmak, en az ayr\u0131cal\u0131k prensibini uygulamak ve imajlar\u0131 d\u00fczenli olarak g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 taramak gibi en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir.<\/td>\n<\/tr>\n<tr>\n<td>Konteynerleri nas\u0131l yedeklerim?<\/td>\n<td>Konteynerlerin kendisi genellikle ge\u00e7icidir. \u00d6nemli olan, konteynerlerinizin olu\u015fturuldu\u011fu Docker imajlar\u0131n\u0131 ve konteynerlerin kulland\u0131\u011f\u0131 kal\u0131c\u0131 verileri (Docker volume&#8217;lar\u0131) yedeklemektir. Docker Hub gibi kay\u0131t defterlerine imajlar\u0131n\u0131z\u0131 y\u00fckleyebilir ve volume&#8217;lardaki verileri d\u00fczenli olarak ana bilgisayar\u0131n\u0131za veya harici bir depolama \u00e7\u00f6z\u00fcm\u00fcne yedekleyebilirsiniz.<\/td>\n<\/tr>\n<tr>\n<td>Docker Hub nedir?<\/td>\n<td>Docker Hub, Docker imajlar\u0131 i\u00e7in bulut tabanl\u0131 bir kay\u0131t defteridir (registry). Geli\u015ftiricilerin imajlar\u0131 depolamas\u0131na, payla\u015fmas\u0131na ve bulmas\u0131na olanak tan\u0131r. Binlerce haz\u0131r imaj\u0131 bar\u0131nd\u0131r\u0131r ve kendi \u00f6zel imajlar\u0131n\u0131z\u0131 genel veya \u00f6zel olarak depolayabilirsiniz.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"Ubuntu&#8217;da Docker Kurulumu ve Kullan\u0131m\u0131: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar? Ubuntu&hellip;","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":[1407],"tags":[],"class_list":{"0":"post-38025","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-docker","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>Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?<\/title>\n<meta name=\"description\" content=\"Ubuntu \u00fczerinde Docker&#039;\u0131 kurmak ve kullanmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, konteyner teknolojisinin temellerinden ileri d\u00fczey ipu\u00e7lar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor, projelerinizi verimli y\u00f6netmenizi sa\u011fl\u0131yor.\" \/>\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\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?\" \/>\n<meta property=\"og:description\" content=\"Ubuntu \u00fczerinde Docker&#039;\u0131 kurmak ve kullanmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, konteyner teknolojisinin temellerinden ileri d\u00fczey ipu\u00e7lar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor, projelerinizi verimli y\u00f6netmenizi sa\u011fl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-21T13:23:32+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=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?\",\"datePublished\":\"2026-01-21T13:23:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/\"},\"wordCount\":5083,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Docker\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/\",\"name\":\"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-21T13:23:32+00:00\",\"description\":\"Ubuntu \u00fczerinde Docker'\u0131 kurmak ve kullanmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, konteyner teknolojisinin temellerinden ileri d\u00fczey ipu\u00e7lar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor, projelerinizi verimli y\u00f6netmenizi sa\u011fl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?\"}]},{\"@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":"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?","description":"Ubuntu \u00fczerinde Docker'\u0131 kurmak ve kullanmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, konteyner teknolojisinin temellerinden ileri d\u00fczey ipu\u00e7lar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor, projelerinizi verimli y\u00f6netmenizi sa\u011fl\u0131yor.","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\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/","og_locale":"tr_TR","og_type":"article","og_title":"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?","og_description":"Ubuntu \u00fczerinde Docker'\u0131 kurmak ve kullanmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, konteyner teknolojisinin temellerinden ileri d\u00fczey ipu\u00e7lar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor, projelerinizi verimli y\u00f6netmenizi sa\u011fl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-21T13:23:32+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?","datePublished":"2026-01-21T13:23:32+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/"},"wordCount":5083,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Docker"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/","url":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/","name":"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-21T13:23:32+00:00","description":"Ubuntu \u00fczerinde Docker'\u0131 kurmak ve kullanmak m\u0131 istiyorsunuz? Bu kapsaml\u0131 rehber, konteyner teknolojisinin temellerinden ileri d\u00fczey ipu\u00e7lar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor, projelerinizi verimli y\u00f6netmenizi sa\u011fl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/giris-neden-docker-kullanmalisiniz-ve-ne-ise-yarar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giri\u015f: Neden Docker Kullanmal\u0131s\u0131n\u0131z ve Ne \u0130\u015fe Yarar?"}]},{"@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\/38025","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=38025"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38025\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}