{"id":38100,"date":"2026-01-23T12:23:24","date_gmt":"2026-01-23T09:23:24","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/"},"modified":"2026-01-23T12:23:24","modified_gmt":"2026-01-23T09:23:24","slug":"docker-compose-nedir-ve-neden-kullanmaliyiz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/","title":{"rendered":"Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?"},"content":{"rendered":"<p><title>Ubuntu&#8217;da Docker Compose Kurulumu: Ad\u0131m Ad\u0131m Rehber<\/title><br \/>\n<body><\/p>\n<style>\n    \/* Basit Responsive Tasar\u0131m \u00d6rnekleri *\/\n    body {\n        font-family: Arial, sans-serif;\n        line-height: 1.6;\n        margin: 0 auto;\n        padding: 20px;\n        max-width: 1000px;\n        color: #333;\n    }\n    h2 {\n        color: #2c3e50;\n        border-bottom: 2px solid #3498db;\n        padding-bottom: 10px;\n        margin-top: 40px;\n    }\n    h3 {\n        color: #34495e;\n        margin-top: 30px;\n    }\n    pre {\n        background-color: #ecf0f1;\n        padding: 15px;\n        border-radius: 5px;\n        overflow-x: auto;\n        font-size: 0.9em;\n    }\n    code {\n        background-color: #e0e0e0;\n        padding: 2px 4px;\n        border-radius: 3px;\n        font-family: 'Courier New', Courier, monospace;\n    }\n    .tip {\n        background-color: #d1ecf1;\n        color: #0c5460;\n        border: 1px solid #bee5eb;\n        border-left: 5px solid #17a2b8;\n        padding: 15px;\n        margin: 20px 0;\n        border-radius: 5px;\n    }\n    table {\n        width: 100%;\n        border-collapse: collapse;\n        margin: 20px 0;\n    }\n    table, th, td {\n        border: 1px solid #ddd;\n    }\n    th, td {\n        padding: 10px;\n        text-align: left;\n    }\n    th {\n        background-color: #f2f2f2;\n    }<\/p>\n<p>    \/* Mobil uyumluluk i\u00e7in media query \u00f6rnekleri *\/\n    @media (max-width: 768px) {\n        body {\n            padding: 15px;\n        }\n        h2 {\n            font-size: 1.8em;\n        }\n        h3 {\n            font-size: 1.3em;\n        }\n        table, thead, tbody, th, td, tr {\n            display: block;\n        }\n        thead tr {\n            position: absolute;\n            top: -9999px;\n            left: -9999px;\n        }\n        tr {\n            border: 1px solid #ccc;\n            margin-bottom: 10px;\n        }\n        td {\n            border: none;\n            border-bottom: 1px solid #eee;\n            position: relative;\n            padding-left: 50%;\n            text-align: right;\n        }\n        td:before {\n            position: absolute;\n            top: 6px;\n            left: 6px;\n            width: 45%;\n            padding-right: 10px;\n            white-space: nowrap;\n            text-align: left;\n            font-weight: bold;\n        }\n        \/* \u00d6rnek: \u0130lk s\u00fctunu ba\u015fl\u0131k olarak g\u00f6ster *\/\n        td:nth-of-type(1):before { content: \"\u00d6zellik:\"; }\n        td:nth-of-type(2):before { content: \"A\u00e7\u0131klama:\"; }\n    }\n<\/style>\n<p>Ubuntu&#8217;da Docker Compose kurulumu mu ar\u0131yorsunuz? Bu rehberle \u00e7oklu konteyner uygulamalar\u0131n\u0131z\u0131 kolayca y\u00f6netin, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131n ve verimli bir ortam kurun.<\/p>\n<h2>Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?<\/h2>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, uygulamalar\u0131n farkl\u0131 servislerden olu\u015fmas\u0131 ve bu servislerin birbirinden ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 yayg\u0131n bir pratik haline gelmi\u015ftir. Bu durum, \u00f6zellikle mikroservis mimarileri ve da\u011f\u0131t\u0131k sistemler s\u00f6z konusu oldu\u011funda daha da \u00f6nem kazan\u0131r. Tek bir uygulaman\u0131n veritaban\u0131, \u00f6n y\u00fcz (frontend), arka y\u00fcz (backend) API&#8217;leri, mesaj kuyruklar\u0131 gibi bir\u00e7ok bile\u015feni olabilir. Bu bile\u015fenlerin her birini ayr\u0131 ayr\u0131 y\u00f6netmek, ba\u015flatmak, durdurmak ve birbirleriyle ileti\u015fim kurmalar\u0131n\u0131 sa\u011flamak zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7tir. \u0130\u015fte tam bu noktada Docker Compose devreye girer.<\/p>\n<p>Docker Compose, Docker ile birlikte gelen, \u00e7oklu konteyner Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Tek bir YAML dosyas\u0131 (genellikle <code>docker-compose.yml<\/code> olarak adland\u0131r\u0131l\u0131r) kullanarak uygulaman\u0131z\u0131n t\u00fcm servislerini, a\u011flar\u0131n\u0131 ve birimlerini (volumes) yap\u0131land\u0131rabilirsiniz. Bu sayede, karma\u015f\u0131k bir uygulaman\u0131n t\u00fcm bile\u015fenlerini tek bir komutla ba\u015flatabilir, durdurabilir veya yeniden olu\u015fturabilirsiniz. Bu, geli\u015ftiriciler i\u00e7in b\u00fcy\u00fck bir kolayl\u0131k sa\u011flar ve geli\u015ftirme ortamlar\u0131n\u0131n standartla\u015ft\u0131r\u0131lmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<p>Peki, Docker Compose kullanmak bize ne gibi avantajlar sunar? \u00d6ncelikle, <strong>geli\u015ftirme s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r<\/strong>. Bir projenin yeni bir geli\u015ftiriciye devredildi\u011fini d\u00fc\u015f\u00fcn\u00fcn. Geli\u015ftiricinin t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 (veritaban\u0131, cache sunucusu vb.) manuel olarak kurmas\u0131 yerine, sadece Docker ve Docker Compose&#8217;u kurup ard\u0131ndan tek bir <code>docker compose up<\/code> komutuyla t\u00fcm uygulamay\u0131 \u00e7al\u0131\u015f\u0131r hale getirmesi yeterlidir. Bu, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; sorununu ortadan kald\u0131r\u0131r ve ekip i\u00e7inde tutarl\u0131 bir geli\u015ftirme ortam\u0131 sa\u011flar.<\/p>\n<p>Dahas\u0131, Docker Compose <strong>ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimini basitle\u015ftirir<\/strong>. Uygulaman\u0131z\u0131n ihtiya\u00e7 duydu\u011fu t\u00fcm servisler (\u00f6rne\u011fin, PostgreSQL, Redis, Nginx) <code>docker-compose.yml<\/code> dosyas\u0131nda a\u00e7\u0131k\u00e7a tan\u0131mlan\u0131r. Bu, hangi servisin hangi s\u00fcr\u00fcm\u00fcn\u00fc kulland\u0131\u011f\u0131n\u0131z\u0131 net bir \u015fekilde g\u00f6rmenizi ve y\u00f6netmenizi sa\u011flar. Ayr\u0131ca, servisler aras\u0131 ileti\u015fim de Docker Compose taraf\u0131ndan kolayca yap\u0131land\u0131r\u0131l\u0131r; servisler birbirlerini isimleriyle tan\u0131yabilirler.<\/p>\n<p><strong>\u00d6l\u00e7eklenebilirlik ve tekrarlanabilirlik<\/strong> de Docker Compose&#8217;un \u00f6nemli faydalar\u0131ndand\u0131r. Ayn\u0131 <code>docker-compose.yml<\/code> dosyas\u0131 hem geli\u015ftirme hem de test ortamlar\u0131nda kullan\u0131labilir, hatta k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli \u00fcretim ortamlar\u0131nda bile tercih edilebilir. Bu, uygulaman\u0131z\u0131n farkl\u0131 ortamlarda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 garanti eder. Tek bir komutla servislerinizi \u00f6l\u00e7eklendirebilir, \u00f6rne\u011fin bir web sunucusu servisini birden fazla konteynerde \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu esneklik, uygulama ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca b\u00fcy\u00fck kolayl\u0131klar sunar.<\/p>\n<aside class=\"tip\">\n  Uzman \u0130pucu: Docker Compose sadece geli\u015ftirme ortamlar\u0131 i\u00e7in de\u011fil, ayn\u0131 zamanda k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli \u00fcretim ortamlar\u0131nda da h\u0131zl\u0131 da\u011f\u0131t\u0131m ve y\u00f6netim i\u00e7in kullan\u0131labilir. Ancak b\u00fcy\u00fck \u00f6l\u00e7ekli ve y\u00fcksek eri\u015filebilirlik gerektiren sistemler i\u00e7in Kubernetes gibi daha geli\u015fmi\u015f orkestrasyon ara\u00e7lar\u0131 d\u00fc\u015f\u00fcn\u00fclmelidir.<br \/>\n<\/aside>\n<p>Sonu\u00e7 olarak, Docker Compose, modern uygulama geli\u015ftirmenin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r. \u00c7oklu konteyner uygulamalar\u0131n\u0131 tan\u0131mlama, y\u00f6netme ve da\u011f\u0131tma s\u00fcrecini basitle\u015ftirerek geli\u015ftirici verimlili\u011fini art\u0131r\u0131r ve tutarl\u0131 ortamlar sa\u011flar. Bu makalede, Ubuntu sunucunuzda Docker Compose&#8217;u nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve ilk ad\u0131mlar\u0131n\u0131z\u0131 nas\u0131l ataca\u011f\u0131n\u0131z\u0131 detayl\u0131 bir \u015fekilde \u00f6\u011freneceksiniz.<\/p>\n<h2>Ubuntu&#8217;da Docker Compose Kurulumu: \u00d6n Haz\u0131rl\u0131klar Nelerdir?<\/h2>\n<p>Docker Compose&#8217;u Ubuntu sisteminize kurmadan \u00f6nce, baz\u0131 temel \u00f6n haz\u0131rl\u0131klar\u0131 tamamlaman\u0131z gerekmektedir. Bu ad\u0131mlar, sorunsuz bir kurulum s\u00fcreci ve Docker ekosisteminin verimli \u00e7al\u0131\u015fmas\u0131 i\u00e7in kritik \u00f6neme sahiptir. \u00d6ncelikle, sisteminizin g\u00fcncel oldu\u011fundan ve Docker&#8217;\u0131n kurulu oldu\u011fundan emin olmal\u0131s\u0131n\u0131z. Docker Compose, Docker Engine \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, Docker&#8217;\u0131n varl\u0131\u011f\u0131 bir \u00f6n ko\u015fuldur.<\/p>\n<h3>Sistem G\u00fcncellemesi ve Temel Ba\u011f\u0131ml\u0131l\u0131klar<\/h3>\n<p>Herhangi bir yaz\u0131l\u0131m kurulumuna ba\u015flamadan \u00f6nce, Ubuntu sisteminizi g\u00fcncel tutmak iyi bir al\u0131\u015fkanl\u0131kt\u0131r. Bu, mevcut paketlerin en son s\u00fcr\u00fcmlerine sahip olman\u0131z\u0131 ve olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapat\u0131lmas\u0131n\u0131 sa\u011flar. Terminalinizi a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n<p><code>sudo apt update<\/code> komutu, paket listelerinizi g\u00fcncellerken, <code>sudo apt upgrade -y<\/code> komutu ise mevcut t\u00fcm paketleri y\u00fckseltir. <code>-y<\/code> bayra\u011f\u0131, t\u00fcm sorulara otomatik olarak &#8220;evet&#8221; yan\u0131t\u0131 vermenizi sa\u011flar, bu da s\u00fcreci h\u0131zland\u0131r\u0131r.<\/p>\n<p>Ayr\u0131ca, Docker Compose&#8217;un ihtiya\u00e7 duyabilece\u011fi baz\u0131 temel ba\u011f\u0131ml\u0131l\u0131klar\u0131 da kurmak faydal\u0131 olabilir. \u00c7o\u011fu modern Ubuntu s\u00fcr\u00fcm\u00fcnde bunlar zaten kurulu olsa da, kontrol etmek veya eksikleri tamamlamak i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<\/p>\n<pre><code>sudo apt install -y apt-transport-https ca-certificates curl software-properties-common<\/code><\/pre>\n<p>Bu paketler, HTTPS \u00fczerinden paket indirme yetene\u011fi, sertifika do\u011frulama ve yaz\u0131l\u0131m depolar\u0131n\u0131 y\u00f6netme gibi i\u015flevler sa\u011flar. \u00d6zellikle <code>curl<\/code>, Docker Compose&#8217;u indirmek i\u00e7in s\u0131k\u00e7a kullan\u0131lan bir ara\u00e7t\u0131r.<\/p>\n<h3>Docker Engine Kurulumu<\/h3>\n<p>Docker Compose&#8217;un \u00e7al\u0131\u015fabilmesi i\u00e7in sisteminizde Docker Engine&#8217;in kurulu ve \u00e7al\u0131\u015f\u0131r durumda olmas\u0131 \u015fartt\u0131r. E\u011fer Docker hen\u00fcz kurulu de\u011filse, a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyerek kurabilirsiniz. Bu ad\u0131mlar, Docker&#8217;\u0131n resmi deposunu ekleyerek en g\u00fcncel ve kararl\u0131 s\u00fcr\u00fcm\u00fcn\u00fc y\u00fcklemenizi sa\u011flar.<\/p>\n<ol>\n<li><strong>Docker GPG anahtar\u0131n\u0131 ekleyin:<\/strong> Bu ad\u0131m, Docker paketlerinin g\u00fcvenilirli\u011fini do\u011frulamak i\u00e7in gereklidir.\n<pre><code>curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg<\/code><\/pre>\n<\/li>\n<li><strong>Docker deposunu ekleyin:<\/strong> Bu komut, Docker paketlerinin bulundu\u011fu depoyu sisteminizin <code>apt<\/code> kaynaklar\u0131na ekler. Ubuntu s\u00fcr\u00fcm\u00fcn\u00fcze uygun depo URL&#8217;sini kullan\u0131r.\n<pre><code>echo \\\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<\/code><\/pre>\n<\/li>\n<li><strong>Paket listesini g\u00fcncelleyin:<\/strong> Yeni eklenen depoyu sisteminize tan\u0131tmak i\u00e7in paket listesini tekrar g\u00fcncellemeniz gerekir.\n<pre><code>sudo apt update<\/code><\/pre>\n<\/li>\n<li><strong>Docker Engine&#8217;i kurun:<\/strong> Art\u0131k Docker Engine ve ilgili ara\u00e7lar\u0131 y\u00fckleyebilirsiniz.\n<pre><code>sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin<\/code><\/pre>\n<p>Bu komut, Docker Engine&#8217;in kendisini (<code>docker-ce<\/code>), komut sat\u0131r\u0131 aray\u00fcz\u00fcn\u00fc (<code>docker-ce-cli<\/code>), konteyner \u00e7al\u0131\u015fma zaman\u0131n\u0131 (<code>containerd.io<\/code>) ve Docker Compose&#8217;un yeni eklenti s\u00fcr\u00fcm\u00fcn\u00fc (<code>docker-compose-plugin<\/code>) kurar. <strong>\u00d6nemli not:<\/strong> <code>docker-compose-plugin<\/code>, Docker Compose&#8217;un eski ba\u011f\u0131ms\u0131z ikili s\u00fcr\u00fcm\u00fcn\u00fcn yerini alan, Docker CLI&#8217;a entegre edilmi\u015f yeni versiyonudur. Bu makalede, bu modern kurulum y\u00f6ntemine odaklanaca\u011f\u0131z.<\/p>\n<\/li>\n<\/ol>\n<p>Kurulum tamamland\u0131ktan sonra, Docker servisinin otomatik olarak ba\u015flat\u0131ld\u0131\u011f\u0131ndan emin olun ve durumunu kontrol edin:<\/p>\n<pre><code>sudo systemctl start docker\nsudo systemctl enable docker\nsudo systemctl status docker<\/code><\/pre>\n<p><code>systemctl status docker<\/code> komutu, Docker servisinin &#8220;active (running)&#8221; durumda oldu\u011funu g\u00f6stermelidir. Ayr\u0131ca, Docker&#8217;\u0131 <code>sudo<\/code> kullanmadan \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131c\u0131 hesab\u0131n\u0131z\u0131 <code>docker<\/code> grubuna ekleyebilirsiniz:<\/p>\n<pre><code>sudo usermod -aG docker $USER\nnewgrp docker<\/code><\/pre>\n<p>Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, oturumu kapat\u0131p tekrar a\u00e7man\u0131z veya sisteminizi yeniden ba\u015flatman\u0131z gerekebilir ki de\u011fi\u015fiklikler tam olarak uygulans\u0131n. Bu \u00f6n haz\u0131rl\u0131klar, Docker Compose&#8217;u sorunsuz bir \u015fekilde kurman\u0131z ve kullanmaya ba\u015flaman\u0131z i\u00e7in sa\u011flam bir temel olu\u015fturacakt\u0131r. Art\u0131k Docker ekosistemi i\u00e7in haz\u0131r\u0131z.<\/p>\n<h2>Docker Compose Ubuntu \u00dczerine Nas\u0131l Y\u00fcklenir?<\/h2>\n<p>Docker Compose&#8217;u Ubuntu sisteminize y\u00fcklemenin iki ana yolu vard\u0131r: ba\u011f\u0131ms\u0131z ikili dosya olarak veya Docker CLI eklentisi olarak. Docker&#8217;\u0131n son s\u00fcr\u00fcmleriyle birlikte, Docker Compose art\u0131k genellikle bir Docker CLI eklentisi olarak gelir ve bu, \u00f6nerilen modern yakla\u015f\u0131md\u0131r. Daha \u00f6nceki b\u00f6l\u00fcmde Docker Engine&#8217;i kurarken <code>docker-compose-plugin<\/code> paketini zaten y\u00fcklemi\u015ftik. Bu, Docker Compose&#8217;un en g\u00fcncel ve entegre edilmi\u015f s\u00fcr\u00fcm\u00fcn\u00fc elde etti\u011finiz anlam\u0131na gelir. Ancak, baz\u0131 eski sistemler veya \u00f6zel gereksinimler i\u00e7in ba\u011f\u0131ms\u0131z ikili dosya kurulumu da hala ge\u00e7erli olabilir. Bu b\u00f6l\u00fcmde her iki y\u00f6ntemi de detayl\u0131ca ele alaca\u011f\u0131z.<\/p>\n<h3>Y\u00f6ntem 1: Docker CLI Eklentisi Olarak Kurulum (\u00d6nerilen)<\/h3>\n<p>Docker&#8217;\u0131n 1.27.0 s\u00fcr\u00fcm\u00fcnden itibaren Docker Compose, Docker CLI&#8217;\u0131n bir par\u00e7as\u0131 haline gelmi\u015ftir ve <code>docker compose<\/code> (bo\u015fluklu) \u015feklinde kullan\u0131l\u0131r. E\u011fer Docker Engine kurulumu s\u0131ras\u0131nda <code>docker-compose-plugin<\/code> paketini yukar\u0131daki ad\u0131mlar\u0131 takip ederek kurduysan\u0131z, Docker Compose zaten sisteminizde y\u00fckl\u00fcd\u00fcr. Bu, kurulumun en basit ve en g\u00fcncel yoludur.<\/p>\n<p>Bu y\u00f6ntemin avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Entegrasyon:<\/strong> Docker CLI ile sorunsuz bir \u015fekilde entegre olur. Komutlar <code>docker compose ...<\/code> \u015feklinde \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><strong>G\u00fcncellik:<\/strong> Docker Engine ile birlikte g\u00fcncellenir, bu da uyumluluk sorunlar\u0131n\u0131 azalt\u0131r.<\/li>\n<li><strong>Basitlik:<\/strong> Tek bir komutla Docker Engine ve Compose eklentisini birlikte kurabilirsiniz.<\/li>\n<\/ul>\n<p>Kurulumun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>docker compose version<\/code><\/pre>\n<p>Bu komut, y\u00fckl\u00fc Docker Compose eklentisinin s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6stermelidir. \u00d6rne\u011fin, <code>Docker Compose version v2.x.x<\/code> gibi bir \u00e7\u0131kt\u0131 almal\u0131s\u0131n\u0131z. E\u011fer bu komut \u00e7al\u0131\u015f\u0131yorsa, Docker Compose&#8217;u ba\u015far\u0131yla kurdunuz demektir ve ba\u011f\u0131ms\u0131z ikili dosya kurulumuna ihtiyac\u0131n\u0131z yoktur. Bu modern yakla\u015f\u0131m, gelecekteki Docker geli\u015ftirmeleriyle de daha uyumlu olacakt\u0131r.<\/p>\n<h3>Y\u00f6ntem 2: Ba\u011f\u0131ms\u0131z \u0130kili Dosya Olarak Kurulum (Eski Y\u00f6ntem \/ Alternatif)<\/h3>\n<p>E\u011fer herhangi bir nedenle Docker CLI eklentisini kullanmak istemiyorsan\u0131z veya Docker&#8217;\u0131n daha eski bir s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131yorsan\u0131z, Docker Compose&#8217;u ba\u011f\u0131ms\u0131z bir ikili dosya olarak da kurabilirsiniz. Bu y\u00f6ntem, genellikle <code>docker-compose<\/code> (tireli) \u015feklinde komutlar\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flar. Bu kurulum, Docker Compose&#8217;un belirli bir s\u00fcr\u00fcm\u00fcn\u00fc hedeflemeniz gerekti\u011finde veya Docker Engine&#8217;den ba\u011f\u0131ms\u0131z olarak g\u00fcncellemek istedi\u011finizde faydal\u0131 olabilir.<\/p>\n<h4>1. Docker Compose&#8217;un Son Kararl\u0131 S\u00fcr\u00fcm\u00fcn\u00fc \u0130ndirme<\/h4>\n<p>Docker Compose&#8217;un en son kararl\u0131 s\u00fcr\u00fcm\u00fcn\u00fc GitHub deposundan do\u011frudan indirebilirsiniz. S\u00fcr\u00fcm numaras\u0131n\u0131 kontrol etmek i\u00e7in <a href=\"https:\/\/github.com\/docker\/compose\/releases\" target=\"_blank\" rel=\"noopener\">Docker Compose GitHub Releases<\/a> sayfas\u0131n\u0131 ziyaret edebilirsiniz. A\u015fa\u011f\u0131daki \u00f6rnekte, varsay\u0131lan olarak en g\u00fcncel s\u00fcr\u00fcm\u00fc indirmek i\u00e7in bir de\u011fi\u015fken kullanaca\u011f\u0131z, ancak dilerseniz belirli bir s\u00fcr\u00fcm numaras\u0131n\u0131 (\u00f6rne\u011fin, <code>v1.29.2<\/code>) do\u011frudan belirtebilirsiniz.<\/p>\n<pre><code>COMPOSE_VERSION=$(curl -s https:\/\/api.github.com\/repos\/docker\/compose\/releases\/latest | grep 'tag_name' | cut -d\\\" -f4)\nsudo curl -L \"https:\/\/github.com\/docker\/compose\/releases\/download\/$COMPOSE_VERSION\/docker-compose-$(uname -s)-$(uname -m)\" -o \/usr\/local\/bin\/docker-compose<\/code><\/pre>\n<p>Bu komutlar:<\/p>\n<ul>\n<li>\u0130lk sat\u0131r, GitHub API&#8217;sini kullanarak Docker Compose&#8217;un en son s\u00fcr\u00fcm numaras\u0131n\u0131 al\u0131r ve <code>COMPOSE_VERSION<\/code> de\u011fi\u015fkenine atar.<\/li>\n<li>\u0130kinci sat\u0131r, <code>curl<\/code> kullanarak belirtilen URL&#8217;den Docker Compose ikili dosyas\u0131n\u0131 indirir. <code>$(uname -s)<\/code> i\u015fletim sistemi ad\u0131n\u0131 (Linux), <code>$(uname -m)<\/code> ise makine mimarisini (x86_64 gibi) otomatik olarak alg\u0131lar. \u0130ndirilen dosya <code>\/usr\/local\/bin\/docker-compose<\/code> konumuna kaydedilir. Bu konum, sistemin PATH de\u011fi\u015fkeninde oldu\u011fu i\u00e7in komutun her yerden \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<h4>2. \u00c7al\u0131\u015ft\u0131rma \u0130zni Verme<\/h4>\n<p>\u0130ndirdi\u011finiz ikili dosyan\u0131n \u00e7al\u0131\u015ft\u0131r\u0131labilir olmas\u0131 i\u00e7in izinleri ayarlaman\u0131z gerekir:<\/p>\n<pre><code>sudo chmod +x \/usr\/local\/bin\/docker-compose<\/code><\/pre>\n<p>Bu komut, <code>\/usr\/local\/bin\/docker-compose<\/code> dosyas\u0131na \u00e7al\u0131\u015ft\u0131rma izni verir.<\/p>\n<h4>3. Kurulumu Do\u011frulama<\/h4>\n<p>Kurulumun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>docker-compose --version<\/code><\/pre>\n<p>Bu komut, y\u00fckl\u00fc Docker Compose s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6stermelidir. \u00d6rne\u011fin, <code>docker-compose version 1.29.2, build 5becea4c<\/code> gibi bir \u00e7\u0131kt\u0131 almal\u0131s\u0131n\u0131z. E\u011fer bu komut \u00e7al\u0131\u015f\u0131yorsa, Docker Compose&#8217;u ba\u011f\u0131ms\u0131z ikili dosya olarak ba\u015far\u0131yla kurdunuz demektir.<\/p>\n<aside class=\"tip\">\n  Uzman \u0130pucu: E\u011fer hem <code>docker compose<\/code> (eklenti) hem de <code>docker-compose<\/code> (ba\u011f\u0131ms\u0131z ikili) y\u00fckl\u00fcyse, genellikle modern uygulamalar i\u00e7in <code>docker compose<\/code> kullan\u0131lmas\u0131 \u00f6nerilir. \u0130ki farkl\u0131 versiyonun ayn\u0131 anda var olmas\u0131, \u00f6zellikle farkl\u0131 projelerde farkl\u0131 versiyonlar gerekiyorsa kafa kar\u0131\u015f\u0131kl\u0131\u011f\u0131na yol a\u00e7abilir. Genellikle sadece eklenti s\u00fcr\u00fcm\u00fcn\u00fc kullanmak yeterlidir.<br \/>\n<\/aside>\n<p>Her iki y\u00f6ntem de Docker Compose&#8217;u sisteminize getirecektir. Hangi y\u00f6ntemi se\u00e7erseniz se\u00e7in, ana hedefimiz \u00e7oklu konteyner uygulamalar\u0131n\u0131 kolayca y\u00f6netebilmek ve geli\u015ftirme ortamlar\u0131m\u0131z\u0131 standardize etmektir. Bir sonraki ad\u0131mda, kurulumun do\u011fru yap\u0131ld\u0131\u011f\u0131n\u0131 nas\u0131l do\u011frulayaca\u011f\u0131m\u0131z\u0131 ve ilk Docker Compose uygulaman\u0131z\u0131 nas\u0131l \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z\u0131 g\u00f6rece\u011fiz.<\/p>\n<h2>Docker Compose Kurulumunu Do\u011frulama ve \u0130lk Uygulaman\u0131z\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h2>\n<p>Docker Compose&#8217;u Ubuntu sisteminize ba\u015far\u0131yla kurduktan sonra, kurulumun do\u011fru bir \u015fekilde yap\u0131ld\u0131\u011f\u0131ndan emin olmak ve arac\u0131n temel i\u015flevselli\u011fini test etmek i\u00e7in birka\u00e7 do\u011frulama ad\u0131m\u0131 atmak \u00f6nemlidir. Ard\u0131ndan, basit bir \u00f6rnek uygulama ile Docker Compose&#8217;un g\u00fcc\u00fcn\u00fc ilk elden deneyimleyebiliriz. Bu b\u00f6l\u00fcm, hem kurulumu teyit etmenize hem de Docker Compose ile \u00e7al\u0131\u015fma mant\u0131\u011f\u0131n\u0131 anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>Kurulumun Do\u011frulanmas\u0131<\/h3>\n<p>Daha \u00f6nceki b\u00f6l\u00fcmde de bahsetti\u011fimiz gibi, Docker Compose&#8217;un do\u011fru bir \u015fekilde kurulup kurulmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in s\u00fcr\u00fcm komutunu kullanabilirsiniz. E\u011fer Docker CLI eklentisi olarak kurduysan\u0131z:<\/p>\n<pre><code>docker compose version<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131 olarak, \u00f6rne\u011fin <code>Docker Compose version v2.23.3<\/code> gibi bir \u015fey g\u00f6rmelisiniz. Bu, Docker CLI ile entegre olan yeni versiyonun \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<p>E\u011fer ba\u011f\u0131ms\u0131z ikili dosya olarak kurduysan\u0131z:<\/p>\n<pre><code>docker-compose --version<\/code><\/pre>\n<p>Bu komut ise <code>docker-compose version 1.29.2, build 5becea4c<\/code> gibi bir \u00e7\u0131kt\u0131 vermelidir. Bu \u00e7\u0131kt\u0131lar, komutun sisteminizde tan\u0131nd\u0131\u011f\u0131n\u0131 ve bir s\u00fcr\u00fcm bilgisi d\u00f6nd\u00fcrd\u00fc\u011f\u00fcn\u00fc g\u00f6sterir. E\u011fer &#8220;command not found&#8221; (komut bulunamad\u0131) hatas\u0131 al\u0131rsan\u0131z, kurulum ad\u0131mlar\u0131n\u0131 tekrar g\u00f6zden ge\u00e7irmeniz veya PATH de\u011fi\u015fkeninizi kontrol etmeniz gerekebilir.<\/p>\n<p>Ayr\u0131ca, Docker&#8217;\u0131n kendisinin de d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in basit bir Docker komutu \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code>docker run hello-world<\/code><\/pre>\n<p>Bu komut, Docker&#8217;\u0131n temel i\u015flevselli\u011fini test eden k\u00fc\u00e7\u00fck bir &#8220;hello-world&#8221; konteynerini indirip \u00e7al\u0131\u015ft\u0131racakt\u0131r. E\u011fer her \u015fey yolundaysa, terminalinizde &#8220;Hello from Docker!&#8221; mesaj\u0131n\u0131 i\u00e7eren bir \u00e7\u0131kt\u0131 g\u00f6rmelisiniz. Bu, Docker Engine&#8217;in sorunsuz \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve Docker Compose i\u00e7in zemin haz\u0131rlad\u0131\u011f\u0131n\u0131 teyit eder.<\/p>\n<h3>Docker Compose ile \u0130lk Uygulaman\u0131z\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>\u015eimdi s\u0131ra geldi Docker Compose&#8217;un pratikte nas\u0131l kullan\u0131ld\u0131\u011f\u0131na. Basit bir &#8220;Web sunucusu ve Redis cache&#8221; uygulamas\u0131 olu\u015fturarak Docker Compose&#8217;un \u00e7oklu servisleri nas\u0131l y\u00f6netti\u011fini g\u00f6relim. Bu \u00f6rnek, bir Nginx web sunucusu ve bir Redis in-memory veri yap\u0131s\u0131 sunucusunu ayn\u0131 anda \u00e7al\u0131\u015ft\u0131racak.<\/p>\n<h4>1. Proje Dizini Olu\u015fturma<\/h4>\n<p>\u00d6ncelikle, projeniz i\u00e7in yeni bir dizin olu\u015fturun ve bu dizine ge\u00e7in:<\/p>\n<pre><code>mkdir my-compose-app\ncd my-compose-app<\/code><\/pre>\n<h4>2. docker-compose.yml Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>Bu dizin i\u00e7inde <code>docker-compose.yml<\/code> ad\u0131nda bir dosya olu\u015fturun ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code># my-compose-app\/docker-compose.yml\nversion: '3.8' # Docker Compose dosyas\u0131n\u0131n versiyonu\n\nservices:\n  web:\n    image: nginx:latest # Nginx web sunucusu imaj\u0131n\u0131 kullan\n    ports:\n      - \"80:80\" # Host'un 80. portunu konteynerin 80. portuna y\u00f6nlendir\n    volumes:\n      - .\/nginx.conf:\/etc\/nginx\/nginx.conf:ro # Kendi nginx.conf dosyam\u0131z\u0131 ba\u011fla\n    depends_on:\n      - redis # Web servisi Redis'e ba\u011fl\u0131d\u0131r, Redis ba\u015flamadan web ba\u015flamaz\n\n  redis:\n    image: redis:latest # Redis sunucusu imaj\u0131n\u0131 kullan\n    ports:\n      - \"6379:6379\" # Host'un 6379. portunu konteynerin 6379. portuna y\u00f6nlendir\n    volumes:\n      - redis_data:\/data # Redis verilerini kal\u0131c\u0131 depolamak i\u00e7in bir birim (volume) kullan\n\nvolumes:\n  redis_data: # Redis verileri i\u00e7in bir birim tan\u0131mla<\/code><\/pre>\n<p>Bu YAML dosyas\u0131 iki ana servis tan\u0131mlar: <code>web<\/code> (Nginx) ve <code>redis<\/code> (Redis). Her servisin hangi Docker imaj\u0131n\u0131 kullanaca\u011f\u0131, hangi portlar\u0131 d\u0131\u015far\u0131ya a\u00e7aca\u011f\u0131 ve hangi birimleri (volumes) kullanaca\u011f\u0131 belirtilmi\u015ftir. <code>depends_on<\/code> anahtar\u0131, <code>web<\/code> servisinin <code>redis<\/code> servisi ba\u015flat\u0131lmadan \u00f6nce ba\u015flamamas\u0131n\u0131 sa\u011flar. <code>volumes<\/code> b\u00f6l\u00fcm\u00fc ise Redis verilerinin kal\u0131c\u0131 olarak saklanmas\u0131 i\u00e7in bir named volume tan\u0131mlar.<\/p>\n<h4>3. Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h4>\n<p><code>web<\/code> servisi i\u00e7in \u00f6zel bir Nginx yap\u0131land\u0131rma dosyas\u0131 (<code>nginx.conf<\/code>) ba\u011flad\u0131k. Bu dosyay\u0131 da <code>my-compose-app<\/code> dizini i\u00e7inde olu\u015fturun:<\/p>\n<pre><code># my-compose-app\/nginx.conf\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        location \/redis-status {\n            # Redis durumunu g\u00f6stermek i\u00e7in basit bir proxy \u00f6rne\u011fi\n            # Bu \u00f6rnekte Redis'in bir HTTP aray\u00fcz\u00fc olmad\u0131\u011f\u0131 i\u00e7in do\u011frudan \u00e7al\u0131\u015fmaz,\n            # ancak bir uygulama arac\u0131l\u0131\u011f\u0131yla Redis'e ba\u011flan\u0131labilir.\n            # Sadece bir konsepti g\u00f6stermektedir.\n            return 200 \"Redis is running (simulated)\";\n            add_header Content-Type text\/plain;\n        }\n    }\n}<\/code><\/pre>\n<p>Bu basit Nginx yap\u0131land\u0131rmas\u0131, gelen istekleri varsay\u0131lan HTML dizinine y\u00f6nlendirir ve <code>\/redis-status<\/code> URL&#8217;sine yap\u0131lan istekler i\u00e7in basit bir metin yan\u0131t\u0131 d\u00f6ner. Bu, Nginx&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve yap\u0131land\u0131rma dosyam\u0131z\u0131n y\u00fcklendi\u011fini test etmek i\u00e7in yeterlidir.<\/p>\n<h4>4. Uygulamay\u0131 Ba\u015flatma<\/h4>\n<p>T\u00fcm dosyalar haz\u0131r oldu\u011funda, proje dizininizdeyken a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak uygulamay\u0131 ba\u015flatabilirsiniz:<\/p>\n<pre><code>docker compose up -d<\/code><\/pre>\n<p>Veya eski ba\u011f\u0131ms\u0131z ikili dosya kullan\u0131yorsan\u0131z:<\/p>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<p><code>up<\/code> komutu, <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 okur, gerekli Docker imajlar\u0131n\u0131 (Nginx ve Redis) indirir (e\u011fer yerel olarak mevcut de\u011fillerse), servisleri olu\u015fturur ve ba\u015flat\u0131r. <code>-d<\/code> bayra\u011f\u0131, konteynerleri arka planda (detached mode) \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flar, b\u00f6ylece terminaliniz serbest kal\u0131r.<\/p>\n<p>Konteynerlerin durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code>docker compose ps<\/code><\/pre>\n<p>Bu komut, \u00e7al\u0131\u015fan servisleri ve durumlar\u0131n\u0131 listeler. Her iki servisin de &#8220;Up&#8221; (\u00e7al\u0131\u015f\u0131yor) durumda oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h4>5. Uygulamay\u0131 Test Etme<\/h4>\n<p>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, Nginx servisinin d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve host makinenizin 80. portuna y\u00f6nlendirildi\u011fini g\u00f6sterir.<\/p>\n<p>Uygulamay\u0131 durdurmak ve olu\u015fturulan t\u00fcm kaynaklar\u0131 (a\u011flar, birimler hari\u00e7 konteynerler) kald\u0131rmak i\u00e7in:<\/p>\n<pre><code>docker compose down<\/code><\/pre>\n<p>Veya ba\u011f\u0131ms\u0131z ikili dosya kullan\u0131yorsan\u0131z:<\/p>\n<pre><code>docker-compose down<\/code><\/pre>\n<p>E\u011fer birimleri de kald\u0131rmak isterseniz (bu \u00f6rnekte Redis verileri):<\/p>\n<pre><code>docker compose down --volumes<\/code><\/pre>\n<p>Bu ad\u0131mlar, Docker Compose kurulumunuzu do\u011frulaman\u0131n ve \u00e7oklu konteyner uygulamalar\u0131n\u0131 y\u00f6netmenin temelini olu\u015fturur. Art\u0131k Docker Compose&#8217;un sisteminizde \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan ve temel bir uygulamay\u0131 ba\u015far\u0131yla ba\u015flat\u0131p durdurabildi\u011finizden eminsiniz.<\/p>\n<h2>Vaka Analizi: Mikroservis Tabanl\u0131 Bir Uygulaman\u0131n Docker Compose ile Y\u00f6netimi<\/h2>\n<p>Docker Compose&#8217;un ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l kullan\u0131ld\u0131\u011f\u0131na dair somut bir \u00f6rnek, mikroservis tabanl\u0131 bir uygulaman\u0131n geli\u015ftirme ortam\u0131n\u0131 y\u00f6netmek olabilir. Bu vaka analizi, Docker Compose&#8217;un karma\u015f\u0131k ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve \u00e7oklu servisleri tek bir yap\u0131land\u0131rma dosyas\u0131yla nas\u0131l d\u00fczenledi\u011fini g\u00f6sterecektir. Senaryomuz, bir e-ticaret uygulamas\u0131n\u0131n temel bile\u015fenlerinden olu\u015fan bir mikroservis mimarisi olsun: bir \u00fcr\u00fcn katalo\u011fu servisi, bir sipari\u015f y\u00f6netimi servisi, bir kullan\u0131c\u0131 do\u011frulama servisi ve bir PostgreSQL veritaban\u0131.<\/p>\n<h3>Senaryo: E-ticaret Mikroservisleri Geli\u015ftirme Ortam\u0131<\/h3>\n<p>Uygulamam\u0131z\u0131n bile\u015fenleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Product Service (\u00dcr\u00fcn Servisi):<\/strong> \u00dcr\u00fcn bilgilerini y\u00f6netir, kendi veritaban\u0131na ba\u011flan\u0131r. (Python\/Flask)<\/li>\n<li><strong>Order Service (Sipari\u015f Servisi):<\/strong> Sipari\u015fleri i\u015fler, \u00fcr\u00fcn servisi ile ileti\u015fim kurar ve kendi veritaban\u0131na ba\u011flan\u0131r. (Node.js\/Express)<\/li>\n<li><strong>Auth Service (Kimlik Do\u011frulama Servisi):<\/strong> Kullan\u0131c\u0131 kimlik bilgilerini y\u00f6netir, token \u00fcretir. (Go)<\/li>\n<li><strong>PostgreSQL Database:<\/strong> Hem \u00fcr\u00fcn hem de sipari\u015f servisleri i\u00e7in merkezi bir veritaban\u0131.<\/li>\n<li><strong>Nginx Gateway:<\/strong> T\u00fcm servisler i\u00e7in ters proxy ve y\u00fck dengeleyici g\u00f6revi g\u00f6r\u00fcr.<\/li>\n<\/ul>\n<p>Bu mimaride her servis kendi Docker imaj\u0131na sahiptir ve kendi ba\u011f\u0131ml\u0131l\u0131klar\u0131 vard\u0131r. Geli\u015ftiricilerin bu be\u015f bile\u015feni manuel olarak kurup yap\u0131land\u0131rmas\u0131, her yeni geli\u015ftirici i\u00e7in ciddi bir zaman kayb\u0131 ve hata potansiyeli yarat\u0131r. Docker Compose bu s\u00fcreci nas\u0131l basitle\u015ftirir?<\/p>\n<h3>Docker Compose Yap\u0131land\u0131rmas\u0131 (<code>docker-compose.yml<\/code>)<\/h3>\n<p>A\u015fa\u011f\u0131da, bu mikroservis mimarisi i\u00e7in basitle\u015ftirilmi\u015f bir <code>docker-compose.yml<\/code> dosyas\u0131 \u00f6rne\u011fi bulunmaktad\u0131r:<\/p>\n<pre><code>version: '3.8'\n\nservices:\n  # PostgreSQL Veritaban\u0131 Servisi\n  db:\n    image: postgres:13\n    restart: always\n    environment:\n      POSTGRES_DB: ecommerce_db\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n    volumes:\n      - db_data:\/var\/lib\/postgresql\/data\n    ports:\n      - \"5432:5432\" # Sadece geli\u015ftirme i\u00e7in d\u0131\u015far\u0131ya a\u00e7\u0131ld\u0131\n\n  # \u00dcr\u00fcn Servisi (Python\/Flask)\n  product-service:\n    build: .\/product-service # product-service dizinindeki Dockerfile'dan imaj olu\u015ftur\n    ports:\n      - \"5000:5000\"\n    environment:\n      DATABASE_URL: postgresql:\/\/user:password@db:5432\/ecommerce_db\n    depends_on:\n      - db # Veritaban\u0131na ba\u011f\u0131ml\u0131\n\n  # Sipari\u015f Servisi (Node.js\/Express)\n  order-service:\n    build: .\/order-service # order-service dizinindeki Dockerfile'dan imaj olu\u015ftur\n    ports:\n      - \"5001:5001\"\n    environment:\n      DATABASE_URL: postgresql:\/\/user:password@db:5432\/ecommerce_db\n      PRODUCT_SERVICE_URL: http:\/\/product-service:5000\n    depends_on:\n      - db\n      - product-service # \u00dcr\u00fcn servisine ba\u011f\u0131ml\u0131\n\n  # Kimlik Do\u011frulama Servisi (Go)\n  auth-service:\n    build: .\/auth-service # auth-service dizinindeki Dockerfile'dan imaj olu\u015ftur\n    ports:\n      - \"5002:5002\"\n    environment:\n      AUTH_SECRET_KEY: supersecretkey\n    depends_on:\n      - db # Veritaban\u0131na ba\u011flanabilir (iste\u011fe ba\u011fl\u0131)\n\n  # Nginx Gateway\n  nginx:\n    image: nginx:latest\n    ports:\n      - \"80:80\" # T\u00fcm d\u0131\u015f trafik 80. porttan gelir\n    volumes:\n      - .\/nginx.conf:\/etc\/nginx\/nginx.conf:ro # \u00d6zel Nginx yap\u0131land\u0131rmas\u0131\n    depends_on:\n      - product-service\n      - order-service\n      - auth-service # T\u00fcm servislere ba\u011f\u0131ml\u0131\n\nvolumes:\n  db_data: # PostgreSQL verileri i\u00e7in kal\u0131c\u0131 birim<\/code><\/pre>\n<h3>Vaka Analizinin Faydalar\u0131 ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Bu <code>docker-compose.yml<\/code> dosyas\u0131, yukar\u0131daki karma\u015f\u0131k mikroservis mimarisini tek bir dosya i\u00e7inde tan\u0131mlayarak geli\u015ftirme ortam\u0131 kurulumunu inan\u0131lmaz derecede basitle\u015ftirir. \u0130\u015fte sa\u011flad\u0131\u011f\u0131 faydalar:<\/p>\n<ol>\n<li><strong>Tek Komutla Ortam Kurulumu:<\/strong> Yeni bir geli\u015ftirici, repoyu klonlad\u0131ktan sonra sadece <code>docker compose up -d<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak t\u00fcm mikroservisleri ve veritaban\u0131n\u0131 i\u00e7eren eksiksiz bir geli\u015ftirme ortam\u0131n\u0131 saniyeler i\u00e7inde aya\u011fa kald\u0131rabilir. Bu, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; sorununu ortadan kald\u0131r\u0131r ve onboarding s\u00fcrecini h\u0131zland\u0131r\u0131r.<\/li>\n<li><strong>Servisler Aras\u0131 \u0130leti\u015fim:<\/strong> Docker Compose, ayn\u0131 a\u011f \u00fczerinde \u00e7al\u0131\u015fan servislerin birbirleriyle isimleriyle ileti\u015fim kurmas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, <code>order-service<\/code>, <code>http:\/\/product-service:5000<\/code> adresinden <code>product-service<\/code>&#8216;e eri\u015febilir. Bu, a\u011f yap\u0131land\u0131rmas\u0131yla u\u011fra\u015fma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/li>\n<li><strong>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi:<\/strong> <code>depends_on<\/code> anahtar\u0131, servisler aras\u0131ndaki ba\u015flatma s\u0131ras\u0131n\u0131 belirler. \u00d6rne\u011fin, <code>product-service<\/code>&#8216;in <code>db<\/code> servisi ba\u015flamadan \u00f6nce ba\u015flamamas\u0131n\u0131 garanti eder. Bu, servislerin do\u011fru s\u0131rada ba\u015flat\u0131lmas\u0131n\u0131 ve hata olas\u0131l\u0131\u011f\u0131n\u0131n azalmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Kal\u0131c\u0131 Veri Depolama:<\/strong> <code>volumes<\/code> kullan\u0131m\u0131 (<code>db_data<\/code> \u00f6rne\u011finde oldu\u011fu gibi), konteynerler silinse bile veritaban\u0131 verilerinin kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flar. Bu, geli\u015ftiricilerin veri kaybetme endi\u015fesi olmadan konteynerleri yeniden olu\u015fturmas\u0131na olanak tan\u0131r.<\/li>\n<li><strong>\u00d6zelle\u015ftirilmi\u015f Yap\u0131land\u0131rmalar:<\/strong> Nginx i\u00e7in \u00f6zel bir <code>nginx.conf<\/code> dosyas\u0131 ba\u011flamak gibi, servislerin \u00f6zel yap\u0131land\u0131rma dosyalar\u0131n\u0131 da kolayca entegre edebilirsiniz. Bu, esneklik ve \u00f6zelle\u015ftirme imkan\u0131 sunar.<\/li>\n<li><strong>Versiyon Kontrol\u00fc:<\/strong> <code>docker-compose.yml<\/code> dosyas\u0131, projenin kaynak koduyla birlikte versiyon kontrol sisteminde (Git gibi) saklanabilir. Bu, ortam yap\u0131land\u0131rmas\u0131n\u0131n takip edilebilir, geri al\u0131nabilir ve ekip \u00fcyeleri aras\u0131nda tutarl\u0131 olmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ol>\n<aside class=\"tip\">\n  Uzman \u0130pucu: \u00dcretim ortamlar\u0131nda <code>depends_on<\/code> anahtar\u0131 sadece ba\u015flatma s\u0131ras\u0131n\u0131 garanti eder, servislerin tamamen &#8220;haz\u0131r&#8221; oldu\u011funu de\u011fil. Canl\u0131 sistemlerde servisler aras\u0131 sa\u011fl\u0131k kontrol\u00fc ve yeniden deneme mekanizmalar\u0131 (retry mechanisms) kullanmak daha sa\u011flam bir yakla\u015f\u0131md\u0131r.<br \/>\n<\/aside>\n<p>Bu vaka analizi, Docker Compose&#8217;un sadece basit uygulamalar i\u00e7in de\u011fil, ayn\u0131 zamanda birden fazla servisi ve ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 olan karma\u015f\u0131k mikroservis mimarilerinin geli\u015ftirme ortamlar\u0131n\u0131 y\u00f6netmek i\u00e7in de ne kadar g\u00fc\u00e7l\u00fc ve vazge\u00e7ilmez bir ara\u00e7 oldu\u011funu g\u00f6stermektedir. Geli\u015ftirici verimlili\u011fini art\u0131r\u0131rken, tutarl\u0131l\u0131\u011f\u0131 ve tekrarlanabilirli\u011fi garantiler.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve Optimizasyonlar: Docker Compose&#8217;dan Daha Fazlas\u0131n\u0131 Almak<\/h2>\n<p>Docker Compose&#8217;u temel seviyede kurup kullanmay\u0131 \u00f6\u011frendikten sonra, geli\u015ftirme ve hatta k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli \u00fcretim ortamlar\u0131n\u0131zda daha verimli ve g\u00fc\u00e7l\u00fc hale getirmek i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve optimizasyonlardan faydalanabilirsiniz. Bu b\u00f6l\u00fcm, Docker Compose deneyiminizi bir \u00fcst seviyeye ta\u015f\u0131yacak pratik bilgiler sunacakt\u0131r.<\/p>\n<h3>1. Ortam De\u011fi\u015fkenleri ile Dinamik Yap\u0131land\u0131rma<\/h3>\n<p><code>docker-compose.yml<\/code> dosyan\u0131zda hassas bilgiler (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131) veya ortama \u00f6zg\u00fc de\u011ferler (port numaralar\u0131) bulundurmak yerine, ortam de\u011fi\u015fkenlerini kullanmak daha g\u00fcvenli ve esnektir. Docker Compose, <code>.env<\/code> dosyas\u0131ndan veya shell ortam\u0131ndan de\u011fi\u015fkenleri otomatik olarak y\u00fckleyebilir.<\/p>\n<pre><code># .env dosyas\u0131\nDB_PASSWORD=mysecretpassword\nAPP_PORT=8080<\/code><\/pre>\n<pre><code># docker-compose.yml i\u00e7inde kullan\u0131m\nversion: '3.8'\nservices:\n  app:\n    image: myapp:latest\n    ports:\n      - \"${APP_PORT}:80\" # APP_PORT de\u011feri .env dosyas\u0131ndan al\u0131n\u0131r\n    environment:\n      DATABASE_URL: postgresql:\/\/user:${DB_PASSWORD}@db:5432\/myapp_db<\/code><\/pre>\n<p>Bu y\u00f6ntem, ayn\u0131 <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in farkl\u0131 yap\u0131land\u0131rmalarla kullanman\u0131za olanak tan\u0131r. Hassas verileri versiyon kontrol\u00fcne eklememek i\u00e7in <code>.env<\/code> dosyas\u0131n\u0131 <code>.gitignore<\/code>&#8216;a eklemeyi unutmay\u0131n.<\/p>\n<h3>2. \u00c7oklu Docker Compose Dosyalar\u0131 ile Ortam Ayr\u0131m\u0131<\/h3>\n<p>Farkl\u0131 ortamlar i\u00e7in (geli\u015ftirme, test, \u00fcretim) veya farkl\u0131 \u00f6zellik setleri i\u00e7in (\u00f6rne\u011fin, test i\u00e7in ek bir test veritaban\u0131) birden fazla <code>docker-compose.yml<\/code> dosyas\u0131 kullanabilirsiniz. Bu, ana yap\u0131land\u0131rma dosyas\u0131n\u0131 temiz tutarken, ortama \u00f6zg\u00fc de\u011fi\u015fiklikleri ayr\u0131 dosyalarda y\u00f6netmenizi sa\u011flar.<\/p>\n<pre><code># docker-compose.yml (Temel yap\u0131land\u0131rma)\nversion: '3.8'\nservices:\n  web:\n    image: myapp:latest\n    ports:\n      - \"80:80\"\n  db:\n    image: postgres:13<\/code><\/pre>\n<pre><code># docker-compose.dev.yml (Geli\u015ftirme i\u00e7in ek ayarlar)\nversion: '3.8'\nservices:\n  web:\n    build: . # Geli\u015ftirmede yerel kodu build et\n    volumes:\n      - .:\/app # Kod de\u011fi\u015fikliklerinin an\u0131nda yans\u0131mas\u0131 i\u00e7in\n    environment:\n      DEBUG: 'true'\n  db:\n    ports:\n      - \"5432:5432\" # Geli\u015ftirmede DB'ye d\u0131\u015far\u0131dan eri\u015fim<\/code><\/pre>\n<p>Bu dosyalar\u0131 birlikte kullanmak i\u00e7in <code>-f<\/code> bayra\u011f\u0131n\u0131 kullan\u0131n:<\/p>\n<pre><code>docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d<\/code><\/pre>\n<p>Docker Compose, dosyalar\u0131 soldan sa\u011fa do\u011fru birle\u015ftirir, yani sa\u011fdaki dosyadaki ayarlar soldakileri ge\u00e7ersiz k\u0131lar. Bu, \u00e7ok esnek bir yap\u0131land\u0131rma stratejisi sunar.<\/p>\n<h3>3. Sa\u011fl\u0131k Kontrolleri (Healthchecks)<\/h3>\n<p><code>depends_on<\/code> anahtar\u0131 sadece bir servisin ba\u015flamas\u0131n\u0131 bekler, ancak o servisin tamamen &#8220;haz\u0131r&#8221; olmas\u0131n\u0131 garanti etmez (\u00f6rne\u011fin, bir veritaban\u0131 konteyneri ba\u015flam\u0131\u015f olabilir ama ba\u011flant\u0131lar\u0131 kabul etmeye hen\u00fcz haz\u0131r olmayabilir). Daha sa\u011flam bir uygulama ba\u015flatma s\u0131ras\u0131 i\u00e7in sa\u011fl\u0131k kontrollerini kullan\u0131n.<\/p>\n<pre><code>services:\n  db:\n    image: postgres:13\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U user -d ecommerce_db\"] # DB haz\u0131r m\u0131 kontrol et\n      interval: 5s\n      timeout: 5s\n      retries: 5\n    # ... di\u011fer ayarlar ...\n\n  app:\n    image: myapp:latest\n    depends_on:\n      db:\n        condition: service_healthy # db servisi sa\u011fl\u0131kl\u0131 olana kadar bekle\n    # ... di\u011fer ayarlar ...<\/code><\/pre>\n<p>Bu sayede <code>app<\/code> servisi, <code>db<\/code> servisi sadece ba\u015flat\u0131lmakla kalmay\u0131p, ayn\u0131 zamanda ba\u011flant\u0131lar\u0131 kabul etmeye haz\u0131r oldu\u011funda ba\u015flayacakt\u0131r. Bu, \u00fcretim ortam\u0131na yak\u0131n bir davran\u0131\u015f sa\u011flar.<\/p>\n<h3>4. Kaynak S\u0131n\u0131rlamalar\u0131 ve Yeniden Ba\u015flatma Politikalar\u0131<\/h3>\n<p>Konteynerlerinizin sistem kaynaklar\u0131n\u0131 (CPU, bellek) a\u015f\u0131r\u0131 kullanmas\u0131n\u0131 \u00f6nlemek ve kararl\u0131l\u0131klar\u0131n\u0131 art\u0131rmak i\u00e7in kaynak s\u0131n\u0131rlamalar\u0131 ve yeniden ba\u015flatma politikalar\u0131 belirleyebilirsiniz.<\/p>\n<pre><code>services:\n  web:\n    image: myapp:latest\n    deploy:\n      resources:\n        limits:\n          cpus: '0.5' # Yar\u0131m CPU \u00e7ekirde\u011fi\n          memory: 512M # 512 MB bellek\n      restart_policy:\n        condition: on-failure # Hata durumunda yeniden ba\u015flat<\/code><\/pre>\n<p><code>deploy<\/code> anahtar\u0131, Docker Swarm modunda da\u011f\u0131t\u0131m i\u00e7in daha fazla se\u00e7enek sunsa da, <code>resources<\/code> ve <code>restart_policy<\/code> gibi baz\u0131 ayarlar Docker Compose ile de kullan\u0131labilir ve konteynerlerinizi daha y\u00f6netilebilir hale getirir.<\/p>\n<h3>5. Performans \u0130pu\u00e7lar\u0131<\/h3>\n<ul>\n<li><strong>Named Volumes Kullan\u0131n:<\/strong> Kal\u0131c\u0131 veri depolama i\u00e7in bind mount yerine named volumes kullanmak genellikle daha performansl\u0131d\u0131r ve Docker taraf\u0131ndan daha iyi y\u00f6netilir.<\/li>\n<li><strong>Gereksiz \u0130maj Katmanlar\u0131ndan Ka\u00e7\u0131n\u0131n:<\/strong> <code>Dockerfile<\/code>&#8216;lar\u0131n\u0131z\u0131 optimize ederek gereksiz katmanlar\u0131 azalt\u0131n. Her <code>RUN<\/code> komutu yeni bir katman olu\u015fturur. \u00c7oklu komutlar\u0131 tek bir <code>RUN<\/code> i\u00e7inde birle\u015ftirmek imaj boyutunu ve build s\u00fcresini azaltabilir.<\/li>\n<li><strong><code>.dockerignore<\/code> Kullan\u0131n:<\/strong> <code>.dockerignore<\/code> dosyas\u0131, Docker imaj\u0131 olu\u015fturulurken gereksiz dosyalar\u0131n (<code>node_modules<\/code>, <code>.git<\/code>, <code>.env<\/code> vb.) ba\u011flam (context) dizinine kopyalanmas\u0131n\u0131 engeller. Bu, build h\u0131z\u0131n\u0131 art\u0131r\u0131r ve imaj boyutunu k\u00fc\u00e7\u00fclt\u00fcr.<\/li>\n<\/ul>\n<aside class=\"tip\">\n  Uzman \u0130pucu: Geli\u015ftirme ortam\u0131nda kod de\u011fi\u015fikliklerinin an\u0131nda yans\u0131mas\u0131 i\u00e7in <code>volumes<\/code> kullanmak \u00e7ok yayg\u0131nd\u0131r. Ancak \u00fcretimde, uygulama kodunu imaj\u0131n i\u00e7ine dahil etmek ve sadece yap\u0131land\u0131rma dosyalar\u0131n\u0131 veya statik varl\u0131klar\u0131 ba\u011flamak daha g\u00fcvenli ve performansl\u0131d\u0131r.<br \/>\n<\/aside>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve optimizasyonlar, Docker Compose&#8217;u sadece bir ba\u015flatma arac\u0131 olmaktan \u00e7\u0131kar\u0131p, karma\u015f\u0131k uygulama mimarilerini y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc bir platforma d\u00f6n\u00fc\u015ft\u00fcrmenize yard\u0131mc\u0131 olacakt\u0131r. Dinamik yap\u0131land\u0131rmadan sa\u011fl\u0131k kontrollerine, her bir ad\u0131m uygulaman\u0131z\u0131n daha sa\u011flam, g\u00fcvenli ve performansl\u0131 olmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Ubuntu i\u015fletim sistemi \u00fczerinde Docker Compose&#8217;u kurman\u0131n ve y\u00f6netmenin t\u00fcm ad\u0131mlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. Modern yaz\u0131l\u0131m geli\u015ftirmenin temel ta\u015flar\u0131ndan biri haline gelen konteynerizasyon ve orkestrasyonun ne denli \u00f6nemli oldu\u011funu, Docker Compose&#8217;un ise \u00e7oklu konteyner uygulamalar\u0131n\u0131 geli\u015ftirme ve da\u011f\u0131tma s\u00fcre\u00e7lerini nas\u0131l basitle\u015ftirdi\u011fini g\u00f6rd\u00fck. \u0130lk olarak Docker Compose&#8217;un temel kavramlar\u0131n\u0131 ve neden bu araca ihtiya\u00e7 duydu\u011fumuzu anlad\u0131k. Ard\u0131ndan, Ubuntu sistemimizi g\u00fcncelleyerek ve Docker Engine&#8217;i kurarak gerekli \u00f6n haz\u0131rl\u0131klar\u0131 tamamlad\u0131k. Docker Compose&#8217;un hem Docker CLI eklentisi olarak hem de ba\u011f\u0131ms\u0131z bir ikili dosya olarak nas\u0131l kurulaca\u011f\u0131n\u0131 ad\u0131m ad\u0131m \u00f6\u011frendik ve kurulumu do\u011frulamak i\u00e7in pratik testler yapt\u0131k. Bir Nginx ve Redis \u00f6rne\u011fi ile ilk \u00e7oklu konteyner uygulamam\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131k. Mikroservis tabanl\u0131 bir e-ticaret uygulamas\u0131n\u0131n geli\u015ftirme ortam\u0131n\u0131n Docker Compose ile nas\u0131l y\u00f6netilebilece\u011fine dair bir vaka analizi yaparak ger\u00e7ek d\u00fcnya senaryolar\u0131nda sa\u011flad\u0131\u011f\u0131 faydalar\u0131 somutla\u015ft\u0131rd\u0131k. Son olarak, ortam de\u011fi\u015fkenleri, \u00e7oklu yap\u0131land\u0131rma dosyalar\u0131, sa\u011fl\u0131k kontrolleri ve performans optimizasyonlar\u0131 gibi ileri d\u00fczey ipu\u00e7lar\u0131yla Docker Compose deneyiminizi zenginle\u015ftirmenin yollar\u0131n\u0131 ke\u015ffettik.<\/p>\n<p>Docker Compose, geli\u015ftirici verimlili\u011fini art\u0131rman\u0131n, tutarl\u0131 geli\u015ftirme ortamlar\u0131 sa\u011flaman\u0131n ve karma\u015f\u0131k uygulamalar\u0131n y\u00f6netimini basitle\u015ftirmenin anahtar\u0131d\u0131r. Bu rehberdeki bilgileri kullanarak, Ubuntu sunucunuzda g\u00fc\u00e7l\u00fc ve esnek bir konteyner ortam\u0131 kurabilir ve projelerinizi bir sonraki seviyeye ta\u015f\u0131yabilirsiniz. Unutmay\u0131n, pratik yapmak ve farkl\u0131 senaryolar\u0131 denemek, bu ara\u00e7ta ustala\u015fman\u0131n en iyi yoludur.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n        <strong>Docker Compose ve Docker Swarm aras\u0131ndaki fark nedir?<\/strong><\/p>\n<p>Docker Compose, tek bir ana bilgisayarda (host) birden fazla Docker konteynerini tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Genellikle geli\u015ftirme ve test ortamlar\u0131 i\u00e7in idealdir. Docker Swarm ise, birden fazla Docker ana bilgisayar\u0131n\u0131 (d\u00fc\u011f\u00fcmleri) bir araya getirerek bir k\u00fcme (cluster) olu\u015fturur ve konteynerleri bu k\u00fcme \u00fczerinde da\u011f\u0131t\u0131lm\u0131\u015f bir \u015fekilde y\u00f6netir. Swarm, \u00fcretim ortamlar\u0131nda y\u00fcksek eri\u015filebilirlik ve \u00f6l\u00e7eklenebilirlik sa\u011flamak i\u00e7in kullan\u0131l\u0131r. Docker Compose dosyalar\u0131 genellikle Docker Swarm&#8217;da da kullan\u0131labilir.<\/p>\n<\/li>\n<li>\n        <strong><code>docker compose<\/code> ve <code>docker-compose<\/code> aras\u0131ndaki fark nedir?<\/strong><\/p>\n<p><code>docker-compose<\/code> (tireli), Docker Compose&#8217;un ba\u011f\u0131ms\u0131z ikili dosya olarak kurulan eski s\u00fcr\u00fcm\u00fcd\u00fcr. <code>docker compose<\/code> (bo\u015fluklu) ise Docker&#8217;\u0131n 1.27.0 s\u00fcr\u00fcm\u00fcnden itibaren Docker CLI&#8217;\u0131n bir par\u00e7as\u0131 olarak entegre edilen yeni eklenti s\u00fcr\u00fcm\u00fcd\u00fcr. Yeni projeler ve kurulumlar i\u00e7in <code>docker compose<\/code> kullan\u0131lmas\u0131 \u00f6nerilir \u00e7\u00fcnk\u00fc Docker CLI ile daha iyi entegrasyon ve g\u00fcncel \u00f6zellikler sunar.<\/p>\n<\/li>\n<li>\n        <strong>Docker Compose ile \u00fcretimde uygulama da\u011f\u0131t\u0131m\u0131 yap\u0131labilir mi?<\/strong><\/p>\n<p>Evet, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulamalar veya mikroservislerin geli\u015ftirme ortamlar\u0131 i\u00e7in Docker Compose m\u00fckemmeldir. Hatta daha k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli, tek sunuculu \u00fcretim ortamlar\u0131nda da kullan\u0131labilir. Ancak, y\u00fcksek eri\u015filebilirlik, otomatik \u00f6l\u00e7eklendirme, y\u00fck dengeleme ve s\u0131f\u0131r kesintiyle g\u00fcncelleme gibi \u00f6zellikler gerektiren b\u00fcy\u00fck \u00f6l\u00e7ekli ve kritik \u00fcretim ortamlar\u0131 i\u00e7in Kubernetes, Docker Swarm veya Amazon ECS gibi daha geli\u015fmi\u015f konteyner orkestrasyon ara\u00e7lar\u0131 tercih edilmelidir.<\/p>\n<\/li>\n<li>\n        <strong><code>docker-compose.yml<\/code> dosyas\u0131nda hangi versiyonu kullanmal\u0131y\u0131m?<\/strong><\/p>\n<p>Genellikle en son kararl\u0131 versiyonu kullanman\u0131z \u00f6nerilir. Bu makalede <code>version: '3.8'<\/code> kulland\u0131k, bu en yayg\u0131n ve g\u00fcncel versiyonlardan biridir ve bir\u00e7ok yeni \u00f6zelli\u011fi destekler. Docker Compose versiyonlar\u0131 ve destekledikleri \u00f6zellikler hakk\u0131nda daha fazla bilgi i\u00e7in Docker&#8217;\u0131n resmi belgelerine bakabilirsiniz.<\/p>\n<\/li>\n<li>\n        <strong>Docker Compose servisleri aras\u0131nda nas\u0131l ileti\u015fim kurabilirim?<\/strong><\/p>\n<p>Docker Compose, varsay\u0131lan olarak t\u00fcm servislerinizi ayn\u0131 \u00f6zel bir a\u011f \u00fczerinde ba\u015flat\u0131r. Bu a\u011f sayesinde servisler birbirleriyle isimleri \u00fczerinden ileti\u015fim kurabilirler. \u00d6rne\u011fin, <code>web<\/code> servisi, <code>db<\/code> servisine ba\u011flanmak i\u00e7in <code>db:5432<\/code> gibi bir adres kullanabilir. Harici IP adresleri veya karma\u015f\u0131k a\u011f yap\u0131land\u0131rmalar\u0131yla u\u011fra\u015fman\u0131za gerek kalmaz.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ubuntu&#8217;da Docker Compose Kurulumu: Ad\u0131m Ad\u0131m Rehber Ubuntu&#8217;da Docker Compose kurulumu mu ar\u0131yorsunuz? Bu rehberle \u00e7oklu konteyner uygulamalar\u0131n\u0131z\u0131&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-38100","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 Nedir ve Neden Kullanmal\u0131y\u0131z?<\/title>\n<meta name=\"description\" content=\"Ubuntu&#039;da Docker Compose kurulumu mu ar\u0131yorsunuz? Bu rehberle \u00e7oklu konteyner uygulamalar\u0131n\u0131z\u0131 kolayca y\u00f6netin, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131n ve verimli bir ortam kurun.\" \/>\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-nedir-ve-neden-kullanmaliyiz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?\" \/>\n<meta property=\"og:description\" content=\"Ubuntu&#039;da Docker Compose kurulumu mu ar\u0131yorsunuz? Bu rehberle \u00e7oklu konteyner uygulamalar\u0131n\u0131z\u0131 kolayca y\u00f6netin, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131n ve verimli bir ortam kurun.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-23T09:23:24+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-nedir-ve-neden-kullanmaliyiz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?\",\"datePublished\":\"2026-01-23T09:23:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/\"},\"wordCount\":4688,\"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-nedir-ve-neden-kullanmaliyiz\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/\",\"name\":\"Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-23T09:23:24+00:00\",\"description\":\"Ubuntu'da Docker Compose kurulumu mu ar\u0131yorsunuz? Bu rehberle \u00e7oklu konteyner uygulamalar\u0131n\u0131z\u0131 kolayca y\u00f6netin, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131n ve verimli bir ortam kurun.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?\"}]},{\"@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 Nedir ve Neden Kullanmal\u0131y\u0131z?","description":"Ubuntu'da Docker Compose kurulumu mu ar\u0131yorsunuz? Bu rehberle \u00e7oklu konteyner uygulamalar\u0131n\u0131z\u0131 kolayca y\u00f6netin, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131n ve verimli bir ortam kurun.","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-nedir-ve-neden-kullanmaliyiz\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?","og_description":"Ubuntu'da Docker Compose kurulumu mu ar\u0131yorsunuz? Bu rehberle \u00e7oklu konteyner uygulamalar\u0131n\u0131z\u0131 kolayca y\u00f6netin, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131n ve verimli bir ortam kurun.","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-23T09:23:24+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-nedir-ve-neden-kullanmaliyiz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?","datePublished":"2026-01-23T09:23:24+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/"},"wordCount":4688,"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-nedir-ve-neden-kullanmaliyiz\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/","name":"Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-23T09:23:24+00:00","description":"Ubuntu'da Docker Compose kurulumu mu ar\u0131yorsunuz? Bu rehberle \u00e7oklu konteyner uygulamalar\u0131n\u0131z\u0131 kolayca y\u00f6netin, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131n ve verimli bir ortam kurun.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-nedir-ve-neden-kullanmaliyiz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Compose Nedir ve Neden Kullanmal\u0131y\u0131z?"}]},{"@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\/38100","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=38100"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38100\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}