{"id":36784,"date":"2025-12-23T02:30:42","date_gmt":"2025-12-22T23:30:42","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/"},"modified":"2025-12-23T02:30:42","modified_gmt":"2025-12-22T23:30:42","slug":"docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/","title":{"rendered":"Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak"},"content":{"rendered":"<h2>Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak<\/h2>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde, uygulamalar genellikle tek bir monolitik yap\u0131dan ziyade, birbirleriyle ileti\u015fim kuran birden fazla ba\u011f\u0131ms\u0131z servisten olu\u015fur. Bu mikroservis mimarileri, esneklik ve \u00f6l\u00e7eklenebilirlik gibi \u00f6nemli avantajlar sunsa da, yerel geli\u015ftirme ortam\u0131nda bu servislerin t\u00fcm\u00fcn\u00fc ayn\u0131 anda y\u00f6netmek ve \u00e7al\u0131\u015ft\u0131rmak karma\u015f\u0131k bir hal alabilir. \u0130\u015fte tam bu noktada Docker Compose devreye girerek, \u00e7ok servisli uygulamalar\u0131n tek bir komutla kolayca tan\u0131mlanmas\u0131n\u0131, izole edilmesini ve \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir ara\u00e7 haline gelir. Bu makalede, Docker Compose&#8217;un ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu ve yerel geli\u015ftirme ortam\u0131n\u0131zda birden fazla servisi nas\u0131l verimli bir \u015fekilde y\u00f6netece\u011finizi detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>Docker Compose Nedir ve Neden \u0130htiya\u00e7 Duyar\u0131z?<\/h3>\n<p>Docker Compose, Docker ile birlikte gelen, \u00e7ok kapsay\u0131c\u0131l\u0131 Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Tek bir YAML dosyas\u0131 kullanarak, uygulaman\u0131z\u0131n t\u00fcm servislerini, a\u011flar\u0131n\u0131 ve birimlerini (volumes) yap\u0131land\u0131rabilirsiniz. Bu sayede, karma\u015f\u0131k ba\u011f\u0131ml\u0131l\u0131klar\u0131 olan uygulamalar\u0131 tek bir komutla aya\u011fa kald\u0131rabilir, durdurabilir ve y\u00f6netebilirsiniz.<\/p>\n<h4>Tek Servisli Uygulamalardan \u00c7ok Servisli Mimarilere Ge\u00e7i\u015f<\/h4>\n<p>Geleneksel olarak, bir\u00e7ok uygulama tek bir b\u00fct\u00fcn (monolit) olarak geli\u015ftirilirdi. Ancak g\u00fcn\u00fcm\u00fcz\u00fcn b\u00fcy\u00fck ve karma\u015f\u0131k sistemleri genellikle veritaban\u0131, \u00f6n u\u00e7, arka u\u00e7 API&#8217;leri, mesaj kuyruklar\u0131 gibi farkl\u0131 bile\u015fenlerden olu\u015fur. Her bir bile\u015fen kendi Docker kapsay\u0131c\u0131s\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, bu servislerin birbirleriyle uyumlu bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak manuel olarak olduk\u00e7a zahmetli olabilir.<\/p>\n<h4>Geli\u015ftirme ve Test S\u00fcre\u00e7lerindeki Zorluklar<\/h4>\n<p>Birden fazla servisi manuel olarak ba\u015flatmak, do\u011fru s\u0131rayla \u00e7al\u0131\u015ft\u0131rmak, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netmek ve her birinin loglar\u0131n\u0131 takip etmek geli\u015ftirme s\u00fcrecini yava\u015flatabilir ve hatalara yol a\u00e7abilir. \u00d6zellikle yeni bir geli\u015ftiricinin projeye dahil olmas\u0131 durumunda, t\u00fcm bu servisleri kendi makinesinde do\u011fru \u015fekilde kurup \u00e7al\u0131\u015ft\u0131rmas\u0131 ciddi bir \u00f6\u011frenme e\u011frisi gerektirebilir.<\/p>\n<h4>Docker Compose&#8217;un Sa\u011flad\u0131\u011f\u0131 Avantajlar<\/h4>\n<p>Docker Compose, bu zorluklar\u0131 ortadan kald\u0131rarak geli\u015ftiricilere \u00f6nemli avantajlar sunar:<\/p>\n<ul>\n<li><strong>Kolay Kurulum:<\/strong> T\u00fcm servisleri tek bir <code>docker-compose.yml<\/code> dosyas\u0131 ile tan\u0131mlayarak, projenin kurulumunu basitle\u015ftirir.<\/li>\n<li><strong>\u0130zole Ortamlar:<\/strong> Her servis kendi kapsay\u0131c\u0131s\u0131nda \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131 ortadan kalkar.<\/li>\n<li><strong>Tekrarlanabilirlik:<\/strong> Geli\u015ftirme, test ve hatta haz\u0131rl\u0131k (staging) ortamlar\u0131 aras\u0131nda tutarl\u0131 bir yap\u0131 sa\u011flar.<\/li>\n<li><strong>Verimli Y\u00f6netim:<\/strong> Tek komutla t\u00fcm servisleri ba\u015flatma, durdurma, yeniden olu\u015fturma gibi i\u015flemleri kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>H\u0131zl\u0131 Geli\u015ftirme:<\/strong> De\u011fi\u015fikliklerin h\u0131zl\u0131 bir \u015fekilde test edilmesini ve entegrasyonunu sa\u011flar.<\/li>\n<\/ul>\n<h3>Docker Compose Kurulumu ve Temel Kavramlar<\/h3>\n<p>Docker Compose&#8217;u kullanmaya ba\u015flamadan \u00f6nce, sisteminizde Docker&#8217;\u0131n kurulu olmas\u0131 gerekmektedir. Docker Desktop (Windows ve macOS i\u00e7in) genellikle Docker Compose&#8217;u da beraberinde kurar. Linux kullan\u0131c\u0131lar\u0131 i\u00e7in ise ayr\u0131 bir kurulum ad\u0131m\u0131 gerekebilir.<\/p>\n<h4>\u0130\u015fletim Sistemine G\u00f6re Kurulum Ad\u0131mlar\u0131<\/h4>\n<p><strong>Windows ve macOS:<\/strong> Docker Desktop&#8217;\u0131 indirip kurdu\u011funuzda Docker Compose otomatik olarak y\u00fcklenecektir. Kurulumu do\u011frulamak i\u00e7in terminalde <code>docker compose version<\/code> komutunu \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">docker compose version<\/pre>\n<p><\/code><\/p>\n<p><strong>Linux:<\/strong> \u00c7o\u011fu Linux da\u011f\u0131t\u0131m\u0131nda Docker Compose ayr\u0131 bir paket olarak kurulmal\u0131d\u0131r. Genellikle a\u015fa\u011f\u0131daki gibi bir komutla y\u00fcklenebilir (bu komut da\u011f\u0131t\u0131ma g\u00f6re de\u011fi\u015febilir):<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update\nsudo apt-get install docker-compose-plugin # Yeni versiyonlar i\u00e7in\n# veya eski versiyonlar i\u00e7in\n# sudo curl -L \"https:\/\/github.com\/docker\/compose\/releases\/download\/v2.17.2\/docker-compose-$(uname -s)-$(uname -m)\" -o \/usr\/local\/bin\/docker-compose\n# sudo chmod +x \/usr\/local\/bin\/docker-compose<\/pre>\n<p><\/code><\/p>\n<h4>Servisler, A\u011flar ve Birimler (Volumes)<\/h4>\n<p>Docker Compose'un temelini olu\u015fturan \u00fc\u00e7 ana kavram vard\u0131r:<\/p>\n<ul>\n<li><strong>Servisler (Services):<\/strong> Uygulaman\u0131z\u0131n her bir bile\u015fenini temsil eder. \u00d6rne\u011fin, bir web sunucusu, bir veritaban\u0131 veya bir API servisi birer servis olabilir. Her servis, bir Docker imaj\u0131ndan olu\u015fturulur ve kendi yap\u0131land\u0131rmas\u0131na (portlar, ortam de\u011fi\u015fkenleri vb.) sahiptir.<\/li>\n<li><strong>A\u011flar (Networks):<\/strong> Servislerin birbirleriyle ve d\u0131\u015f d\u00fcnya ile ileti\u015fim kurmas\u0131n\u0131 sa\u011flar. Docker Compose, varsay\u0131lan olarak t\u00fcm servisler i\u00e7in \u00f6zel bir a\u011f olu\u015fturur, ancak \u00f6zel a\u011flar da tan\u0131mlayabilirsiniz.<\/li>\n<li><strong>Birimler (Volumes):<\/strong> Kapsay\u0131c\u0131lar aras\u0131nda veya kapsay\u0131c\u0131 ile ana makine aras\u0131nda veri kal\u0131c\u0131l\u0131\u011f\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, bir veritaban\u0131n\u0131n verilerini bir birimde saklayarak, kapsay\u0131c\u0131 silinse bile verilerin kaybolmamas\u0131n\u0131 sa\u011flayabilirsiniz.<\/li>\n<\/ul>\n<h4><code>docker-compose.yml<\/code> Dosyas\u0131n\u0131n Rol\u00fc<\/h4>\n<p><code>docker-compose.yml<\/code> dosyas\u0131, Docker Compose'un t\u00fcm sihrini bar\u0131nd\u0131ran merkezi yap\u0131land\u0131rma dosyas\u0131d\u0131r. Bu YAML format\u0131ndaki dosya, uygulaman\u0131z\u0131n servislerini, a\u011flar\u0131n\u0131, birimlerini ve di\u011fer t\u00fcm ayarlar\u0131n\u0131 deklaratif bir \u015fekilde tan\u0131mlar. Docker Compose bu dosyay\u0131 okuyarak belirtilen t\u00fcm kaynaklar\u0131 olu\u015fturur ve y\u00f6netir.<\/p>\n<h3>Basit Bir \u00c7ok Servisli Uygulama \u00d6rne\u011fi<\/h3>\n<p>\u015eimdi, basit bir web uygulamas\u0131 (\u00f6rne\u011fin bir Python Flask uygulamas\u0131) ve bir PostgreSQL veritaban\u0131ndan olu\u015fan \u00e7ok servisli bir uygulamay\u0131 Docker Compose ile nas\u0131l \u00e7al\u0131\u015ft\u0131raca\u011f\u0131m\u0131za dair bir \u00f6rnek olu\u015ftural\u0131m.<\/p>\n<h4>\u00d6rnek Uygulama Mimarisi: Web Uygulamas\u0131 ve Veritaban\u0131<\/h4>\n<p>Uygulamam\u0131z iki ana servisten olu\u015facak:<\/p>\n<ol>\n<li><strong>Web Servisi:<\/strong> Flask tabanl\u0131, basit bir HTTP API sunacak ve veritaban\u0131na ba\u011flanacak.<\/li>\n<li><strong>Veritaban\u0131 Servisi:<\/strong> PostgreSQL veritaban\u0131.<\/li>\n<\/ol>\n<h4><code>docker-compose.yml<\/code> Dosyas\u0131n\u0131n Olu\u015fturulmas\u0131<\/h4>\n<p>\u00d6ncelikle, projemiz i\u00e7in bir dizin olu\u015ftural\u0131m ve i\u00e7ine <code>app.py<\/code> (Flask uygulamas\u0131), <code>requirements.txt<\/code> (Python ba\u011f\u0131ml\u0131l\u0131klar\u0131) ve <code>Dockerfile<\/code> (web servisi i\u00e7in) dosyalar\u0131n\u0131 ekleyelim. Ard\u0131ndan, en \u00f6nemli dosyam\u0131z olan <code>docker-compose.yml<\/code>'yi olu\u015fturaca\u011f\u0131z.<\/p>\n<p><strong>app.py:<\/strong><\/p>\n<pre><code class=\"language-python\">from flask import Flask\nimport psycopg2\nimport os\n\napp = Flask(__name__)\n\n@app.route('\/')\ndef hello():\n    try:\n        conn = psycopg2.connect(\n            host=os.environ.get(\"DB_HOST\", \"db\"),\n            database=os.environ.get(\"DB_NAME\", \"mydatabase\"),\n            user=os.environ.get(\"DB_USER\", \"user\"),\n            password=os.environ.get(\"DB_PASSWORD\", \"password\")\n        )\n        cur = conn.cursor()\n        cur.execute(\"SELECT 1\")\n        conn.close()\n        return \"Hello from Flask! Connected to PostgreSQL successfully!\"\n    except Exception as e:\n        return f\"Hello from Flask! Failed to connect to PostgreSQL: {e}\"\n\nif __name__ == '__main__':\n    app.run(host='0.0.0.0', port=5000)\n<\/pre>\n<p><\/code><\/p>\n<p><strong>requirements.txt:<\/strong><\/p>\n<pre><code class=\"language-txt\">Flask\npsycopg2-binary<\/pre>\n<p><\/code><\/p>\n<p><strong>Dockerfile (web servisi i\u00e7in):<\/strong><\/p>\n<pre><code class=\"language-dockerfile\">FROM python:3.9-slim-buster\nWORKDIR \/app\nCOPY requirements.txt .\nRUN pip install -r requirements.txt\nCOPY . .\nCMD [\"python\", \"app.py\"]<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi <code>docker-compose.yml<\/code> dosyam\u0131z\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\nservices:\n  web:\n    build: .\n    ports:\n      - \"5000:5000\"\n    environment:\n      DB_HOST: db\n      DB_NAME: mydatabase\n      DB_USER: user\n      DB_PASSWORD: password\n    depends_on:\n      - db\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\nvolumes:\n  db_data:<\/pre>\n<p><\/code><\/p>\n<h4>Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma ve Test Etme<\/h4>\n<p>T\u00fcm bu dosyalar\u0131 ayn\u0131 dizine kaydettikten sonra, terminali bu dizinde a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker compose up -d<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 okuyacak, gerekli Docker imajlar\u0131n\u0131 indirecek (veya olu\u015fturacak), servisleri ba\u015flatacak ve onlar\u0131 arka planda \u00e7al\u0131\u015ft\u0131racakt\u0131r (<code>-d<\/code> bayra\u011f\u0131 \"detached\" mod anlam\u0131na gelir).<br \/>\nServisler ba\u015flad\u0131ktan sonra, web taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:5000<\/code> adresine giderek uygulaman\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve veritaban\u0131na ba\u015far\u0131yla ba\u011fland\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz.<\/p>\n<p>Servislerin durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker compose ps<\/pre>\n<p><\/code><\/p>\n<p>Servislerin loglar\u0131n\u0131 g\u00f6rmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker compose logs<\/pre>\n<p><\/code><\/p>\n<p>Uygulamay\u0131 durdurmak ve kapsay\u0131c\u0131lar\u0131 kald\u0131rmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker compose down<\/pre>\n<p><\/code><\/p>\n<h3><code>docker-compose.yml<\/code> Dosyas\u0131n\u0131n Detayl\u0131 \u0130ncelenmesi<\/h3>\n<p><code>docker-compose.yml<\/code> dosyas\u0131, Docker Compose'un kalbidir. Her bir anahtar\u0131n ne anlama geldi\u011fini anlamak, karma\u015f\u0131k uygulamalar\u0131 y\u00f6netmek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4><code>version<\/code> Anahtar\u0131 ve Anlam\u0131<\/h4>\n<p><code>version<\/code> anahtar\u0131, Compose dosya format\u0131n\u0131n s\u00fcr\u00fcm\u00fcn\u00fc belirtir. Genellikle en son kararl\u0131 s\u00fcr\u00fcm olan <code>'3.8'<\/code> veya daha yenisi kullan\u0131l\u0131r. Farkl\u0131 s\u00fcr\u00fcmler, farkl\u0131 \u00f6zellik setlerini ve s\u00f6zdizimlerini destekler.<\/p>\n<pre><code class=\"language-yaml\">version: '3.8' # Dosya format\u0131 s\u00fcr\u00fcm\u00fc<\/pre>\n<p><\/code><\/p>\n<h4><code>services<\/code> Blo\u011fu ve Servis Tan\u0131mlamalar\u0131<\/h4>\n<p><code>services<\/code> blo\u011fu, uygulaman\u0131zdaki her bir servisi tan\u0131mlad\u0131\u011f\u0131n\u0131z yerdir. Her servis ad\u0131 (\u00f6rne\u011fin <code>web<\/code>, <code>db<\/code>) benzersiz olmal\u0131d\u0131r ve bu isimler, servislerin birbirleriyle ileti\u015fim kurarken kullanaca\u011f\u0131 DNS isimleri olarak i\u015flev g\u00f6r\u00fcr.<\/p>\n<p>Her servis tan\u0131m\u0131 i\u00e7inde kullanabilece\u011finiz baz\u0131 yayg\u0131n anahtarlar:<\/p>\n<ul>\n<li><code>build<\/code>: Servisin imaj\u0131n\u0131 olu\u015fturmak i\u00e7in bir <code>Dockerfile<\/code>'\u0131n yolunu belirtir.<\/li>\n<li><code>image<\/code>: Mevcut bir Docker imaj\u0131n\u0131 (Docker Hub'dan veya yerelden) kullan\u0131r.<\/li>\n<li><code>ports<\/code>: Kapsay\u0131c\u0131 portlar\u0131n\u0131 ana makine portlar\u0131na e\u015fler (<code>\"ANA_MAK\u0130NE_PORTU:KAPSAYICI_PORTU\"<\/code>).<\/li>\n<li><code>environment<\/code>: Kapsay\u0131c\u0131 i\u00e7inde kullan\u0131lacak ortam de\u011fi\u015fkenlerini ayarlar.<\/li>\n<li><code>volumes<\/code>: Kapsay\u0131c\u0131ya birimler ba\u011flar (veri kal\u0131c\u0131l\u0131\u011f\u0131 i\u00e7in).<\/li>\n<li><code>depends_on<\/code>: Servisler aras\u0131ndaki ba\u011f\u0131ml\u0131l\u0131klar\u0131 belirtir. \u00d6rne\u011fin, <code>web<\/code> servisi ba\u015flamadan \u00f6nce <code>db<\/code> servisinin ba\u015flamas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>networks<\/code>: Servisin hangi a\u011flara ba\u011flanaca\u011f\u0131n\u0131 belirtir.<\/li>\n<li><code>restart<\/code>: Kapsay\u0131c\u0131n\u0131n ne zaman yeniden ba\u015flat\u0131laca\u011f\u0131n\u0131 kontrol eder (\u00f6rne\u011fin <code>always<\/code>, <code>on-failure<\/code>).<\/li>\n<\/ul>\n<pre><code class=\"language-yaml\">services:\n  web:\n    build: . # Mevcut dizindeki Dockerfile'\u0131 kullan\n    ports:\n      - \"5000:5000\" # Ana makine 5000 -> Kapsay\u0131c\u0131 5000\n    environment:\n      DB_HOST: db # db servisine ba\u011flan\n    depends_on:\n      - db # db servisi ba\u015flamadan web ba\u015flamas\u0131n\n  db:\n    image: postgres:13 # postgres:13 imaj\u0131n\u0131 kullan\n    volumes:\n      - db_data:\/var\/lib\/postgresql\/data # db_data birimini ba\u011fla\n<\/pre>\n<p><\/code><\/p>\n<h4><code>volumes<\/code> ve <code>networks<\/code> Blo\u011funun Kullan\u0131m\u0131<\/h4>\n<p><code>volumes<\/code> blo\u011fu, uygulaman\u0131zda kullanaca\u011f\u0131n\u0131z birimleri tan\u0131mlad\u0131\u011f\u0131n\u0131z yerdir. Bu birimler, kapsay\u0131c\u0131lar silinse bile verilerin kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flar. \u0130simli birimler (named volumes) en yayg\u0131n kullan\u0131lan y\u00f6ntemdir.<\/p>\n<pre><code class=\"language-yaml\">volumes:\n  db_data: # db_data ad\u0131nda bir birim tan\u0131mla<\/pre>\n<p><\/code><\/p>\n<p><code>networks<\/code> blo\u011fu ise \u00f6zel a\u011flar tan\u0131mlaman\u0131za olanak tan\u0131r. Varsay\u0131lan olarak Docker Compose, t\u00fcm servisler i\u00e7in otomatik bir a\u011f olu\u015fturur, ancak daha karma\u015f\u0131k senaryolar i\u00e7in \u00f6zel a\u011flar tan\u0131mlayabilirsiniz.<\/p>\n<pre><code class=\"language-yaml\">networks:\n  app_network:\n    driver: bridge # Varsay\u0131lan k\u00f6pr\u00fc a\u011f\u0131 tipi<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan servislerinizde bu a\u011f\u0131 kullanabilirsiniz:<\/p>\n<pre><code class=\"language-yaml\">services:\n  web:\n    networks:\n      - app_network\n  db:\n    networks:\n      - app_network<\/pre>\n<p><\/code><\/p>\n<h3>Servisler Aras\u0131 \u0130leti\u015fim ve A\u011f Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Docker Compose, servislerin birbirleriyle kolayca ileti\u015fim kurabilmesi i\u00e7in g\u00fc\u00e7l\u00fc bir a\u011f altyap\u0131s\u0131 sa\u011flar.<\/p>\n<h4>Varsay\u0131lan A\u011f Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Bir <code>docker-compose.yml<\/code> dosyas\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Docker Compose otomatik olarak projeniz i\u00e7in varsay\u0131lan bir k\u00f6pr\u00fc a\u011f\u0131 (bridge network) olu\u015fturur. Bu a\u011fdaki t\u00fcm servisler, birbirlerine servis adlar\u0131n\u0131 kullanarak eri\u015febilirler. \u00d6rne\u011fin, <code>web<\/code> servisi, <code>db<\/code> servisine <code>db<\/code> hostname'i \u00fczerinden ba\u011flanabilir.<\/p>\n<pre><code class=\"language-python\"># app.py i\u00e7inde\nhost=os.environ.get(\"DB_HOST\", \"db\") # 'db' hostname'i kullan\u0131l\u0131yor<\/pre>\n<p><\/code><\/p>\n<h4>\u00d6zel A\u011flar Olu\u015fturma ve Kullanma<\/h4>\n<p>Daha fazla kontrol veya izolasyon gerekti\u011finde \u00f6zel a\u011flar tan\u0131mlayabilirsiniz. Bu, farkl\u0131 servis gruplar\u0131n\u0131 birbirinden ay\u0131rmak veya belirli a\u011f yap\u0131land\u0131rmalar\u0131n\u0131 uygulamak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\nservices:\n  frontend:\n    # ...\n    networks:\n      - web_network\n  backend:\n    # ...\n    networks:\n      - web_network\n      - db_network\n  database:\n    # ...\n    networks:\n      - db_network\n\nnetworks:\n  web_network:\n    driver: bridge\n  db_network:\n    driver: bridge<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>frontend<\/code> ve <code>backend<\/code> servisleri <code>web_network<\/code> \u00fczerinden, <code>backend<\/code> ve <code>database<\/code> servisleri ise <code>db_network<\/code> \u00fczerinden ileti\u015fim kurabilir. <code>frontend<\/code> do\u011frudan <code>database<\/code> ile ileti\u015fim kuramaz, bu da g\u00fcvenlik ve mimari ayr\u0131m\u0131 sa\u011flar.<\/p>\n<h4>Servis \u0130simleriyle \u0130leti\u015fim Kurma<\/h4>\n<p>Docker Compose'un en b\u00fcy\u00fck kolayl\u0131klar\u0131ndan biri, servislerin birbirlerine IP adresleri yerine tan\u0131mlad\u0131klar\u0131 servis adlar\u0131yla eri\u015febilmesidir. Docker'\u0131n dahili DNS \u00e7\u00f6z\u00fcm\u00fc sayesinde, <code>db<\/code> servisine ba\u011flanmak i\u00e7in sadece <code>db<\/code> host ad\u0131n\u0131 kullanmak yeterlidir. Bu, IP adreslerinin de\u011fi\u015febilece\u011fi dinamik ortamlarda b\u00fcy\u00fck bir avantajd\u0131r.<\/p>\n<h3>Geli\u015ftirme Ortam\u0131nda Docker Compose Kullan\u0131m\u0131 \u0130\u00e7in \u0130pu\u00e7lar\u0131<\/h3>\n<p>Docker Compose, geli\u015ftirme s\u00fcre\u00e7lerini h\u0131zland\u0131rmak ve kolayla\u015ft\u0131rmak i\u00e7in bir\u00e7ok \u00f6zellik sunar.<\/p>\n<h4>Hot Reloading ve Kod De\u011fi\u015fikliklerini Yans\u0131tma<\/h4>\n<p>Geli\u015ftirme s\u0131ras\u0131nda kod de\u011fi\u015fikliklerinin an\u0131nda kapsay\u0131c\u0131ya yans\u0131mas\u0131 \u00f6nemlidir. Bunu sa\u011flamak i\u00e7in <strong>bind mount<\/strong> ad\u0131 verilen birim t\u00fcr\u00fcn\u00fc kullan\u0131r\u0131z. Bu, ana makinedeki bir dizini kapsay\u0131c\u0131 i\u00e7indeki bir dizine ba\u011flar.<\/p>\n<pre><code class=\"language-yaml\">services:\n  web:\n    build: .\n    ports:\n      - \"5000:5000\"\n    volumes:\n      - .\/app:\/app # Ana makinedeki .\/app dizinini kapsay\u0131c\u0131daki \/app dizinine ba\u011fla\n    environment:\n      FLASK_ENV: development # Flask'\u0131n hot reloading'ini etkinle\u015ftir\n      # ... di\u011fer ortam de\u011fi\u015fkenleri\n<\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rma ile ana makinedeki <code>app<\/code> dizininde yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikler an\u0131nda kapsay\u0131c\u0131daki <code>\/app<\/code> dizinine yans\u0131yacak ve Flask'\u0131n geli\u015ftirme sunucusu otomatik olarak yeniden y\u00fcklenecektir.<\/p>\n<h4>Ortam De\u011fi\u015fkenleri ile Yap\u0131land\u0131rma<\/h4>\n<p>Hassas bilgiler (API anahtarlar\u0131, veritaban\u0131 \u015fifreleri) veya ortama \u00f6zg\u00fc ayarlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in ortam de\u011fi\u015fkenleri kullanmak en iyi uygulamad\u0131r. Docker Compose, <code>.env<\/code> dosyalar\u0131n\u0131 otomatik olarak y\u00fckleyerek bu s\u00fcreci kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>Proje k\u00f6k dizininizde bir <code>.env<\/code> dosyas\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-txt\">DB_HOST=db\nDB_NAME=my_dev_db\nDB_USER=dev_user\nDB_PASSWORD=dev_password<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan <code>docker-compose.yml<\/code> dosyas\u0131nda bu de\u011fi\u015fkenleri kullanabilirsiniz:<\/p>\n<pre><code class=\"language-yaml\">services:\n  web:\n    # ...\n    environment:\n      DB_HOST: ${DB_HOST} # .env dosyas\u0131ndan DB_HOST de\u011ferini al\n      DB_NAME: ${DB_NAME}\n      DB_USER: ${DB_USER}\n      DB_PASSWORD: ${DB_PASSWORD}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu sayede hassas bilgileri <code>docker-compose.yml<\/code> dosyas\u0131na do\u011frudan yazmaktan ka\u00e7\u0131n\u0131r, farkl\u0131 ortamlar i\u00e7in farkl\u0131 <code>.env<\/code> dosyalar\u0131 kullanabilirsiniz.<\/p>\n<h4>Farkl\u0131 Ortamlar \u0130\u00e7in Birden Fazla <code>docker-compose.yml<\/code> Dosyas\u0131<\/h4>\n<p>Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 genellikle farkl\u0131 yap\u0131land\u0131rmalar gerektirir. Docker Compose, birden fazla Compose dosyas\u0131n\u0131 birle\u015ftirme yetene\u011fi sunar. \u00d6rne\u011fin, bir temel <code>docker-compose.yml<\/code> dosyan\u0131z olabilir ve geli\u015ftirme i\u00e7in <code>docker-compose.override.yml<\/code> gibi ek bir dosya kullanabilirsiniz.<\/p>\n<p><strong>docker-compose.yml (temel yap\u0131land\u0131rma):<\/strong><\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\nservices:\n  web:\n    build: .\n    ports:\n      - \"80:5000\"\n  db:\n    image: postgres:13\n    # ...<\/pre>\n<p><\/code><\/p>\n<p><strong>docker-compose.override.yml (geli\u015ftirme i\u00e7in ek ayarlar):<\/strong><\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\nservices:\n  web:\n    volumes:\n      - .\/app:\/app\n    environment:\n      FLASK_ENV: development\n    ports:\n      - \"5000:5000\" # Geli\u015ftirme i\u00e7in farkl\u0131 port\n<\/pre>\n<p><\/code><\/p>\n<p>Varsay\u0131lan olarak <code>docker compose up<\/code> komutu hem <code>docker-compose.yml<\/code> hem de <code>docker-compose.override.yml<\/code> dosyalar\u0131n\u0131 birle\u015ftirir. Farkl\u0131 bir dosya kullanmak i\u00e7in <code>-f<\/code> bayra\u011f\u0131n\u0131 kullanabilirsiniz: <code>docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d<\/code>.<\/p>\n<h3>Docker Compose Komutlar\u0131 ve Ya\u015fam D\u00f6ng\u00fcs\u00fc Y\u00f6netimi<\/h3>\n<p>Docker Compose, servislerin ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc y\u00f6netmek i\u00e7in bir dizi kullan\u0131\u015fl\u0131 komut sunar.<\/p>\n<h4><code>docker compose up<\/code> ve <code>down<\/code> Komutlar\u0131<\/h4>\n<p>Bu iki komut, Docker Compose ile \u00e7al\u0131\u015f\u0131rken en s\u0131k kullanacaklar\u0131n\u0131zd\u0131r:<\/p>\n<ul>\n<li><code>docker compose up<\/code>: <code>docker-compose.yml<\/code> dosyas\u0131nda tan\u0131mlanan t\u00fcm servisleri olu\u015fturur ve ba\u015flat\u0131r. Gerekirse imajlar\u0131 indirir veya olu\u015fturur. Varsay\u0131lan olarak loglar\u0131 terminale basar.<\/li>\n<li><code>docker compose up -d<\/code>: Servisleri arka planda (detached mode) ba\u015flat\u0131r.<\/li>\n<li><code>docker compose down<\/code>: Servisleri durdurur ve kapsay\u0131c\u0131lar\u0131, a\u011flar\u0131 ve varsay\u0131lan birimleri kald\u0131r\u0131r.<\/li>\n<li><code>docker compose down --volumes<\/code>: Servisleri durdurur ve tan\u0131mlanan birimler dahil her \u015feyi kald\u0131r\u0131r. Bu, temiz bir ba\u015flang\u0131\u00e7 yapmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<\/ul>\n<h4><code>docker compose ps<\/code>, <code>logs<\/code>, <code>exec<\/code><\/h4>\n<p>Di\u011fer \u00f6nemli komutlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><code>docker compose ps<\/code>: \u00c7al\u0131\u015fan servislerin durumunu listeler.<\/li>\n<li><code>docker compose logs [SERV\u0130S_ADI]<\/code>: Belirli bir servisin veya t\u00fcm servislerin loglar\u0131n\u0131 g\u00f6sterir. <code>-f<\/code> bayra\u011f\u0131 ile loglar\u0131 canl\u0131 olarak takip edebilirsiniz.<\/li>\n<li><code>docker compose exec [SERV\u0130S_ADI] [KOMUT]<\/code>: \u00c7al\u0131\u015fan bir servisin kapsay\u0131c\u0131s\u0131 i\u00e7inde bir komut \u00e7al\u0131\u015ft\u0131r\u0131r. \u00d6rne\u011fin, <code>docker compose exec web bash<\/code> ile web kapsay\u0131c\u0131s\u0131n\u0131n i\u00e7ine girip bash kabu\u011funu kullanabilirsiniz.<\/li>\n<li><code>docker compose build [SERV\u0130S_ADI]<\/code>: Sadece belirli bir servisin imaj\u0131n\u0131 yeniden olu\u015fturur.<\/li>\n<li><code>docker compose restart [SERV\u0130S_ADI]<\/code>: Belirli bir servisi veya t\u00fcm servisleri yeniden ba\u015flat\u0131r.<\/li>\n<\/ul>\n<h4>Servisleri Yeniden Ba\u015flatma ve G\u00fcncelleme<\/h4>\n<p>Kodunuzda veya <code>docker-compose.yml<\/code> dosyan\u0131zda bir de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda, genellikle servisleri yeniden ba\u015flatman\u0131z gerekir. E\u011fer sadece kodunuzu de\u011fi\u015ftirdiyseniz ve birim ba\u011flamas\u0131 kullan\u0131yorsan\u0131z, bazen sadece uygulaman\u0131n kendi hot-reloading \u00f6zelli\u011fi yeterli olabilir. Ancak <code>Dockerfile<\/code>'da veya <code>docker-compose.yml<\/code> dosyas\u0131nda de\u011fi\u015fiklik yapt\u0131ysan\u0131z:<\/p>\n<ul>\n<li><code>docker compose up --build -d<\/code>: De\u011fi\u015fiklik yap\u0131lan imajlar\u0131 yeniden olu\u015fturur ve servisleri g\u00fcnceller.<\/li>\n<li><code>docker compose restart [SERV\u0130S_ADI]<\/code>: Sadece belirtilen servisi yeniden ba\u015flat\u0131r.<\/li>\n<\/ul>\n<h3>Sonu\u00e7<\/h3>\n<p>Docker Compose, \u00e7ok servisli uygulamalar\u0131n yerel geli\u015ftirme ortam\u0131nda y\u00f6netimini ve \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 inan\u0131lmaz derecede basitle\u015ftiren g\u00fc\u00e7l\u00fc ve vazge\u00e7ilmez bir ara\u00e7t\u0131r. Tek bir YAML dosyas\u0131yla t\u00fcm uygulama y\u0131\u011f\u0131n\u0131n\u0131z\u0131 tan\u0131mlama, tek komutla ba\u015flatma ve durdurma yetene\u011fi, geli\u015ftirme s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r, tutarl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r ve yeni ekip \u00fcyelerinin projeye adaptasyonunu kolayla\u015ft\u0131r\u0131r. \u0130ster k\u00fc\u00e7\u00fck bir mikroservis projesi \u00fczerinde \u00e7al\u0131\u015f\u0131yor olun, ister karma\u015f\u0131k bir sistem geli\u015ftiriyor olun, Docker Compose size zaman kazand\u0131racak ve geli\u015ftirme deneyiminizi \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirecektir. Bu makalede \u00f6\u011frendi\u011finiz temel kavramlar ve pratik \u00f6rneklerle, kendi \u00e7ok servisli Docker Compose projelerinizi ba\u015far\u0131yla y\u00f6netmeye haz\u0131rs\u0131n\u0131z.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>Docker ve Docker Compose aras\u0131ndaki fark nedir?<\/h4>\n<p>Docker, kapsay\u0131c\u0131lar\u0131 olu\u015fturmak, \u00e7al\u0131\u015ft\u0131rmak ve y\u00f6netmek i\u00e7in kullan\u0131lan temel platformdur. Tek bir kapsay\u0131c\u0131y\u0131 y\u00f6netmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Docker Compose ise, birden fazla Docker kapsay\u0131c\u0131s\u0131n\u0131 i\u00e7eren \u00e7ok servisli uygulamalar\u0131 tan\u0131mlamak ve tek bir birim olarak y\u00f6netmek i\u00e7in Docker'\u0131n \u00fczerine in\u015fa edilmi\u015f bir ara\u00e7t\u0131r.<\/p>\n<h4><code>docker-compose.yml<\/code> dosyas\u0131n\u0131 nerede saklamal\u0131y\u0131m?<\/h4>\n<p>Genellikle projenizin k\u00f6k dizininde saklaman\u0131z \u00f6nerilir. Bu, t\u00fcm servislerin ve ilgili dosyalar\u0131n tek bir yerde kolayca bulunmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Birden fazla <code>docker-compose.yml<\/code> dosyas\u0131 kullanabilir miyim?<\/h4>\n<p>Evet, Docker Compose birden fazla Compose dosyas\u0131n\u0131 birle\u015ftirme yetene\u011fi sunar. Bu, farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in farkl\u0131 yap\u0131land\u0131rmalar tan\u0131mlaman\u0131za olanak tan\u0131r. <code>docker compose -f docker-compose.yml -f docker-compose.override.yml up<\/code> komutu ile birden fazla dosyay\u0131 kullanabilirsiniz.<\/p>\n<h4>Docker Compose ile \u00fcretim ortam\u0131nda uygulama \u00e7al\u0131\u015ft\u0131rabilir miyim?<\/h4>\n<p>Docker Compose, genellikle yerel geli\u015ftirme ve test ortamlar\u0131 i\u00e7in tasarlanm\u0131\u015ft\u0131r. \u00dcretim ortamlar\u0131 i\u00e7in Kubernetes gibi daha geli\u015fmi\u015f kapsay\u0131c\u0131 orkestrasyon ara\u00e7lar\u0131 tercih edilir. Ancak, k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli uygulamalar i\u00e7in veya ba\u015flang\u0131\u00e7 a\u015famas\u0131nda Docker Compose, basit \u00fcretim da\u011f\u0131t\u0131mlar\u0131 i\u00e7in de kullan\u0131labilir, ancak \u00f6l\u00e7eklenebilirlik, y\u00fcksek eri\u015filebilirlik ve otomatik iyile\u015fme gibi konularda s\u0131n\u0131rl\u0131 kalabilir.<\/p>\n<h4>Performans sorunlar\u0131 ya\u015farsam ne yapmal\u0131y\u0131m?<\/h4>\n<p>Docker Compose ile performans sorunlar\u0131 ya\u015f\u0131yorsan\u0131z, \u015funlar\u0131 kontrol edebilirsiniz:<\/p>\n<ul>\n<li><strong>Kaynak Tahsisi:<\/strong> Docker Desktop ayarlar\u0131ndan Docker'a ayr\u0131lan CPU ve RAM miktar\u0131n\u0131 art\u0131r\u0131n.<\/li>\n<li><strong>Birim Ba\u011flamalar\u0131 (Volumes):<\/strong> \u00d6zellikle macOS ve Windows'ta bind mount'lar performans sorunlar\u0131na yol a\u00e7abilir. Verimli dosya senkronizasyonu i\u00e7in Docker Desktop'\u0131n \"VirtioFS\" veya \"gRPC FUSE\" gibi yeni dosya payla\u015f\u0131m motorlar\u0131n\u0131 kullanmay\u0131 deneyin.<\/li>\n<li><strong>\u0130maj Boyutlar\u0131:<\/strong> Daha k\u00fc\u00e7\u00fck temel imajlar kullan\u0131n (\u00f6rne\u011fin <code>alpine<\/code> tabanl\u0131 imajlar).<\/li>\n<li><strong>Gereksiz Servisler:<\/strong> Sadece ihtiyac\u0131n\u0131z olan servisleri \u00e7al\u0131\u015ft\u0131r\u0131n.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"Docker Compose, Docker ile birlikte gelen, \u00e7ok kapsay\u0131c\u0131l\u0131 Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Tek bi&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1407],"tags":[],"class_list":{"0":"post-36784","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 ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak\" \/>\n<meta property=\"og:description\" content=\"Docker Compose, Docker ile birlikte gelen, \u00e7ok kapsay\u0131c\u0131l\u0131 Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Tek bi...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-22T23:30:42+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=\"16 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-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak\",\"datePublished\":\"2025-12-22T23:30:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/\"},\"wordCount\":2606,\"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-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/\",\"name\":\"Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-22T23:30:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak\"}]},{\"@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 ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak","og_description":"Docker Compose, Docker ile birlikte gelen, \u00e7ok kapsay\u0131c\u0131l\u0131 Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Tek bi...","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-22T23:30:42+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak","datePublished":"2025-12-22T23:30:42+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/"},"wordCount":2606,"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-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/","name":"Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-22T23:30:42+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-ile-yerel-ortamda-birden-fazla-servisi-calistirmak\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Compose ile Yerel Ortamda Birden Fazla Servisi \u00c7al\u0131\u015ft\u0131rmak"}]},{"@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\/36784","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=36784"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36784\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}