{"id":39051,"date":"2026-02-13T12:21:52","date_gmt":"2026-02-13T09:21:52","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/"},"modified":"2026-02-13T12:21:52","modified_gmt":"2026-02-13T09:21:52","slug":"docker-compose-neden-bu-kadar-onemli","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/","title":{"rendered":"Docker Compose Neden Bu Kadar \u00d6nemli?"},"content":{"rendered":"<p><body><\/p>\n<p>Docker Compose Kurulumu ve Kullan\u0131m\u0131: CentOS 7 \u00dczerinde Ad\u0131m Ad\u0131m Rehber<\/p>\n<p>Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde, \u00e7ok say\u0131da servisi bir arada y\u00f6netmek karma\u015f\u0131k bir hal alabilir. Bu rehberde, CentOS 7 i\u015fletim sistemi \u00fczerinde Docker Compose&#8217;u nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve kullanarak \u00e7ok kapsay\u0131c\u0131l\u0131 uygulamalar\u0131n\u0131z\u0131 kolayca nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Docker Compose, uygulama geli\u015ftiricilerin ve DevOps m\u00fchendislerinin hayat\u0131n\u0131 kolayla\u015ft\u0131ran g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r; gelin, bu arac\u0131 yak\u0131ndan tan\u0131yal\u0131m ve pratik uygulamalarla yeteneklerini ke\u015ffedelim.<\/p>\n<h2>Docker Compose Neden Bu Kadar \u00d6nemli?<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn bulut tabanl\u0131 ve mikroservis mimarili uygulamalar\u0131, genellikle birden fazla ba\u011f\u0131ms\u0131z servisten olu\u015fur. Bir web uygulamas\u0131 d\u00fc\u015f\u00fcn\u00fcn: muhtemelen bir veritaban\u0131na (PostgreSQL, MySQL), bir \u00f6nbellek katman\u0131na (Redis), bir arka u\u00e7 API servisine (Node.js, Python, Java) ve bir web sunucusuna (Nginx, Apache) ihtiya\u00e7 duyar. Bu servislerin her birini ayr\u0131 ayr\u0131 kurmak, yap\u0131land\u0131rmak ve y\u00f6netmek, \u00f6zellikle geli\u015ftirme ve test s\u00fcre\u00e7lerinde ciddi bir zaman ve emek kayb\u0131na yol a\u00e7abilir. Her geli\u015ftiricinin kendi makinesinde ayn\u0131 ortam\u0131 kurmaya \u00e7al\u0131\u015fmas\u0131, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; sorunlar\u0131n\u0131n temelini olu\u015fturur ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini yava\u015flat\u0131r.<\/p>\n<p>\u0130\u015fte tam bu noktada Docker ve onun tamamlay\u0131c\u0131s\u0131 Docker Compose devreye giriyor. Docker, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, hafif &#8220;kapsay\u0131c\u0131lar&#8221; (containers) i\u00e7inde paketleyerek her ortamda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmalar\u0131n\u0131 sa\u011flar. Ancak tek ba\u015f\u0131na Docker, birden fazla kapsay\u0131c\u0131y\u0131 bir arada, uyumlu bir \u015fekilde y\u00f6netmek i\u00e7in yeterli de\u011fildir. Her bir kapsay\u0131c\u0131y\u0131 tek tek ba\u015flatmak, a\u011flar\u0131n\u0131 yap\u0131land\u0131rmak ve aralar\u0131ndaki ba\u011flant\u0131lar\u0131 kurmak manuel olarak yap\u0131ld\u0131\u011f\u0131nda yine zahmetli bir s\u00fcre\u00e7tir.<\/p>\n<p>Docker Compose, bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131ran bir orkestrasyon arac\u0131d\u0131r. Tek bir YAML dosyas\u0131 kullanarak uygulaman\u0131z\u0131n t\u00fcm servislerini, a\u011flar\u0131n\u0131 ve depolama birimlerini tan\u0131mlaman\u0131za olanak tan\u0131r. Bu sayede, t\u00fcm uygulama y\u0131\u011f\u0131n\u0131n\u0131 tek bir komutla aya\u011fa kald\u0131rabilir, durdurabilir veya yeniden ba\u015flatabilirsiniz. Bu yakla\u015f\u0131m, \u00f6zellikle geli\u015ftirme ortamlar\u0131nda tutarl\u0131l\u0131k sa\u011flamak, yeni ekip \u00fcyelerinin projeye h\u0131zl\u0131ca adapte olmas\u0131n\u0131 kolayla\u015ft\u0131rmak ve test s\u00fcre\u00e7lerini standartla\u015ft\u0131rmak a\u00e7\u0131s\u0131ndan hayati \u00f6neme sahiptir. Ayr\u0131ca, \u00fcretim ortamlar\u0131nda da k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli da\u011f\u0131t\u0131mlar i\u00e7in olduk\u00e7a pratik bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p>Docker Compose&#8217;un sa\u011flad\u0131\u011f\u0131 en b\u00fcy\u00fck avantajlardan biri, &#8220;yap\u0131land\u0131rma olarak kod&#8221; (configuration as code) prensibini benimsemesidir. Uygulaman\u0131z\u0131n altyap\u0131 tan\u0131m\u0131 versiyon kontrol sistemlerinde (Git gibi) saklanabilir, b\u00f6ylece de\u011fi\u015fiklikler takip edilebilir ve geri al\u0131nabilir. Bu, ekipler aras\u0131nda i\u015fbirli\u011fini g\u00fc\u00e7lendirir ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini otomatize eder. \u00d6zetle, Docker Compose modern yaz\u0131l\u0131m geli\u015ftirme pratiklerinin vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r ve \u00e7ok kapsay\u0131c\u0131l\u0131 uygulamalar\u0131n y\u00f6netimini basitle\u015ftirerek geli\u015ftirme h\u0131z\u0131n\u0131 ve verimlili\u011fi art\u0131r\u0131r.<\/p>\n<h2>Docker ve Docker Compose: Temel Kavramlara H\u0131zl\u0131 Bir Bak\u0131\u015f<\/h2>\n<p>Docker Compose&#8217;a derinlemesine dalmadan \u00f6nce, temel ald\u0131\u011f\u0131 Docker teknolojisini ve Docker Compose&#8217;un tam olarak ne anlama geldi\u011fini anlamak b\u00fcy\u00fck \u00f6nem ta\u015f\u0131maktad\u0131r. Bu b\u00f6l\u00fcmde, her iki kavram\u0131 da a\u00e7\u0131klayarak zihinsel bir temel olu\u015fturaca\u011f\u0131z.<\/p>\n<h3>Docker Nedir?<\/h3>\n<p>Docker, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve hafif sanal ortamlar olan &#8220;kapsay\u0131c\u0131lar&#8221; i\u00e7inde paketlemeye yarayan a\u00e7\u0131k kaynakl\u0131 bir platformdur. Geleneksel sanal makinelerin (VM) aksine, kapsay\u0131c\u0131lar kendi i\u015fletim sistemlerini i\u00e7ermezler; bunun yerine ana makinenin \u00e7ekirde\u011fini (kernel) payla\u015f\u0131rlar. Bu durum, kapsay\u0131c\u0131lar\u0131 \u00e7ok daha hafif, h\u0131zl\u0131 ba\u015flat\u0131labilir ve kaynak a\u00e7\u0131s\u0131ndan verimli k\u0131lar.<\/p>\n<p>Docker ekosistemi temel olarak \u00fc\u00e7 ana bile\u015fenden olu\u015fur:<\/p>\n<ul>\n<li><strong>Docker Engine:<\/strong> Docker kapsay\u0131c\u0131lar\u0131n\u0131 olu\u015fturan ve \u00e7al\u0131\u015ft\u0131ran ana yaz\u0131l\u0131md\u0131r. Sunucu \u00fczerinde \u00e7al\u0131\u015fan bir daemon (dockerd) ve kullan\u0131c\u0131lar\u0131n daemon ile etkile\u015fim kurmas\u0131n\u0131 sa\u011flayan bir CLI (docker) i\u00e7erir.<\/li>\n<li><strong>Docker Image (Kapsay\u0131c\u0131 Kal\u0131b\u0131):<\/strong> Bir uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli t\u00fcm kodlar\u0131, \u00e7al\u0131\u015fma zaman\u0131n\u0131, sistem ara\u00e7lar\u0131n\u0131, sistem k\u00fct\u00fcphanelerini ve ayarlar\u0131 i\u00e7eren salt okunur bir \u015fablondur. Bir imaj, bir veya daha fazla katmandan olu\u015fur ve bu katmanlar, imaj\u0131n verimlili\u011fini ve yeniden kullan\u0131labilirli\u011fini art\u0131r\u0131r. \u00d6rne\u011fin, bir Ubuntu imaj\u0131n\u0131n \u00fczerine Python ve ard\u0131ndan uygulaman\u0131z\u0131n kodunu i\u00e7eren katmanlar eklenebilir.<\/li>\n<li><strong>Docker Container (Kapsay\u0131c\u0131):<\/strong> Bir Docker imaj\u0131n\u0131n \u00e7al\u0131\u015ft\u0131r\u0131labilir bir \u00f6rne\u011fidir. Kapsay\u0131c\u0131lar, imajdan t\u00fcretilir ve \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131klar\u0131nda izole edilmi\u015f bir ortamda ba\u011f\u0131ms\u0131z bir s\u00fcre\u00e7 olarak \u00e7al\u0131\u015f\u0131rlar. Her kapsay\u0131c\u0131n\u0131n kendine ait bir dosya sistemi, a\u011f aray\u00fcz\u00fc ve i\u015flem alan\u0131 vard\u0131r. Bu izolasyon sayesinde, farkl\u0131 uygulamalar ayn\u0131 sunucu \u00fczerinde \u00e7ak\u0131\u015fmadan \u00e7al\u0131\u015fabilir.<\/li>\n<\/ul>\n<p>Docker&#8217;\u0131n temel amac\u0131, &#8220;bir kez in\u015fa et, her yerde \u00e7al\u0131\u015ft\u0131r&#8221; felsefesini hayata ge\u00e7irmektir. Geli\u015ftirme ortam\u0131nda olu\u015fturulan bir Docker imaj\u0131, test, haz\u0131rl\u0131k ve \u00fcretim ortamlar\u0131nda ayn\u0131 \u015fekilde \u00e7al\u0131\u015facak ve b\u00f6ylece tutarl\u0131l\u0131k sorunlar\u0131n\u0131 ortadan kald\u0131racakt\u0131r.<\/p>\n<h3>Docker Compose Nedir ve Ne \u0130\u015fe Yarar?<\/h3>\n<p>Docker Compose, birden fazla Docker kapsay\u0131c\u0131s\u0131n\u0131 i\u00e7eren uygulamalar\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Docker Engine&#8217;in \u00fczerine in\u015fa edilmi\u015ftir ve tek bir YAML dosyas\u0131 kullanarak uygulaman\u0131z\u0131n t\u00fcm servislerini (veritaban\u0131, \u00f6n u\u00e7, arka u\u00e7 vb.), a\u011flar\u0131n\u0131 ve depolama birimlerini (volumes) yap\u0131land\u0131rman\u0131za olanak tan\u0131r.<\/p>\n<p>Docker Compose&#8217;un temel i\u015flevleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Servis Tan\u0131mlama:<\/strong> Uygulaman\u0131zdaki her bir servisi (\u00f6rne\u011fin, web sunucusu, veritaban\u0131, cache) hangi Docker imaj\u0131n\u0131 kullanaca\u011f\u0131, hangi portlar\u0131 a\u00e7aca\u011f\u0131, hangi \u00e7evresel de\u011fi\u015fkenleri alaca\u011f\u0131 gibi detaylarla birlikte tan\u0131mlaman\u0131z\u0131 sa\u011flar.<\/li>\n<li><strong>A\u011f Y\u00f6netimi:<\/strong> Servisler aras\u0131 ileti\u015fimi sa\u011flamak i\u00e7in \u00f6zel a\u011flar olu\u015fturabilir ve kapsay\u0131c\u0131lar\u0131 bu a\u011flara ba\u011flayabilirsiniz. Bu sayede servisler birbirleriyle isimleri \u00fczerinden kolayca ileti\u015fim kurabilirler.<\/li>\n<li><strong>Depolama Y\u00f6netimi:<\/strong> Kapsay\u0131c\u0131lar silindi\u011finde verilerin kaybolmamas\u0131 i\u00e7in kal\u0131c\u0131 depolama birimleri (volumes) tan\u0131mlaman\u0131za olanak tan\u0131r. Bu, \u00f6zellikle veritabanlar\u0131 gibi durum bilgisi olan servisler i\u00e7in hayati \u00f6neme sahiptir.<\/li>\n<li><strong>Tek Komutla Y\u00f6netim:<\/strong> T\u00fcm tan\u0131mlamalar <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131nda yap\u0131ld\u0131ktan sonra, tek bir <code class=\"language-\">docker-compose up<\/code> komutuyla t\u00fcm servisleri ba\u015flatabilir, <code class=\"language-\">docker-compose down<\/code> ile durdurabilir ve silebilirsiniz. Bu, karma\u015f\u0131k \u00e7ok kapsay\u0131c\u0131l\u0131 uygulamalar\u0131n y\u00f6netimini son derece basitle\u015ftirir.<\/li>\n<\/ul>\n<p>\u00d6zetle, Docker Compose, Docker&#8217;\u0131n tek kapsay\u0131c\u0131 y\u00f6netim yetene\u011fini al\u0131p, onu \u00e7ok kapsay\u0131c\u0131l\u0131, karma\u015f\u0131k uygulamalar\u0131n y\u00f6netimi i\u00e7in g\u00fc\u00e7l\u00fc ve kullan\u0131c\u0131 dostu bir \u00e7\u00f6z\u00fcme d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Bu sayede geli\u015ftiriciler, altyap\u0131 karma\u015f\u0131kl\u0131\u011f\u0131 yerine uygulama mant\u0131\u011f\u0131na odaklanabilirler.<\/p>\n<h2>CentOS 7 \u00dczerine Docker Kurulumu: \u00d6n Haz\u0131rl\u0131klar<\/h2>\n<p>Docker Compose&#8217;u kullanabilmek i\u00e7in \u00f6ncelikle sisteminizde Docker Engine&#8217;in kurulu olmas\u0131 gerekmektedir. Bu b\u00f6l\u00fcmde, CentOS 7 i\u015fletim sistemi \u00fczerinde Docker&#8217;\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayaca\u011f\u0131z. Bu ad\u0131mlar, Docker&#8217;\u0131n resmi belgelerine uygun olarak en g\u00fcncel ve g\u00fcvenli kurulum y\u00f6ntemini izleyecektir. Ba\u015flamadan \u00f6nce, bir CentOS 7 sunucusuna root veya sudo ayr\u0131cal\u0131klar\u0131na sahip bir kullan\u0131c\u0131 ile eri\u015fiminizin oldu\u011fundan emin olun.<\/p>\n<h3>Gerekli Paketlerin Y\u00fcklenmesi<\/h3>\n<p>Docker kurulumuna ba\u015flamadan \u00f6nce, baz\u0131 yard\u0131mc\u0131 paketlerin ve Docker&#8217;\u0131n resmi deposunu sisteme eklememiz gerekmektedir. Bu, Docker paketlerinin do\u011fru bir \u015fekilde indirilip kurulmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<p>\u0130lk olarak, <code class=\"language-\">yum-utils<\/code> paketini kurarak <code class=\"language-\">yum-config-manager<\/code> yard\u0131mc\u0131 program\u0131n\u0131 edinmeliyiz. Bu ara\u00e7, YUM depolar\u0131n\u0131 kolayca y\u00f6netmemizi sa\u011flar. Ayr\u0131ca, <code class=\"language-\">device-mapper-persistent-data<\/code> ve <code class=\"language-\">lvm2<\/code> paketleri de Docker i\u00e7in gerekli olan depolama s\u00fcr\u00fcc\u00fclerini desteklemek amac\u0131yla kurulmal\u0131d\u0131r.<\/p>\n<pre><code>\nsudo yum install -y yum-utils device-mapper-persistent-data lvm2\n    <\/code><\/pre>\n<p>Bu komut, gerekli paketleri indirip kuracakt\u0131r. Kurulum tamamland\u0131ktan sonra, Docker&#8217;\u0131n resmi deposunu sisteminize eklememiz gerekiyor. Bu depo, en g\u00fcncel Docker s\u00fcr\u00fcmlerini bar\u0131nd\u0131r\u0131r.<\/p>\n<pre><code>\nsudo yum-config-manager --add-repo https:\/\/download.docker.com\/linux\/centos\/docker-ce.repo\n    <\/code><\/pre>\n<p>Depo ba\u015far\u0131yla eklendikten sonra, Docker Engine&#8217;i ve ilgili bile\u015fenlerini (Docker CLI, containerd ve Docker Compose plugin &#8211; eski versiyonlar i\u00e7in de\u011fil) kurabiliriz. Ancak bu makalede Docker Compose&#8217;u ayr\u0131 olarak kuraca\u011f\u0131m\u0131z i\u00e7in sadece Docker Engine&#8217;i kuraca\u011f\u0131z.<\/p>\n<pre><code>\nsudo yum install -y docker-ce docker-ce-cli containerd.io\n    <\/code><\/pre>\n<p>Bu komut, Docker Engine, CLI arac\u0131 ve containerd \u00e7al\u0131\u015fma zaman\u0131n\u0131 kuracakt\u0131r. Kurulum i\u015flemi biraz zaman alabilir, sisteminizin internet h\u0131z\u0131na ba\u011fl\u0131 olarak de\u011fi\u015febilir.<\/p>\n<h3>Docker Daemon&#8217;\u0131n Ba\u015flat\u0131lmas\u0131 ve Etkinle\u015ftirilmesi<\/h3>\n<p>Docker paketleri kurulduktan sonra, Docker servisinin (daemon) ba\u015flat\u0131lmas\u0131 ve sistem her a\u00e7\u0131ld\u0131\u011f\u0131nda otomatik olarak \u00e7al\u0131\u015facak \u015fekilde etkinle\u015ftirilmesi gerekmektedir. Bu ad\u0131mlar, Docker&#8217;\u0131n s\u00fcrekli olarak arka planda \u00e7al\u0131\u015fmas\u0131n\u0131 ve kapsay\u0131c\u0131lar\u0131 y\u00f6netmeye haz\u0131r olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Docker servisini ba\u015flatmak i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<pre><code>\nsudo systemctl start docker\n    <\/code><\/pre>\n<p>Servisin ba\u015far\u0131yla ba\u015flat\u0131ld\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in durumunu kontrol edebilirsiniz:<\/p>\n<pre><code>\nsudo systemctl status docker\n    <\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da &#8220;active (running)&#8221; ifadesini g\u00f6rmeniz, Docker servisinin d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<p>\u015eimdi, Docker&#8217;\u0131n sistem yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131n\u0131 sa\u011flamak i\u00e7in etkinle\u015ftirelim:<\/p>\n<pre><code>\nsudo systemctl enable docker\n    <\/code><\/pre>\n<p>Bu komut, Docker servisi i\u00e7in uygun symlink&#8217;leri olu\u015fturarak sistem ba\u015flang\u0131c\u0131nda otomatik olarak y\u00fcklenmesini garantiler.<\/p>\n<h3>Kullan\u0131c\u0131 \u0130zinlerinin Yap\u0131land\u0131r\u0131lmas\u0131<\/h3>\n<p>Varsay\u0131lan olarak, Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in root ayr\u0131cal\u0131klar\u0131na (sudo) ihtiyac\u0131n\u0131z vard\u0131r. Ancak, her seferinde <code class=\"language-\">sudo<\/code> yazmak hem pratik de\u011fildir hem de g\u00fcvenlik a\u00e7\u0131s\u0131ndan baz\u0131 riskler ta\u015f\u0131yabilir. Bu durumu a\u015fmak i\u00e7in, mevcut kullan\u0131c\u0131n\u0131z\u0131 <code class=\"language-\">docker<\/code> grubuna ekleyebilirsiniz. Bu sayede, kullan\u0131c\u0131n\u0131z <code class=\"language-\">sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilir.<\/p>\n<p>Kullan\u0131c\u0131n\u0131z\u0131 <code class=\"language-\">docker<\/code> grubuna eklemek i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n (<code>&lt;kullanici_adiniz&gt;<\/code> yerine kendi kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 yaz\u0131n):<\/p>\n<pre><code>\nsudo usermod -aG docker &lt;kullanici_adiniz&gt;\n    <\/code><\/pre>\n<p>Bu de\u011fi\u015fikli\u011fin etkili olmas\u0131 i\u00e7in oturumu kapat\u0131p tekrar a\u00e7man\u0131z veya a\u015fa\u011f\u0131daki komutu kullanarak mevcut oturumunuzu yeniden y\u00fcklemeniz gerekebilir:<\/p>\n<pre><code>\nnewgrp docker\n    <\/code><\/pre>\n<p>Art\u0131k Docker kurulumunuz tamamlanm\u0131\u015ft\u0131r. Kurulumun do\u011fru yap\u0131ld\u0131\u011f\u0131ndan emin olmak i\u00e7in basit bir test kapsay\u0131c\u0131s\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code>\ndocker run hello-world\n    <\/code><\/pre>\n<p>Bu komut, bir &#8220;hello-world&#8221; imaj\u0131n\u0131 indirip bir kapsay\u0131c\u0131da \u00e7al\u0131\u015ft\u0131racak ve ba\u015far\u0131l\u0131 bir mesaj d\u00f6nd\u00fcrecektir. Bu mesaj\u0131 g\u00f6rd\u00fc\u011f\u00fcn\u00fczde, Docker Engine&#8217;in CentOS 7 sisteminizde ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlayabilirsiniz. Bir sonraki ad\u0131mda, Docker Compose&#8217;u kurmaya haz\u0131r\u0131z.<\/p>\n<h2>CentOS 7 \u00dczerine Docker Compose Kurulumu: Ad\u0131m Ad\u0131m K\u0131lavuz<\/h2>\n<p>Docker Engine kurulumunu ba\u015far\u0131yla tamamlad\u0131ktan sonra, \u00e7ok kapsay\u0131c\u0131l\u0131 uygulamalar\u0131n\u0131z\u0131 y\u00f6netmek i\u00e7in vazge\u00e7ilmez bir ara\u00e7 olan Docker Compose&#8217;u CentOS 7 sisteminize kurmaya ge\u00e7ebiliriz. Docker Compose, Docker Engine&#8217;in bir par\u00e7as\u0131 de\u011fildir ve ayr\u0131 olarak kurulmas\u0131 gerekir. Genellikle bir Python paketi olarak veya do\u011frudan bir binary dosya olarak da\u011f\u0131t\u0131l\u0131r. CentOS 7 \u00fczerinde en yayg\u0131n ve \u00f6nerilen y\u00f6ntem, Docker Compose binary dosyas\u0131n\u0131 GitHub \u00fczerinden indirmek ve \u00e7al\u0131\u015ft\u0131r\u0131labilir hale getirmektir.<\/p>\n<h3>Docker Compose Binary \u0130ndirme<\/h3>\n<p>Docker Compose&#8217;un en g\u00fcncel ve kararl\u0131 s\u00fcr\u00fcm\u00fcn\u00fc indirmek i\u00e7in GitHub depolar\u0131n\u0131 kullanaca\u011f\u0131z. \u0130ndirme i\u015flemi i\u00e7in <code class=\"language-\">curl<\/code> komutunu ve ard\u0131ndan indirilen dosyay\u0131 do\u011fru konuma yerle\u015ftirmek i\u00e7in <code class=\"language-\">sudo mv<\/code> komutunu kullanaca\u011f\u0131z. Bu i\u015flem, Docker Compose&#8217;u sisteminizin PATH&#8217;inde eri\u015filebilir bir yere yerle\u015ftirmenizi sa\u011flar.<\/p>\n<p>\u0130lk olarak, Docker Compose&#8217;un hangi s\u00fcr\u00fcm\u00fcn\u00fc kurmak istedi\u011finize karar vermelisiniz. Genellikle en son kararl\u0131 s\u00fcr\u00fcm\u00fc kullanmak en iyisidir. Docker Compose&#8217;un GitHub yay\u0131nlar sayfas\u0131n\u0131 (<code>https:\/\/github.com\/docker\/compose\/releases<\/code>) ziyaret ederek en g\u00fcncel s\u00fcr\u00fcm numaras\u0131n\u0131 kontrol edebilirsiniz. Bu rehber yaz\u0131ld\u0131\u011f\u0131 s\u0131rada, \u00f6rne\u011fin <code class=\"language-\">1.29.2<\/code> veya daha yeni bir s\u00fcr\u00fcm kararl\u0131 olarak kabul edilebilir. A\u015fa\u011f\u0131daki \u00f6rnekte <code class=\"language-\">1.29.2<\/code> s\u00fcr\u00fcm\u00fcn\u00fc kullanaca\u011f\u0131z, ancak siz kendi tercihinize g\u00f6re g\u00fcncelleyebilirsiniz:<\/p>\n<pre><code>\nsudo curl -L \"https:\/\/github.com\/docker\/compose\/releases\/download\/1.29.2\/docker-compose-$(uname -s)-$(uname -m)\" -o \/usr\/local\/bin\/docker-compose\n    <\/code><\/pre>\n<p>Bu komutun a\u00e7\u0131klamas\u0131:<\/p>\n<ul>\n<li><code>sudo curl -L<\/code>: <code class=\"language-\">curl<\/code> komutunu kullanarak dosyay\u0131 indirir. <code class=\"language-\">-L<\/code> bayra\u011f\u0131, y\u00f6nlendirmeleri (redirects) takip etmesini sa\u011flar.<\/li>\n<li><code>\"https:\/\/github.com\/docker\/compose\/releases\/download\/1.29.2\/docker-compose-$(uname -s)-$(uname -m)\"<\/code>: \u0130ndirilecek Docker Compose binary dosyas\u0131n\u0131n URL&#8217;sidir. <code class=\"language-\">$(uname -s)<\/code> sistem \u00e7ekirde\u011fi ad\u0131n\u0131 (\u00f6rne\u011fin Linux), <code class=\"language-\">$(uname -m)<\/code> ise makine donan\u0131m ad\u0131n\u0131 (\u00f6rne\u011fin x86_64) otomatik olarak alg\u0131lar ve do\u011fru binary dosyas\u0131n\u0131 indirmeyi sa\u011flar.<\/li>\n<li><code>-o \/usr\/local\/bin\/docker-compose<\/code>: \u0130ndirilen dosyay\u0131 <code class=\"language-\">\/usr\/local\/bin\/docker-compose<\/code> yoluna kaydeder. Bu dizin, sistem PATH&#8217;inde yer ald\u0131\u011f\u0131ndan, <code class=\"language-\">docker-compose<\/code> komutunu herhangi bir yerden \u00e7al\u0131\u015ft\u0131rabilmenizi sa\u011flar.<\/li>\n<\/ul>\n<p>\u0130ndirme i\u015flemi tamamland\u0131ktan sonra, dosyan\u0131n do\u011fru bir \u015fekilde indirildi\u011finden emin olmak i\u00e7in dosya boyutunu kontrol edebilirsiniz. Herhangi bir hata olu\u015fursa veya dosya boyutu beklenenden k\u00fc\u00e7\u00fckse, indirme i\u015flemi ba\u015far\u0131s\u0131z olmu\u015f olabilir.<\/p>\n<h3>Y\u00fcr\u00fct\u00fclebilir \u0130zinlerin Verilmesi<\/h3>\n<p>\u0130ndirdi\u011finiz Docker Compose binary dosyas\u0131, varsay\u0131lan olarak y\u00fcr\u00fct\u00fclebilir (executable) izne sahip de\u011fildir. Bu nedenle, onu bir program olarak \u00e7al\u0131\u015ft\u0131rabilmek i\u00e7in bu izni manuel olarak vermemiz gerekmektedir. Bu ad\u0131m, Linux sistemlerinde g\u00fcvenlik ve dosya y\u00f6netimi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir.<\/p>\n<p>A\u015fa\u011f\u0131daki komutu kullanarak <code class=\"language-\">\/usr\/local\/bin\/docker-compose<\/code> dosyas\u0131na y\u00fcr\u00fct\u00fclebilir izinleri verin:<\/p>\n<pre><code>\nsudo chmod +x \/usr\/local\/bin\/docker-compose\n    <\/code><\/pre>\n<p><code>chmod +x<\/code> komutu, belirtilen dosyaya y\u00fcr\u00fctme izni ekler. Bu i\u015flemden sonra, sisteminiz art\u0131k <code class=\"language-\">docker-compose<\/code> komutunu tan\u0131yacak ve \u00e7al\u0131\u015ft\u0131rabilecektir.<\/p>\n<h3>Kurulumun Do\u011frulanmas\u0131<\/h3>\n<p>Docker Compose kurulumunun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in basit bir komut \u00e7al\u0131\u015ft\u0131rabiliriz. Bu komut, y\u00fckl\u00fc Docker Compose s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6sterecektir.<\/p>\n<pre><code>\ndocker-compose --version\n    <\/code><\/pre>\n<p>E\u011fer kurulum ba\u015far\u0131l\u0131ysa, \u00e7\u0131kt\u0131 olarak \u015funa benzer bir sonu\u00e7 g\u00f6rmelisiniz:<\/p>\n<pre><code>\ndocker-compose version 1.29.2, build 5bd4ae9b\n    <\/code><\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz s\u00fcr\u00fcm numaras\u0131, indirdi\u011finiz s\u00fcr\u00fcme g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir. E\u011fer bu komut bir hata d\u00f6nd\u00fcr\u00fcrse (\u00f6rne\u011fin, &#8220;command not found&#8221;), yukar\u0131daki ad\u0131mlar\u0131 dikkatlice tekrar kontrol etmeniz gerekebilir. \u00d6zellikle indirme URL&#8217;sinin do\u011fru oldu\u011fundan ve y\u00fcr\u00fct\u00fclebilir izinlerin verildi\u011finden emin olun.<\/p>\n<p>Bu ad\u0131mlarla birlikte, CentOS 7 sisteminizde Docker Compose ba\u015far\u0131yla kurulmu\u015f ve kullan\u0131ma haz\u0131r hale gelmi\u015ftir. Art\u0131k \u00e7ok kapsay\u0131c\u0131l\u0131 uygulamalar\u0131n\u0131z\u0131 tan\u0131mlamak ve y\u00f6netmek i\u00e7in bu g\u00fc\u00e7l\u00fc arac\u0131 kullanmaya ba\u015flayabilirsiniz.<\/p>\n<h2>Docker Compose ile \u0130lk Uygulaman\u0131z\u0131 \u00c7al\u0131\u015ft\u0131rma: Ger\u00e7ek D\u00fcnya Senaryosu<\/h2>\n<p>Docker Compose&#8217;u kurdu\u011funuza g\u00f6re, \u015fimdi s\u0131ra geldi onu ger\u00e7ek bir senaryoda kullanarak \u00e7ok kapsay\u0131c\u0131l\u0131 bir uygulamay\u0131 nas\u0131l y\u00f6netece\u011finizi \u00f6\u011frenmeye. Bu b\u00f6l\u00fcmde, pop\u00fcler bir web sunucusu olan Nginx ile bir PostgreSQL veritaban\u0131n\u0131 bir araya getiren basit bir uygulama y\u0131\u011f\u0131n\u0131 olu\u015fturaca\u011f\u0131z. Bu \u00f6rnek, modern web uygulamalar\u0131n\u0131n temel bir yap\u0131s\u0131n\u0131 temsil eder ve Docker Compose&#8217;un g\u00fcc\u00fcn\u00fc anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>Basit Bir Nginx ve PostgreSQL Uygulamas\u0131<\/h3>\n<p>Senaryomuz \u015f\u00f6yle: Bir web uygulamas\u0131 geli\u015ftiriyorsunuz ve bu uygulama hem bir web sunucusuna (Nginx) hem de kal\u0131c\u0131 veri depolamas\u0131 i\u00e7in bir veritaban\u0131na (PostgreSQL) ihtiya\u00e7 duyuyor. Geli\u015ftirme ortam\u0131n\u0131zda bu iki servisi kolayca aya\u011fa kald\u0131rmak ve aralar\u0131nda ileti\u015fimi sa\u011flamak istiyorsunuz. Docker Compose, tam da bu ihtiyaca y\u00f6nelik ideal bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<p>Nginx, gelen HTTP isteklerini kar\u015f\u0131layacak ve belki de statik dosyalar\u0131 sunacak veya arka u\u00e7 uygulamas\u0131na y\u00f6nlendirme yapacakt\u0131r. PostgreSQL ise uygulaman\u0131z\u0131n t\u00fcm verilerini g\u00fcvenli bir \u015fekilde depolayacakt\u0131r. Bu iki servisin ba\u011f\u0131ms\u0131z kapsay\u0131c\u0131larda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayacak ve Docker Compose ile bunlar\u0131 tek bir uygulama olarak y\u00f6netece\u011fiz.<\/p>\n<h3><code>docker-compose.yml<\/code> Dosyas\u0131n\u0131n Olu\u015fturulmas\u0131<\/h3>\n<p>Docker Compose&#8217;un kalbi, uygulaman\u0131z\u0131n servislerini tan\u0131mlad\u0131\u011f\u0131n\u0131z <code>docker-compose.yml<\/code> dosyas\u0131d\u0131r. Bu YAML dosyas\u0131, uygulaman\u0131z\u0131n mimarisini deklaratif bir \u015fekilde belirtir. Yeni bir dizin olu\u015fturarak ba\u015flay\u0131n ve bu dizinin i\u00e7ine <code>docker-compose.yml<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code>\nmkdir my-nginx-pg-app\ncd my-nginx-pg-app\nnano docker-compose.yml\n    <\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki i\u00e7eri\u011fi <code>docker-compose.yml<\/code> dosyas\u0131na yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\nversion: '3.8'\n\nservices:\n  web:\n    image: nginx:latest\n    ports:\n      - \"80:80\"\n    volumes:\n      - .\/nginx.conf:\/etc\/nginx\/nginx.conf\n      - .\/html:\/usr\/share\/nginx\/html\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\nvolumes:\n  db_data:\n\nnetworks:\n  app_network:\n    driver: bridge\n    <\/code><\/pre>\n<p>Bu dosyan\u0131n detayl\u0131 a\u00e7\u0131klamas\u0131:<\/p>\n<ul>\n<li><code>version: '3.8'<\/code>: Docker Compose dosya format\u0131n\u0131n versiyonunu belirtir. En son stabil versiyonu kullanmak iyi bir uygulamad\u0131r.<\/li>\n<li><code>services:<\/code>: Uygulaman\u0131zdaki t\u00fcm servisleri tan\u0131mlad\u0131\u011f\u0131n\u0131z ana b\u00f6l\u00fcmd\u00fcr.<\/li>\n<li><code>web:<\/code>: Nginx web sunucusunu temsil eden servisimizdir.\n<ul>\n<li><code>image: nginx:latest<\/code>: Nginx&#8217;in en son stabil imaj\u0131n\u0131 kullanmas\u0131n\u0131 s\u00f6yler.<\/li>\n<li><code>ports: - \"80:80\"<\/code>: Host makinenin 80. portunu kapsay\u0131c\u0131n\u0131n 80. portuna y\u00f6nlendirir. B\u00f6ylece web taray\u0131c\u0131n\u0131zdan Nginx&#8217;e eri\u015febilirsiniz.<\/li>\n<li><code>volumes:<\/code>: Kal\u0131c\u0131 depolama ve yap\u0131land\u0131rma dosyalar\u0131n\u0131 y\u00f6netir.\n<ul>\n<li><code>.\/nginx.conf:\/etc\/nginx\/nginx.conf<\/code>: Yerel dizininizdeki <code>nginx.conf<\/code> dosyas\u0131n\u0131 Nginx kapsay\u0131c\u0131s\u0131n\u0131n yap\u0131land\u0131rma dosyas\u0131 olarak ba\u011flar.<\/li>\n<li><code>.\/html:\/usr\/share\/nginx\/html<\/code>: Yerel dizininizdeki <code>html<\/code> klas\u00f6r\u00fcn\u00fc Nginx&#8217;in statik dosyalar\u0131 sunaca\u011f\u0131 dizine ba\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li><code>depends_on: - db<\/code>: <code class=\"language-\">web<\/code> servisinin <code class=\"language-\">db<\/code> servisi ba\u015flamadan \u00f6nce ba\u015flamamas\u0131n\u0131 sa\u011flar. Bu, servisler aras\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<li><code>networks: - app_network<\/code>: <code class=\"language-\">web<\/code> servisini <code class=\"language-\">app_network<\/code> adl\u0131 \u00f6zel a\u011fa ba\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li><code>db:<\/code>: PostgreSQL veritaban\u0131n\u0131 temsil eden servisimizdir.\n<ul>\n<li><code>image: postgres:13<\/code>: PostgreSQL&#8217;in 13. versiyon imaj\u0131n\u0131 kullan\u0131r.<\/li>\n<li><code>environment:<\/code>: Kapsay\u0131c\u0131ya \u00e7evresel de\u011fi\u015fkenler aktar\u0131r. PostgreSQL i\u00e7in veritaban\u0131 ad\u0131, kullan\u0131c\u0131 ad\u0131 ve \u015fifre gibi kritik bilgileri bu \u015fekilde ayarl\u0131yoruz.<\/li>\n<li><code>volumes: - db_data:\/var\/lib\/postgresql\/data<\/code>: PostgreSQL verilerinin kal\u0131c\u0131 olmas\u0131 i\u00e7in <code class=\"language-\">db_data<\/code> ad\u0131nda bir isimlendirilmi\u015f volume (named volume) ba\u011flar. Kapsay\u0131c\u0131 silinse bile verileriniz bu volume&#8217;de kal\u0131r.<\/li>\n<li><code>networks: - app_network<\/code>: <code class=\"language-\">db<\/code> servisini <code class=\"language-\">app_network<\/code> adl\u0131 \u00f6zel a\u011fa ba\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li><code>volumes: db_data:<\/code>: <code class=\"language-\">db_data<\/code> ad\u0131nda bir isimlendirilmi\u015f volume tan\u0131mlar. Docker, bu volume&#8217;\u00fc otomatik olarak y\u00f6netir.<\/li>\n<li><code>networks: app_network: driver: bridge<\/code>: <code class=\"language-\">app_network<\/code> ad\u0131nda \u00f6zel bir bridge a\u011f\u0131 tan\u0131mlar. Bu a\u011f, <code class=\"language-\">web<\/code> ve <code class=\"language-\">db<\/code> servislerinin birbirleriyle isimleri \u00fczerinden ileti\u015fim kurmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p>Bu dosya ile birlikte, Nginx i\u00e7in basit bir varsay\u0131lan sayfa ve yap\u0131land\u0131rma dosyas\u0131na da ihtiyac\u0131m\u0131z var. <code class=\"language-\">my-nginx-pg-app<\/code> dizini i\u00e7inde a\u015fa\u011f\u0131daki dosyalar\u0131 olu\u015fturun:<\/p>\n<p><strong>nginx.conf:<\/strong><\/p>\n<pre><code>\nevents {\n    worker_connections 1024;\n}\n\nhttp {\n    server {\n        listen 80;\n        server_name localhost;\n\n        location \/ {\n            root \/usr\/share\/nginx\/html;\n            index index.html;\n        }\n\n        # PostgreSQL'e do\u011frudan eri\u015fim sa\u011flam\u0131yoruz, bu sadece bir \u00f6rnek.\n        # Genellikle uygulama sunucusu veritaban\u0131 ile konu\u015fur.\n        # location \/api {\n        #     proxy_pass http:\/\/db:5432; # Bu do\u011frudan \u00e7al\u0131\u015fmaz, sadece bir fikir.\n        # }\n    }\n}\n    <\/code><\/pre>\n<p><strong>html\/index.html:<\/strong><\/p>\n<pre><code>\nmkdir html\nnano html\/index.html\n    <\/code><\/pre>\n<pre><code>\n<!DOCTYPE html><body>\n    <h1>Merhaba! Nginx ve PostgreSQL \u00c7al\u0131\u015f\u0131yor!<\/h1>\n    <p>Bu sayfa Docker Compose ile aya\u011fa kald\u0131r\u0131lan Nginx taraf\u0131ndan sunulmaktad\u0131r.<\/p>\n    <p>Veritaban\u0131 ba\u011flant\u0131s\u0131 arka planda aktif.<\/p>\n<\/body>\n<\/html>\n    <\/code><\/pre>\n<h3>Uygulamay\u0131 Ba\u015flatma ve Y\u00f6netme<\/h3>\n<p>T\u00fcm dosyalar\u0131m\u0131z\u0131 olu\u015fturduktan sonra, uygulamay\u0131 ba\u015flatmak inan\u0131lmaz derecede kolayd\u0131r. <code class=\"language-\">my-nginx-pg-app<\/code> dizininde oldu\u011funuzdan emin olun ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\ndocker-compose up -d\n    <\/code><\/pre>\n<p>Bu komutun a\u00e7\u0131klamas\u0131:<\/p>\n<ul>\n<li><code>docker-compose up<\/code>: <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131nda tan\u0131mlanan t\u00fcm servisleri olu\u015fturur ve ba\u015flat\u0131r.<\/li>\n<li><code>-d<\/code>: &#8220;detached&#8221; mod anlam\u0131na gelir. Kapsay\u0131c\u0131lar\u0131 arka planda \u00e7al\u0131\u015ft\u0131r\u0131r ve terminalinizi serbest b\u0131rak\u0131r. Aksi takdirde, kapsay\u0131c\u0131lar\u0131n loglar\u0131 terminalde g\u00f6sterilir ve terminaliniz me\u015fgul kal\u0131r.<\/li>\n<\/ul>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra Docker, Nginx ve PostgreSQL imajlar\u0131n\u0131 indirecek (e\u011fer daha \u00f6nce indirilmemi\u015fse), servisleri olu\u015fturacak ve ba\u015flatacakt\u0131r. \u0130\u015flem tamamland\u0131\u011f\u0131nda, web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131p sunucunuzun IP adresine veya <code class=\"language-\">localhost<\/code> adresine giderseniz (e\u011fer yerel makinede \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z), &#8220;Merhaba! Nginx ve PostgreSQL \u00c7al\u0131\u015f\u0131yor!&#8221; mesaj\u0131n\u0131 i\u00e7eren <code class=\"language-\">index.html<\/code> sayfas\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<p>\u00c7al\u0131\u015fan servisleri kontrol etmek i\u00e7in:<\/p>\n<pre><code>\ndocker-compose ps\n    <\/code><\/pre>\n<p>Bu komut, Docker Compose taraf\u0131ndan y\u00f6netilen t\u00fcm servislerin durumunu g\u00f6sterecektir.<\/p>\n<p>Servislerin loglar\u0131n\u0131 g\u00f6rmek i\u00e7in:<\/p>\n<pre><code>\ndocker-compose logs web\ndocker-compose logs db\n    <\/code><\/pre>\n<p>Uygulamay\u0131 durdurmak ve kapsay\u0131c\u0131lar\u0131 kald\u0131rmak i\u00e7in:<\/p>\n<pre><code>\ndocker-compose down\n    <\/code><\/pre>\n<p>Bu komut, <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131nda tan\u0131mlanan t\u00fcm servisleri durdurur, kapsay\u0131c\u0131lar\u0131 kald\u0131r\u0131r ve varsay\u0131lan olarak olu\u015fturulan a\u011flar\u0131 da siler. Ancak <code class=\"language-\">db_data<\/code> gibi isimlendirilmi\u015f volume&#8217;ler varsay\u0131lan olarak kal\u0131c\u0131d\u0131r ve <code class=\"language-\">docker-compose down --volumes<\/code> komutu ile silinmeleri gerekir.<\/p>\n<h3>Vaka Analizi: Geli\u015ftirme Ortam\u0131 Otomasyonu<\/h3>\n<p>Bir yaz\u0131l\u0131m geli\u015ftirme ekibinin, yeni bir projeye ba\u015flarken veya yeni bir ekip \u00fcyesi kat\u0131ld\u0131\u011f\u0131nda ya\u015fad\u0131\u011f\u0131 en b\u00fcy\u00fck zorluklardan biri, t\u00fcm geli\u015ftirme ortam\u0131n\u0131 tutarl\u0131 bir \u015fekilde kurmakt\u0131r. Her geli\u015ftiricinin kendi makinesinde farkl\u0131 i\u015fletim sistemleri, farkl\u0131 ba\u011f\u0131ml\u0131l\u0131k versiyonlar\u0131 olabilir. Bu durum, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; gibi sorunlara yol a\u00e7ar ve verimlili\u011fi d\u00fc\u015f\u00fcr\u00fcr.<\/p>\n<p>Docker Compose, bu sorunu k\u00f6kten \u00e7\u00f6zer. Ekip, uygulaman\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 (veritaban\u0131, \u00f6nbellek, mesaj kuyru\u011fu, arka u\u00e7 servisi vb.) i\u00e7eren tek bir <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131 olu\u015fturur. Yeni bir geli\u015ftirici projeye kat\u0131ld\u0131\u011f\u0131nda, sadece Docker ve Docker Compose kurar, projenin kaynak kodunu \u00e7eker ve tek bir <code class=\"language-\">docker-compose up -d<\/code> komutuyla t\u00fcm geli\u015ftirme ortam\u0131n\u0131 dakikalar i\u00e7inde haz\u0131r hale getirir. Bu, geli\u015ftiricilerin altyap\u0131 kurulumuyla u\u011fra\u015fmak yerine do\u011frudan kod yazmaya odaklanmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, farkl\u0131 dallarda (branch) \u00e7al\u0131\u015f\u0131rken farkl\u0131 veritaban\u0131 yap\u0131land\u0131rmalar\u0131 veya servis versiyonlar\u0131 gerekiyorsa, Compose dosyalar\u0131 kolayca de\u011fi\u015ftirilerek veya <code class=\"language-\">override<\/code> dosyalar\u0131 kullan\u0131larak farkl\u0131 ortamlar h\u0131zla aya\u011fa kald\u0131r\u0131labilir. Bu otomasyon, proje ba\u015flang\u0131\u00e7 s\u00fcrelerini k\u0131salt\u0131r, hata oranlar\u0131n\u0131 azalt\u0131r ve ekip i\u00e7indeki i\u015fbirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey Docker Compose Kullan\u0131m\u0131 ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>Docker Compose&#8217;un temel kurulumunu ve basit bir uygulaman\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 \u00f6\u011frendikten sonra, \u015fimdi daha karma\u015f\u0131k senaryolar ve ileri d\u00fczey kullan\u0131m teknikleri hakk\u0131nda bilgi edinelim. Bu b\u00f6l\u00fcmde, birden fazla ortam i\u00e7in yap\u0131land\u0131rma, a\u011f ve depolama y\u00f6netimi gibi konulara odaklanacak ve Docker Compose kullan\u0131m\u0131n\u0131z\u0131 optimize edecek ipu\u00e7lar\u0131 sunaca\u011f\u0131z.<\/p>\n<h3>Birden Fazla Ortam \u0130\u00e7in Yap\u0131land\u0131rma (<code class=\"language-\">docker-compose.override.yml<\/code>)<\/h3>\n<p>Ger\u00e7ek d\u00fcnya projelerinde, geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 i\u00e7in farkl\u0131 Docker Compose yap\u0131land\u0131rmalar\u0131na ihtiya\u00e7 duyulur. \u00d6rne\u011fin, geli\u015ftirme ortam\u0131nda kodunuzu an\u0131nda yans\u0131tabilmek i\u00e7in bind mount&#8217;lar kullanmak isterken, \u00fcretimde daha performansl\u0131 ve g\u00fcvenli named volume&#8217;ler tercih edebilirsiniz. Ya da geli\u015ftirme ortam\u0131nda hata ay\u0131klama portlar\u0131n\u0131 a\u00e7arken, \u00fcretimde bu portlar\u0131 kapal\u0131 tutmak istersiniz.<\/p>\n<p>Docker Compose, bu t\u00fcr senaryolar i\u00e7in <code class=\"language-\">docker-compose.override.yml<\/code> dosyas\u0131n\u0131 destekler. Docker Compose varsay\u0131lan olarak <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131n\u0131 arar. E\u011fer ayn\u0131 dizinde <code class=\"language-\">docker-compose.override.yml<\/code> dosyas\u0131 da varsa, bu iki dosyay\u0131 otomatik olarak birle\u015ftirir. <code class=\"language-\">override<\/code> dosyas\u0131, ana dosyada tan\u0131mlanan ayarlar\u0131 ge\u00e7ersiz k\u0131labilir veya yeni ayarlar ekleyebilir.<\/p>\n<p>\u00d6rnek olarak, \u00f6nceki Nginx ve PostgreSQL \u00f6rne\u011fimizde, geli\u015ftirme ortam\u0131nda Nginx&#8217;in loglar\u0131n\u0131 direkt olarak host makinede g\u00f6rmek isteyebiliriz. Bunun i\u00e7in <code class=\"language-\">docker-compose.override.yml<\/code> dosyas\u0131 olu\u015fturabiliriz:<\/p>\n<p><strong>docker-compose.yml (ana dosya &#8211; \u00fcretim i\u00e7in varsay\u0131lan):<\/strong><\/p>\n<pre><code>\n# ... (\u00f6nceki docker-compose.yml i\u00e7eri\u011fi) ...\nservices:\n  web:\n    image: nginx:latest\n    ports:\n      - \"80:80\"\n    volumes:\n      - .\/nginx.conf:\/etc\/nginx\/nginx.conf\n      - .\/html:\/usr\/share\/nginx\/html\n    # ...\n    <\/code><\/pre>\n<p><strong>docker-compose.override.yml (geli\u015ftirme i\u00e7in \u00f6zel ayarlar):<\/strong><\/p>\n<pre><code>\nversion: '3.8'\n\nservices:\n  web:\n    volumes:\n      - .\/logs\/nginx:\/var\/log\/nginx # Nginx loglar\u0131n\u0131 host'a ba\u011fla\n    environment:\n      DEBUG_MODE: \"true\" # Geli\u015ftirme modu de\u011fi\u015fkeni\n  db:\n    ports:\n      - \"5432:5432\" # Geli\u015ftirmede veritaban\u0131na d\u0131\u015far\u0131dan eri\u015fim\n    <\/code><\/pre>\n<p>Bu durumda, <code class=\"language-\">docker-compose up<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Docker Compose \u00f6nce <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131n\u0131 okuyacak, ard\u0131ndan <code class=\"language-\">docker-compose.override.yml<\/code> dosyas\u0131ndaki ayarlar\u0131 uygulayacakt\u0131r. <code class=\"language-\">web<\/code> servisinin <code class=\"language-\">volumes<\/code> ayar\u0131, <code class=\"language-\">override<\/code> dosyas\u0131ndaki tan\u0131mla geni\u015fletilecek (veya mevcut olan\u0131 de\u011fi\u015ftirecek) ve <code class=\"language-\">DEBUG_MODE<\/code> \u00e7evresel de\u011fi\u015fkeni eklenecektir. <code class=\"language-\">db<\/code> servisine de ek bir port y\u00f6nlendirmesi yap\u0131lacakt\u0131r.<\/p>\n<p>Farkl\u0131 ortamlar i\u00e7in birden fazla override dosyas\u0131 da kullanabilirsiniz (\u00f6rn. <code class=\"language-\">docker-compose.dev.yml<\/code>, <code class=\"language-\">docker-compose.prod.yml<\/code>) ve bunlar\u0131 <code class=\"language-\">docker-compose -f docker-compose.yml -f docker-compose.dev.yml up<\/code> gibi komutlarla manuel olarak belirtebilirsiniz.<\/p>\n<h3>Volume ve Network Y\u00f6netimi<\/h3>\n<p>Docker Compose, depolama ve a\u011f y\u00f6netimi konusunda size b\u00fcy\u00fck esneklik sunar. Uygulaman\u0131z\u0131n performans\u0131n\u0131 ve veri g\u00fcvenli\u011fini art\u0131rmak i\u00e7in bu \u00f6zellikleri do\u011fru kullanmak \u00f6nemlidir.<\/p>\n<ul>\n<li><strong>Named Volumes (\u0130simlendirilmi\u015f Depolama Birimleri):<\/strong> Verilerinizi kapsay\u0131c\u0131 ya\u015fam d\u00f6ng\u00fcs\u00fcnden ba\u011f\u0131ms\u0131z olarak kal\u0131c\u0131 hale getirmek i\u00e7in named volume&#8217;ler kullan\u0131n. \u00d6nceki \u00f6rne\u011fimizdeki <code class=\"language-\">db_data<\/code> volume&#8217;\u00fc buna iyi bir \u00f6rnektir. Named volume&#8217;ler, Docker taraf\u0131ndan y\u00f6netilir ve kapsay\u0131c\u0131lar silinse bile verileri korur.\n<pre><code>\nvolumes:\n  my_app_data:\n    driver: local # Varsay\u0131lan s\u00fcr\u00fcc\u00fc, a\u00e7\u0131k\u00e7a belirtilebilir\n    <\/code><\/pre>\n<\/li>\n<li><strong>Custom Networks (\u00d6zel A\u011flar):<\/strong> Varsay\u0131lan bridge a\u011f\u0131n\u0131 kullanmak yerine, servisleriniz i\u00e7in \u00f6zel a\u011flar tan\u0131mlamak daha iyi bir izolasyon ve y\u00f6netim sa\u011flar. Servisler, ayn\u0131 a\u011fda olduklar\u0131nda birbirleriyle servis isimleri \u00fczerinden ileti\u015fim kurabilirler (DNS \u00e7\u00f6z\u00fcm\u00fc sayesinde).\n<pre><code>\nnetworks:\n  backend_network:\n    driver: bridge\n  frontend_network:\n    driver: bridge\n\nservices:\n  backend:\n    networks:\n      - backend_network\n  frontend:\n    networks:\n      - backend_network\n      - frontend_network\n            <\/code><\/pre>\n<p>Bu \u00f6rnekte, <code class=\"language-\">frontend<\/code> servisi hem <code class=\"language-\">backend_network<\/code> hem de <code class=\"language-\">frontend_network<\/code> \u00fczerinde yer al\u0131rken, <code class=\"language-\">backend<\/code> servisi sadece <code class=\"language-\">backend_network<\/code> \u00fczerindedir. Bu, g\u00fcvenlik ve a\u011f trafi\u011fi izolasyonu i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<\/li>\n<\/ul>\n<h3>Performans \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h3>\n<p>Docker Compose ile \u00e7al\u0131\u015f\u0131rken performans\u0131 art\u0131rmak ve en iyi uygulamalar\u0131 takip etmek, daha verimli ve sorunsuz bir deneyim sa\u011flar.<\/p>\n<ul>\n<li><strong>Minimal \u0130majlar Kullan\u0131n:<\/strong> Uygulaman\u0131z i\u00e7in m\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck ve optimize edilmi\u015f Docker imajlar\u0131 kullan\u0131n (\u00f6rne\u011fin, <code class=\"language-\">alpine<\/code> tabanl\u0131 imajlar). Bu, indirme s\u00fcrelerini k\u0131salt\u0131r ve kaynak t\u00fcketimini azalt\u0131r.<\/li>\n<li><strong>Kaynak S\u0131n\u0131rlar\u0131 Belirleyin:<\/strong> \u00d6zellikle \u00fcretim ortam\u0131nda, her bir servisin CPU ve bellek kullan\u0131m\u0131na s\u0131n\u0131rlar koymak, bir servisin di\u011ferlerini veya ana makineyi a\u015f\u0131r\u0131 y\u00fcklemesini engeller.\n<pre><code>\nservices:\n  my_service:\n    deploy:\n      resources:\n        limits:\n          cpus: '0.5' # 0.5 CPU \u00e7ekirde\u011fi\n          memory: 512M # 512 MB bellek\n            <\/code><\/pre>\n<\/li>\n<li><strong>Restart Politikalar\u0131n\u0131 Kullan\u0131n:<\/strong> Kapsay\u0131c\u0131lar\u0131n beklenmedik bir \u015fekilde durmas\u0131 durumunda otomatik olarak yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flamak i\u00e7in <code class=\"language-\">restart<\/code> politikalar\u0131 belirleyin (\u00f6rn. <code class=\"language-\">always<\/code>, <code class=\"language-\">on-failure<\/code>).\n<pre><code>\nservices:\n  my_service:\n    restart: always\n            <\/code><\/pre>\n<\/li>\n<li><strong>Verimli <code class=\"language-\">Dockerfile<\/code> Yaz\u0131m\u0131:<\/strong> Docker Compose, <code class=\"language-\">Dockerfile<\/code> ile birlikte \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, imajlar\u0131n\u0131z\u0131 optimize etmek \u00f6nemlidir. Katmanlar\u0131 \u00f6nbelle\u011fe almak, gereksiz dosyalar\u0131 <code class=\"language-\">.dockerignore<\/code> ile d\u0131\u015flamak gibi teknikler kullan\u0131n.<\/li>\n<li><strong>S\u0131cak Yeniden Y\u00fckleme (Hot Reloading):<\/strong> Geli\u015ftirme ortam\u0131nda, kod de\u011fi\u015fikliklerinin an\u0131nda yans\u0131mas\u0131 i\u00e7in bind mount&#8217;lar ve uygulaman\u0131z\u0131n s\u0131cak yeniden y\u00fckleme \u00f6zelliklerini kullan\u0131n.<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n      Uzman \u0130pucu: \u00c7ok say\u0131da servisiniz varsa veya uygulaman\u0131z\u0131n \u00f6l\u00e7eklenebilirli\u011fi kritikse, Docker Compose tek ba\u015f\u0131na yeterli olmayabilir. Bu durumda, Kubernetes gibi daha geli\u015fmi\u015f kapsay\u0131c\u0131 orkestrasyon ara\u00e7lar\u0131n\u0131 de\u011ferlendirmeniz \u00f6nerilir. Docker Compose, \u00f6zellikle geli\u015ftirme ve k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli \u00fcretim ortamlar\u0131 i\u00e7in m\u00fckemmel bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.\n    <\/div>\n<p>Bu ileri d\u00fczey teknikler ve ipu\u00e7lar\u0131, Docker Compose ile daha karma\u015f\u0131k ve sa\u011flam uygulamalar geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r. Her bir \u00f6zelli\u011fi kendi projenizin ihtiya\u00e7lar\u0131na g\u00f6re uyarlayarak, geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi daha da optimize edebilirsiniz.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, CentOS 7 i\u015fletim sistemi \u00fczerinde Docker ve Docker Compose&#8217;un kurulumundan, temel kavramlar\u0131na ve pratik bir Nginx-PostgreSQL uygulamas\u0131yla ger\u00e7ek d\u00fcnya senaryolar\u0131na kadar bir\u00e7ok konuyu ele ald\u0131k. Docker Compose&#8217;un, \u00e7ok kapsay\u0131c\u0131l\u0131 uygulamalar\u0131n y\u00f6netimini nas\u0131l basitle\u015ftirdi\u011fini, geli\u015ftirme ortamlar\u0131nda tutarl\u0131l\u0131k sa\u011flad\u0131\u011f\u0131n\u0131 ve ekipler aras\u0131 i\u015fbirli\u011fini nas\u0131l g\u00fc\u00e7lendirdi\u011fini detayl\u0131ca inceledik. Art\u0131k, karma\u015f\u0131k uygulama y\u0131\u011f\u0131nlar\u0131n\u0131 tek bir YAML dosyas\u0131yla tan\u0131mlayabilir, tek bir komutla aya\u011fa kald\u0131rabilir ve y\u00f6netebilirsiniz.<\/p>\n<p>Docker Compose, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r. Geli\u015ftiricilerin altyap\u0131 karma\u015f\u0131kl\u0131\u011f\u0131yla bo\u011fu\u015fmak yerine, uygulama mant\u0131\u011f\u0131na odaklanmalar\u0131n\u0131 sa\u011flayarak verimlili\u011fi art\u0131r\u0131r. \u0130ster k\u00fc\u00e7\u00fck bir proje \u00fczerinde \u00e7al\u0131\u015f\u0131yor olun ister b\u00fcy\u00fck bir ekibin par\u00e7as\u0131 olun, Docker Compose&#8217;un sundu\u011fu otomasyon ve tutarl\u0131l\u0131k, geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131racakt\u0131r. Bu rehberde edindi\u011finiz bilgilerle, kendi \u00e7ok kapsay\u0131c\u0131l\u0131 uygulamalar\u0131n\u0131z\u0131 g\u00fcvenle Dockerize etmeye ve y\u00f6netmeye ba\u015flayabilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p>A\u015fa\u011f\u0131da, Docker Compose hakk\u0131nda s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan baz\u0131 sorular\u0131 ve cevaplar\u0131n\u0131 bulabilirsiniz:<\/p>\n<ul>\n<li><strong>Docker Compose neden <code class=\"language-\">docker<\/code> komutunun bir par\u00e7as\u0131 de\u011fil?<\/strong>\n<p>Docker Compose, Docker Engine&#8217;den ayr\u0131 bir projedir ve farkl\u0131 bir geli\u015ftirme d\u00f6ng\u00fcs\u00fcne sahiptir. Tarihsel olarak ayr\u0131 bir Python uygulamas\u0131 olarak ba\u015flam\u0131\u015ft\u0131r. Modern Docker s\u00fcr\u00fcmlerinde (Docker Desktop veya Docker Engine&#8217;in daha yeni versiyonlar\u0131), Docker Compose CLI eklentisi olarak entegre edilmi\u015f olabilir ve <code class=\"language-\">docker compose<\/code> (arada tire olmadan) \u015feklinde kullan\u0131labilir. Ancak CentOS 7&#8217;deki geleneksel kurulumda ayr\u0131 bir binary olarak kal\u0131r.<\/p>\n<\/li>\n<li><strong>Docker Compose ile <code class=\"language-\">docker run<\/code> aras\u0131ndaki fark nedir?<\/strong>\n<p><code class=\"language-\">docker run<\/code>, tek bir Docker kapsay\u0131c\u0131s\u0131n\u0131 ba\u015flatmak ve y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. \u00c7evresel de\u011fi\u015fkenler, port e\u015flemeleri ve volume&#8217;ler gibi ayarlar komut sat\u0131r\u0131nda arg\u00fcman olarak verilir. Docker Compose ise birden fazla kapsay\u0131c\u0131y\u0131, a\u011flar\u0131n\u0131 ve depolama birimlerini tek bir <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131 i\u00e7inde tan\u0131mlar ve tek bir komutla t\u00fcm uygulama y\u0131\u011f\u0131n\u0131n\u0131 y\u00f6netmenizi sa\u011flar. \u00c7ok kapsay\u0131c\u0131l\u0131 uygulamalar i\u00e7in <code class=\"language-\">docker-compose<\/code> \u00e7ok daha pratiktir.<\/p>\n<\/li>\n<li><strong>CentOS 7 \u00fczerinde Docker Compose&#8217;u g\u00fcncellemek i\u00e7in ne yapmal\u0131y\u0131m?<\/strong>\n<p>Docker Compose&#8217;u g\u00fcncellemek i\u00e7in, ilk kurulumda kulland\u0131\u011f\u0131n\u0131z <code class=\"language-\">curl<\/code> komutunu en son s\u00fcr\u00fcm numaras\u0131n\u0131 belirterek tekrar \u00e7al\u0131\u015ft\u0131rman\u0131z yeterlidir. Bu, mevcut binary dosyas\u0131n\u0131n \u00fczerine yenisini yazacakt\u0131r. Ard\u0131ndan <code class=\"language-\">chmod +x<\/code> komutunu tekrar \u00e7al\u0131\u015ft\u0131rman\u0131za gerek yoktur, \u00e7\u00fcnk\u00fc dosya zaten y\u00fcr\u00fct\u00fclebilir izne sahiptir.<\/p>\n<pre><code>\nsudo curl -L \"https:\/\/github.com\/docker\/compose\/releases\/download\/&lt;EN_SON_SURUM&gt;\/docker-compose-$(uname -s)-$(uname -m)\" -o \/usr\/local\/bin\/docker-compose\n            <\/code><\/pre>\n<\/li>\n<li><strong>\u00dcretim ortam\u0131nda Docker Compose kullanmak g\u00fcvenli mi?<\/strong>\n<p>Docker Compose, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli \u00fcretim ortamlar\u0131 i\u00e7in kesinlikle kullan\u0131labilir. Basit ve y\u00f6netimi kolay bir da\u011f\u0131t\u0131m arac\u0131d\u0131r. Ancak, y\u00fcksek kullan\u0131labilirlik, otomatik \u00f6l\u00e7eklendirme, hizmet ke\u015ffi ve daha karma\u015f\u0131k orkestrasyon ihtiya\u00e7lar\u0131 olan b\u00fcy\u00fck \u00f6l\u00e7ekli ve kritik \u00fcretim ortamlar\u0131 i\u00e7in Kubernetes veya Docker Swarm gibi daha geli\u015fmi\u015f orkestrasyon platformlar\u0131 daha uygun olabilir. Docker Compose, \u00fcretimde h\u0131zl\u0131 da\u011f\u0131t\u0131m ve y\u00f6netim kolayl\u0131\u011f\u0131 sundu\u011fu i\u00e7in bir\u00e7ok senaryoda yeterlidir.<\/p>\n<\/li>\n<li><strong><code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131nda hangi versiyonu kullanmal\u0131y\u0131m?<\/strong>\n<p>Genellikle <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131n\u0131n en son stabil versiyonunu kullanman\u0131z \u00f6nerilir. Bu rehberde <code class=\"language-\">version: '3.8'<\/code> kullan\u0131lm\u0131\u015ft\u0131r. Her yeni versiyon, yeni \u00f6zellikler ve iyile\u015ftirmeler sunar. Docker Compose belgelerinden en g\u00fcncel versiyonu ve \u00f6zelliklerini kontrol edebilirsiniz. Eski versiyonlar da \u00e7al\u0131\u015fmaya devam eder ancak yeni \u00f6zelliklerden faydalanamazs\u0131n\u0131z.<\/p>\n<\/li>\n<\/ul>\n<p>Bu bilgilerle, Docker Compose&#8217;u CentOS 7 \u00fczerinde etkin bir \u015fekilde kullanmaya haz\u0131rs\u0131n\u0131z. Ba\u015far\u0131lar dileriz!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Docker Compose Kurulumu ve Kullan\u0131m\u0131: CentOS 7 \u00dczerinde Ad\u0131m Ad\u0131m Rehber Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde, \u00e7ok say\u0131da servisi&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-39051","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>Docker Compose Neden Bu Kadar \u00d6nemli?<\/title>\n<meta name=\"description\" content=\"Docker Compose Kurulumu ve Kullan\u0131m\u0131: CentOS 7 \u00dczerinde Ad\u0131m Ad\u0131m Rehber\" \/>\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\/docker-compose-neden-bu-kadar-onemli\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Compose Neden Bu Kadar \u00d6nemli?\" \/>\n<meta property=\"og:description\" content=\"Docker Compose Kurulumu ve Kullan\u0131m\u0131: CentOS 7 \u00dczerinde Ad\u0131m Ad\u0131m Rehber\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-13T09:21:52+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=\"28 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker Compose Neden Bu Kadar \u00d6nemli?\",\"datePublished\":\"2026-02-13T09:21:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/\"},\"wordCount\":4919,\"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\/docker-compose-neden-bu-kadar-onemli\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/\",\"name\":\"Docker Compose Neden Bu Kadar \u00d6nemli?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-13T09:21:52+00:00\",\"description\":\"Docker Compose Kurulumu ve Kullan\u0131m\u0131: CentOS 7 \u00dczerinde Ad\u0131m Ad\u0131m Rehber\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Compose Neden Bu Kadar \u00d6nemli?\"}]},{\"@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":"Docker Compose Neden Bu Kadar \u00d6nemli?","description":"Docker Compose Kurulumu ve Kullan\u0131m\u0131: CentOS 7 \u00dczerinde Ad\u0131m Ad\u0131m Rehber","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\/docker-compose-neden-bu-kadar-onemli\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker Compose Neden Bu Kadar \u00d6nemli?","og_description":"Docker Compose Kurulumu ve Kullan\u0131m\u0131: CentOS 7 \u00dczerinde Ad\u0131m Ad\u0131m Rehber","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-13T09:21:52+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"28 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker Compose Neden Bu Kadar \u00d6nemli?","datePublished":"2026-02-13T09:21:52+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/"},"wordCount":4919,"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\/docker-compose-neden-bu-kadar-onemli\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/","name":"Docker Compose Neden Bu Kadar \u00d6nemli?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-13T09:21:52+00:00","description":"Docker Compose Kurulumu ve Kullan\u0131m\u0131: CentOS 7 \u00dczerinde Ad\u0131m Ad\u0131m Rehber","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-neden-bu-kadar-onemli\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Compose Neden Bu Kadar \u00d6nemli?"}]},{"@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\/39051","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=39051"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39051\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}