{"id":32492,"date":"2025-10-22T11:01:26","date_gmt":"2025-10-22T08:01:26","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/"},"modified":"2025-10-22T11:01:26","modified_gmt":"2025-10-22T08:01:26","slug":"docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/","title":{"rendered":"Docker-Compose.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<p>Docker-Compose.yaml dosyas\u0131, birden fazla servisi i\u00e7eren Docker uygulamalar\u0131n\u0131 tan\u0131mlaman\u0131n ve \u00e7al\u0131\u015ft\u0131rman\u0131n temelidir. Ancak projeniz geli\u015ftik\u00e7e, bu dosyan\u0131n statik kalmas\u0131 m\u00fcmk\u00fcn de\u011fildir. Peki, mevcut bir Docker-Compose.yaml dosyas\u0131n\u0131 neden de\u011fi\u015ftirmemiz gerekir? Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki farkl\u0131l\u0131klar\u0131 y\u00f6netmek, kaynaklar\u0131 optimize etmek, g\u00fcvenlik sa\u011flamak ve CI\/CD s\u00fcre\u00e7lerini otomatikle\u015ftirmek i\u00e7in bu dosya s\u00fcrekli evrim ge\u00e7irmelidir. Bu rehberde, Docker-Compose.yaml dosyas\u0131n\u0131 de\u011fi\u015ftirmenizin alt\u0131nda yatan nedenleri ve bunu nas\u0131l etkili bir \u015fekilde yapabilece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<p>Docker-Compose.yaml, Docker ile \u00e7al\u0131\u015fan \u00e7oklu konteyner uygulamalar\u0131n\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc tan\u0131mlamak ve y\u00f6netmek i\u00e7in kullan\u0131lan YAML tabanl\u0131 bir yap\u0131land\u0131rma dosyas\u0131d\u0131r. Tek bir komutla (<code>docker compose up<\/code>) t\u00fcm uygulaman\u0131z\u0131 aya\u011fa kald\u0131rman\u0131za, \u00e7al\u0131\u015ft\u0131rman\u0131za ve kapatman\u0131za olanak tan\u0131r. Bu sayede, mikroservis mimarileri veya karma\u015f\u0131k uygulamalar i\u00e7in ba\u011f\u0131ml\u0131l\u0131klar\u0131, a\u011flar\u0131 ve veri birimlerini kolayca y\u00f6netebilirsiniz. Bir geli\u015ftirici olarak, bu dosya sayesinde her bir servisi ayr\u0131 ayr\u0131 ba\u015flatma veya yap\u0131land\u0131rma zahmetinden kurtulursunuz; t\u00fcm uygulama, \u00f6nceden tan\u0131mlanm\u0131\u015f kurallara g\u00f6re tek seferde \u00e7al\u0131\u015fmaya ba\u015flar. Projenizin ilk a\u015famalar\u0131nda basit bir veritaban\u0131 ve bir web uygulamas\u0131 i\u00e7eren bir yap\u0131ya sahip olabilirsiniz, ancak zamanla bu yap\u0131 daha karma\u015f\u0131k hale gelecektir. \u0130\u015fte tam bu noktada Docker-Compose.yaml dosyan\u0131z\u0131 adapte etme ihtiyac\u0131 ortaya \u00e7\u0131kar.<\/p>\n<p>Ba\u015flang\u0131\u00e7ta, temel bir <code>docker-compose.yaml<\/code> dosyas\u0131 \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<pre><code>\nversion: '3.8'\nservices:\n  web:\n    build: .\n    ports:\n      - \"80:80\"\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\nvolumes:\n  db_data:\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, bir web servisi ve bir PostgreSQL veritaban\u0131 servisi tan\u0131mlanm\u0131\u015ft\u0131r. Web servisi, projenin k\u00f6k dizinindeki Dockerfile'dan olu\u015fturulur ve 80 numaral\u0131 portu d\u0131\u015far\u0131ya a\u00e7ar. Veritaban\u0131 servisi ise Docker Hub'dan <code>postgres:13<\/code> imaj\u0131n\u0131 kullan\u0131r, ortam de\u011fi\u015fkenleriyle yap\u0131land\u0131r\u0131l\u0131r ve kal\u0131c\u0131 veri depolamas\u0131 i\u00e7in bir volume (<code>db_data<\/code>) kullan\u0131r. Bu basit yap\u0131, \u00e7o\u011fu projenin ba\u015flang\u0131\u00e7 noktas\u0131 olabilir. Ancak, uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, yeni servisler ekledik\u00e7e, performans gereksinimleriniz artt\u0131k\u00e7a veya farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) aras\u0131nda ge\u00e7i\u015f yapt\u0131k\u00e7a bu dosya yetersiz kalmaya ba\u015flayacakt\u0131r. \u00d6rne\u011fin, geli\u015ftirme ortam\u0131nda kodunuzda yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikleri an\u0131nda g\u00f6rmek isteyebilirsiniz veya \u00fcretim ortam\u0131nda daha kat\u0131 g\u00fcvenlik ve kaynak s\u0131n\u0131rlamalar\u0131na ihtiyac\u0131n\u0131z olabilir. Bu durumda, orijinal dosyay\u0131 de\u011fi\u015ftirmek, hatta \u00fczerine eklemeler yapmak ka\u00e7\u0131n\u0131lmaz hale gelir. Dolay\u0131s\u0131yla, <code>docker-compose.yaml<\/code> dosyas\u0131, sadece uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir ara\u00e7 de\u011fil, ayn\u0131 zamanda projenizin dinamik ihtiya\u00e7lar\u0131na adapte olabilen esnek bir yap\u0131land\u0131rma mekanizmas\u0131d\u0131r. Bu esnekli\u011fi sa\u011flamak i\u00e7in dosyan\u0131n s\u00fcrekli olarak g\u00f6zden ge\u00e7irilmesi ve g\u00fcncellenmesi gerekir.<\/p>\n<aside class=\"expert-tip\">\n      Uzman \u0130pucu: Projenizin ya\u015fam d\u00f6ng\u00fcs\u00fc boyunca Docker-Compose.yaml dosyan\u0131z\u0131 s\u00fcr\u00fcm kontrol sisteminizde tutmak ve her \u00f6nemli de\u011fi\u015fikli\u011fi kaydetmek, geri d\u00f6n\u00fc\u015f ve hata ay\u0131klama s\u00fcre\u00e7lerinizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131racakt\u0131r. Git gibi ara\u00e7lar bu konuda vazge\u00e7ilmezdir.<br \/>\n    <\/aside>\n<h3>Ortam De\u011fi\u015fiklikleri ve Dinamik \u0130htiya\u00e7lar Kar\u015f\u0131s\u0131nda Docker-Compose.yaml Dosyan\u0131z\u0131 Nas\u0131l Uyarlars\u0131n\u0131z?<\/h3>\n<p>Uygulamalar nadiren sadece tek bir ortamda ya\u015farlar. Geli\u015ftirme, test, sahneleme (staging) ve \u00fcretim gibi farkl\u0131 ortamlarda \u00e7al\u0131\u015f\u0131rken, her ortam\u0131n kendine \u00f6zg\u00fc gereksinimleri vard\u0131r. Bu gereksinimler, port numaralar\u0131ndan veritaban\u0131 ba\u011flant\u0131 bilgilerine, kaynak s\u0131n\u0131rlar\u0131ndan loglama stratejilerine kadar geni\u015f bir yelpazeyi kapsayabilir. Docker-Compose.yaml dosyan\u0131z\u0131 bu dinamik ihtiya\u00e7lara uyarlamak, geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131r ve \u00fcretim ortam\u0131n\u0131z\u0131n istikrarl\u0131 olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Geli\u015ftirme Ortam\u0131na \u00d6zel Ayarlamalar<\/h4>\n<p>Geli\u015ftirme a\u015famas\u0131nda, genellikle h\u0131zl\u0131 geri bildirim d\u00f6ng\u00fclerine ve kolay hata ay\u0131klamaya ihtiya\u00e7 duyar\u0131z. Bu nedenle, geli\u015ftirme ortam\u0131na \u00f6zel olarak <code>docker-compose.yaml<\/code> dosyas\u0131nda baz\u0131 de\u011fi\u015fiklikler yapmak yayg\u0131n bir uygulamad\u0131r. \u00d6rne\u011fin, kodunuzda yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fikliklerin konteyner i\u00e7inde an\u0131nda yans\u0131mas\u0131n\u0131 sa\u011flamak i\u00e7in bind mount'lar\u0131 kullan\u0131r\u0131z. Bu, her kod de\u011fi\u015fikli\u011finden sonra imaj\u0131 yeniden olu\u015fturma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r. Ayr\u0131ca, hata ay\u0131klama portlar\u0131n\u0131 a\u00e7abilir veya geli\u015ftirme i\u00e7in daha az k\u0131s\u0131tl\u0131 kaynaklar tan\u0131mlayabiliriz. A\u015fa\u011f\u0131daki \u00f6rnek, bir Node.js uygulamas\u0131n\u0131n geli\u015ftirme ortam\u0131 i\u00e7in nas\u0131l optimize edilebilece\u011fini g\u00f6stermektedir:<\/p>\n<pre><code>\n# docker-compose.dev.yaml\nversion: '3.8'\nservices:\n  web:\n    build:\n      context: .\n      dockerfile: Dockerfile.dev # Geli\u015ftirme ortam\u0131na \u00f6zel Dockerfile\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - .:\/app # Yerel kodu konteyner i\u00e7ine ba\u011fla\n      - \/app\/node_modules # node_modules'in bind mount taraf\u0131ndan ezilmesini engelle\n    environment:\n      NODE_ENV: development\n    command: npm run dev # Geli\u015ftirme sunucusunu ba\u015flat\n    depends_on:\n      - db\n  db:\n    image: postgres:13\n    environment:\n      POSTGRES_DB: dev_database\n      POSTGRES_USER: dev_user\n      POSTGRES_PASSWORD: dev_password\n    volumes:\n      - dev_db_data:\/var\/lib\/postgresql\/data\nvolumes:\n  dev_db_data:\n<\/pre>\n<p><\/code><\/p>\n<p>Bu <code>docker-compose.dev.yaml<\/code> dosyas\u0131, ana <code>docker-compose.yaml<\/code> dosyas\u0131n\u0131 ge\u00e7ersiz k\u0131lmak veya geni\u015fletmek i\u00e7in kullan\u0131labilir. <code>Dockerfile.dev<\/code> ile daha h\u0131zl\u0131 imaj olu\u015fturma veya ek geli\u015ftirme ara\u00e7lar\u0131 i\u00e7erebilir. <code>volumes: - .:\/app<\/code> sat\u0131r\u0131, yerel projemizin an\u0131nda konteyner i\u00e7inde eri\u015filebilir olmas\u0131n\u0131 sa\u011flar. <code>\/app\/node_modules<\/code> sat\u0131r\u0131 ise, host sistemindeki <code>node_modules<\/code> dizininin bind mount taraf\u0131ndan konteyner i\u00e7indeki <code>node_modules<\/code>'i ezmesini engeller, b\u00f6ylece konteynerin kendi ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kullanmas\u0131n\u0131 sa\u011flar\u0131z.<\/p>\n<h4>\u00dcretim Ortam\u0131na Y\u00f6nelik \u00d6zelle\u015ftirmeler<\/h4>\n<p>\u00dcretim ortam\u0131nda ise g\u00fcvenlik, performans, \u00f6l\u00e7eklenebilirlik ve kararl\u0131l\u0131k \u00f6nceliklidir. Bu nedenle, \u00fcretim ortam\u0131 i\u00e7in Docker-Compose.yaml dosyas\u0131nda farkl\u0131 ayarlamalar yapar\u0131z. \u00d6rne\u011fin, debug portlar\u0131n\u0131 kapat\u0131r, daha kat\u0131 kaynak limitleri tan\u0131mlar, g\u00fcvenlik odakl\u0131 a\u011f yap\u0131land\u0131rmalar\u0131 yapar\u0131z. Ayr\u0131ca, hassas bilgileri (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131) do\u011frudan dosyaya yazmak yerine, Docker Secrets veya ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla g\u00fcvenli bir \u015fekilde y\u00f6netiriz.<\/p>\n<pre><code>\n# docker-compose.prod.yaml\nversion: '3.8'\nservices:\n  web:\n    build: .\n    ports:\n      - \"80:80\"\n    environment:\n      NODE_ENV: production\n      DATABASE_HOST: db\n      DATABASE_PORT: 5432\n    # G\u00fcvenli bir \u015fekilde \u015fifre y\u00f6netimi\n    secrets:\n      - db_password\n    deploy:\n      resources:\n        limits:\n          cpus: '0.50'\n          memory: 512M\n      replicas: 3 # Y\u00fcksek eri\u015filebilirlik i\u00e7in 3 kopya\n    depends_on:\n      - db\n  db:\n    image: postgres:13\n    environment:\n      POSTGRES_DB: production_database\n      POSTGRES_USER: prod_user\n      # \u015eifre do\u011frudan belirtilmez, secret kullan\u0131l\u0131r\n    secrets:\n      - postres_password\n    volumes:\n      - prod_db_data:\/var\/lib\/postgresql\/data\n    deploy:\n      resources:\n        limits:\n          cpus: '0.25'\n          memory: 256M\nvolumes:\n  prod_db_data:\nsecrets:\n  db_password:\n    external: true\n  postgres_password:\n    external: true\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00fcretim odakl\u0131 yap\u0131land\u0131rmada, <code>deploy<\/code> anahtar\u0131 alt\u0131nda kaynak s\u0131n\u0131rlamalar\u0131 (CPU, bellek) ve servis replikalar\u0131 (\u00f6l\u00e7ekleme) tan\u0131mlanm\u0131\u015ft\u0131r. <code>secrets<\/code> kullan\u0131m\u0131, hassas verilerin do\u011frudan YAML dosyas\u0131na yaz\u0131lmamas\u0131n\u0131 sa\u011flar. Bu t\u00fcr de\u011fi\u015fiklikler, uygulaman\u0131z\u0131n farkl\u0131 ortam ko\u015fullar\u0131nda sorunsuz ve verimli bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 garanti eder. Bu farkl\u0131l\u0131klar\u0131 y\u00f6netmek i\u00e7in genellikle <code>docker-compose.override.yaml<\/code> dosyalar\u0131 kullan\u0131l\u0131r. Ana <code>docker-compose.yaml<\/code> dosyas\u0131 temel yap\u0131land\u0131rmay\u0131 i\u00e7erirken, <code>docker-compose.dev.yaml<\/code> ve <code>docker-compose.prod.yaml<\/code> gibi dosyalar ana yap\u0131land\u0131rmay\u0131 ortama \u00f6zel ayarlamalarla zenginle\u015ftirir veya ge\u00e7ersiz k\u0131lar. Bu yakla\u015f\u0131m, kod tekrar\u0131n\u0131 azalt\u0131r ve y\u00f6netimi basitle\u015ftirir. Sonu\u00e7 olarak, Docker-Compose.yaml dosyan\u0131z\u0131 ortama g\u00f6re uyarlamak, hem geli\u015ftirme verimlili\u011finizi art\u0131r\u0131r hem de \u00fcretim ortam\u0131n\u0131z\u0131n sa\u011flaml\u0131\u011f\u0131n\u0131 sa\u011flar, b\u00f6ylece daha esnek ve y\u00f6netilebilir bir uygulama ya\u015fam d\u00f6ng\u00fcs\u00fc elde edersiniz.<\/p>\n<h2>Servis Konfig\u00fcrasyonunu Optimize Etme: Kaynak Y\u00f6netimi ve \u00d6l\u00e7ekleme \u0130pu\u00e7lar\u0131<\/h2>\n<p>Uygulaman\u0131z\u0131n servisleri b\u00fcy\u00fcd\u00fck\u00e7e ve kullan\u0131c\u0131 trafi\u011fi artt\u0131k\u00e7a, bu servislerin performansl\u0131 ve kararl\u0131 \u00e7al\u0131\u015fmas\u0131 i\u00e7in kaynak y\u00f6netimini ve \u00f6l\u00e7eklemeyi optimize etmek kritik hale gelir. Docker-Compose.yaml dosyas\u0131n\u0131 de\u011fi\u015ftirerek, her bir servisin CPU, bellek gibi kaynaklar\u0131n\u0131 kontrol edebilir, sa\u011fl\u0131k kontrolleri tan\u0131mlayabilir ve gerekti\u011finde servisleri \u00e7o\u011faltarak yatay \u00f6l\u00e7ekleme yapabilirsiniz. Bu d\u00fczenlemeler, uygulaman\u0131z\u0131n darbo\u011fazlarla kar\u015f\u0131la\u015fmas\u0131n\u0131 engeller ve daha y\u00fcksek y\u00fck alt\u0131nda bile iyi bir yan\u0131t s\u00fcresi sunmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Kaynak S\u0131n\u0131rlamalar\u0131 ve Sa\u011fl\u0131k Kontrolleri<\/h4>\n<p>Her servisin ihtiya\u00e7 duydu\u011fu kaynak miktar\u0131 farkl\u0131 olabilir. Bir veritaban\u0131 servisi genellikle daha fazla belle\u011fe ihtiya\u00e7 duyarken, bir i\u015flemci yo\u011funlu\u011fu olan mikroservis daha fazla CPU gerektirebilir. Kaynak s\u0131n\u0131rlamalar\u0131 belirlemek, bir servisin di\u011fer servislerin kaynaklar\u0131n\u0131 t\u00fcketmesini veya t\u00fcm host sistemini yava\u015flatmas\u0131n\u0131 engeller. <code>cpus<\/code> ve <code>memory<\/code> limitleri ile servislerinizin alabilece\u011fi maksimum kaynak miktar\u0131n\u0131 belirleyebilirsiniz. Ayr\u0131ca, bir servisin ger\u00e7ekten \"sa\u011fl\u0131kl\u0131\" olup olmad\u0131\u011f\u0131n\u0131 belirlemek i\u00e7in sa\u011fl\u0131k kontrolleri (health checks) eklemek, Compose'un (veya daha b\u00fcy\u00fck \u00f6l\u00e7ekli sistemlerde orchestrator'\u0131n) sorunlu servisleri otomatik olarak yeniden ba\u015flatmas\u0131na veya devre d\u0131\u015f\u0131 b\u0131rakmas\u0131na olanak tan\u0131r.<\/p>\n<pre><code>\nversion: '3.8'\nservices:\n  api:\n    build: .\n    ports:\n      - \"8080:8080\"\n    deploy:\n      resources:\n        limits:\n          cpus: '0.75' # Maksimum 0.75 CPU \u00e7ekirde\u011fi kullanabilir\n          memory: 1G  # Maksimum 1 GB bellek kullanabilir\n        reservations: # Garanti edilen minimum kaynaklar\n          cpus: '0.25'\n          memory: 256M\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http:\/\/localhost:8080\/health\"] # Sa\u011fl\u0131k kontrol\u00fc komutu\n      interval: 30s # 30 saniyede bir kontrol et\n      timeout: 10s  # 10 saniye i\u00e7inde yan\u0131t gelmezse ba\u015far\u0131s\u0131z say\n      retries: 3    # 3 ba\u015far\u0131s\u0131z denemeden sonra servisi unhealthy olarak i\u015faretle\n      start_period: 40s # Servisin ba\u015flamas\u0131 i\u00e7in bekleme s\u00fcresi\n  queue_worker:\n    image: myapp\/worker:latest\n    environment:\n      RABBITMQ_HOST: rabbitmq\n    deploy:\n      resources:\n        limits:\n          cpus: '0.5'\n          memory: 512M\n    depends_on:\n      - rabbitmq\n  rabbitmq:\n    image: rabbitmq:3-management\n    ports:\n      - \"5672:5672\"\n      - \"15672:15672\"\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>api<\/code> servisi i\u00e7in CPU ve bellek limitleri ve rezervasyonlar\u0131 tan\u0131mlanm\u0131\u015ft\u0131r. Ayr\u0131ca, HTTP tabanl\u0131 bir sa\u011fl\u0131k kontrol\u00fc eklenmi\u015ftir. Bu kontroller sayesinde, API servisi yan\u0131t vermezse Docker Compose bunu alg\u0131layabilir ve gerekli aksiyonlar\u0131 alabilir. <code>queue_worker<\/code> servisi i\u00e7in de benzer kaynak s\u0131n\u0131rlamalar\u0131 uygulanm\u0131\u015ft\u0131r. Bu t\u00fcr detayl\u0131 yap\u0131land\u0131rmalar, uygulaman\u0131z\u0131n genel kararl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<h4>A\u011f Yap\u0131land\u0131rmas\u0131 ve \u00d6l\u00e7ekleme<\/h4>\n<p>Varsay\u0131lan olarak, Docker Compose t\u00fcm servislerinizi tek bir varsay\u0131lan a\u011fa ba\u011flar. Ancak karma\u015f\u0131k uygulamalarda, servisler aras\u0131nda daha kontroll\u00fc ileti\u015fim sa\u011flamak veya a\u011f trafi\u011fini izole etmek i\u00e7in \u00f6zel a\u011flar tan\u0131mlamak gerekebilir. \u00d6rne\u011fin, bir veritaban\u0131 servisini sadece belirli arka u\u00e7 servislerinin eri\u015febilece\u011fi bir a\u011fa yerle\u015ftirerek g\u00fcvenlik seviyesini art\u0131rabilirsiniz. Ayr\u0131ca, Docker Compose, Docker Swarm ile birlikte kullan\u0131ld\u0131\u011f\u0131nda veya <code>docker-compose.prod.yaml<\/code> gibi dosyalarda <code>deploy.replicas<\/code> anahtar\u0131 ile servislerinizi kolayca \u00f6l\u00e7eklendirmenizi sa\u011flar. Bu, y\u00fck dengelemenin otomatik olarak yap\u0131lmas\u0131n\u0131 ve uygulaman\u0131z\u0131n daha fazla iste\u011fi kar\u015f\u0131layabilmesini m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<pre><code>\nversion: '3.8'\nservices:\n  web_frontend:\n    build: .\/frontend\n    ports:\n      - \"80:80\"\n    networks:\n      - frontend_network\n    deploy:\n      replicas: 2 # Frontend i\u00e7in 2 kopya\n  api_backend:\n    build: .\/backend\n    networks:\n      - frontend_network\n      - backend_network\n    environment:\n      DB_HOST: database\n    deploy:\n      replicas: 3 # Backend i\u00e7in 3 kopya\n  database:\n    image: postgres:13\n    networks:\n      - backend_network # Sadece backend_network'e ba\u011fl\u0131\n    environment:\n      POSTGRES_DB: myapp\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\nnetworks:\n  frontend_network:\n    driver: bridge\n  backend_network:\n    driver: bridge\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>frontend_network<\/code> ve <code>backend_network<\/code> olmak \u00fczere iki \u00f6zel a\u011f tan\u0131mlanm\u0131\u015ft\u0131r. <code>web_frontend<\/code> servisi sadece <code>frontend_network<\/code>'e ba\u011fl\u0131d\u0131r. <code>api_backend<\/code> servisi hem <code>frontend_network<\/code> hem de <code>backend_network<\/code>'e ba\u011fl\u0131d\u0131r, b\u00f6ylece hem \u00f6n uca hizmet verebilir hem de veritaban\u0131 ile ileti\u015fim kurabilir. <code>database<\/code> servisi ise sadece <code>backend_network<\/code>'e ba\u011fl\u0131d\u0131r, bu da d\u0131\u015far\u0131dan do\u011frudan eri\u015fimi engeller ve g\u00fcvenlik katman\u0131 olu\u015fturur. Ayr\u0131ca, <code>web_frontend<\/code> i\u00e7in 2, <code>api_backend<\/code> i\u00e7in ise 3 replica tan\u0131mlanarak servislerin \u00f6l\u00e7eklenmesi sa\u011flanm\u0131\u015ft\u0131r. Bu karma\u015f\u0131k a\u011f yap\u0131land\u0131rmalar\u0131 ve \u00f6l\u00e7ekleme ayarlar\u0131, uygulaman\u0131z\u0131n mimarisini daha esnek, g\u00fcvenli ve performansl\u0131 hale getirmenin anahtar\u0131d\u0131r. Dolay\u0131s\u0131yla, <code>docker-compose.yaml<\/code> dosyas\u0131n\u0131 optimize etmek, sadece servisi \u00e7al\u0131\u015ft\u0131rmaktan \u00e7ok daha fazlas\u0131d\u0131r; uygulaman\u0131z\u0131n uzun vadeli sa\u011fl\u0131\u011f\u0131n\u0131 ve verimlili\u011fini garantileyen stratejik bir ad\u0131md\u0131r.<\/p>\n<h3>CI\/CD S\u00fcre\u00e7lerinize Docker-Compose.yaml Entegrasyonu: Otomasyon ve Test Senaryolar\u0131<\/h3>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme pratiklerinin merkezinde S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Da\u011f\u0131t\u0131m (CD) s\u00fcre\u00e7leri yer al\u0131r. Bu s\u00fcre\u00e7ler, kod de\u011fi\u015fikliklerinin otomatik olarak derlenmesini, test edilmesini ve da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flayarak geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r ve hatalar\u0131 erken a\u015famada yakalar. Docker ve \u00f6zellikle Docker-Compose.yaml, bu CI\/CD d\u00f6ng\u00fclerine sorunsuz bir \u015fekilde entegre edilebilir ve otomasyon seviyesini \u00f6nemli \u00f6l\u00e7\u00fcde y\u00fckseltebilir. Docker-Compose.yaml dosyan\u0131z\u0131 CI\/CD s\u00fcre\u00e7lerinizle uyumlu hale getirmek, test ortamlar\u0131n\u0131n h\u0131zl\u0131ca kurulmas\u0131n\u0131, entegrasyon testlerinin kolayca \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 ve \u00fcretim da\u011f\u0131t\u0131mlar\u0131n\u0131n standartla\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Test Ortamlar\u0131 \u0130\u00e7in \u00d6zelle\u015ftirme ve Override Dosyalar\u0131<\/h4>\n<p>CI\/CD pipeline'lar\u0131nda, genellikle testler i\u00e7in \u00f6zel bir ortama ihtiya\u00e7 duyar\u0131z. Bu ortamda, test veritabanlar\u0131, mock servisler veya testlere \u00f6zel yap\u0131land\u0131rmalar bulunabilir. Docker-Compose'un en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri olan \"override\" (ge\u00e7ersiz k\u0131lma) mekanizmas\u0131, bu senaryo i\u00e7in m\u00fckemmel bir \u00e7\u00f6z\u00fcmd\u00fcr. Ana <code>docker-compose.yaml<\/code> dosyas\u0131n\u0131 korurken, <code>docker-compose.test.yaml<\/code> gibi bir override dosyas\u0131 olu\u015fturarak test ortam\u0131na \u00f6zel de\u011fi\u015fiklikleri uygulayabilirsiniz. \u00d6rne\u011fin, veritaban\u0131 persistans\u0131 yerine in-memory bir veritaban\u0131 kullanabilir veya testler i\u00e7in belirli servislerin portlar\u0131n\u0131 de\u011fi\u015ftirebilirsiniz.<\/p>\n<p>Ana <code>docker-compose.yaml<\/code> dosyan\u0131z:<\/p>\n<pre><code>\n# docker-compose.yaml (Ana yap\u0131land\u0131rma)\nversion: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - \"80:80\"\n    environment:\n      DB_HOST: db\n  db:\n    image: postgres:13\n    environment:\n      POSTGRES_DB: myapp\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n    volumes:\n      - db_data:\/var\/lib\/postgresql\/data\nvolumes:\n  db_data:\n<\/pre>\n<p><\/code><\/p>\n<p>Test ortam\u0131 i\u00e7in <code>docker-compose.test.yaml<\/code>:<\/p>\n<pre><code>\n# docker-compose.test.yaml (Test ortam\u0131 i\u00e7in override)\nversion: '3.8'\nservices:\n  app:\n    environment:\n      DB_HOST: test_db # Test i\u00e7in farkl\u0131 bir DB host\n    command: npm test # Testleri \u00e7al\u0131\u015ft\u0131r\n  db:\n    image: postgres:alpine # Daha hafif bir DB imaj\u0131\n    environment:\n      POSTGRES_DB: test_myapp\n      POSTGRES_USER: test_user\n      POSTGRES_PASSWORD: test_password\n    volumes: [] # Testlerde kal\u0131c\u0131 veri gerekmez, volume'u kald\u0131r\n<\/pre>\n<p><\/code><\/p>\n<p>Bu iki dosyay\u0131 birlikte \u00e7al\u0131\u015ft\u0131rmak i\u00e7in CI\/CD pipeline'\u0131n\u0131zda <code>docker compose -f docker-compose.yaml -f docker-compose.test.yaml up --build<\/code> komutunu kullanabilirsiniz. Bu, ana yap\u0131land\u0131rmay\u0131 temel al\u0131r ve test ortam\u0131na \u00f6zel de\u011fi\u015fiklikleri uygular. Uygulaman\u0131z\u0131n testleri tamamland\u0131\u011f\u0131nda ise <code>docker compose down<\/code> ile ortam\u0131 kolayca temizleyebilirsiniz.<\/p>\n<h4>Otomatik Da\u011f\u0131t\u0131m ve Versiyon Y\u00f6netimi<\/h4>\n<p>CI\/CD s\u00fcre\u00e7lerinde, ba\u015far\u0131l\u0131 testlerden ge\u00e7en kodun otomatik olarak \u00fcretim veya sahneleme ortamlar\u0131na da\u011f\u0131t\u0131lmas\u0131 beklenir. Docker-Compose.yaml dosyalar\u0131, bu da\u011f\u0131t\u0131m ad\u0131mlar\u0131n\u0131 standartla\u015ft\u0131rmak ve tekrarlanabilir hale getirmek i\u00e7in kullan\u0131labilir. Her ba\u015far\u0131l\u0131 build, yeni bir Docker imaj\u0131 etiketi (tag) olu\u015fturur ve bu imaj daha sonra Docker Hub veya \u00f6zel bir imaj kay\u0131t defterine (registry) g\u00f6nderilir. Da\u011f\u0131t\u0131m ad\u0131m\u0131nda ise, sunucularda \u00e7al\u0131\u015fan <code>docker compose pull<\/code> ve <code>docker compose up -d<\/code> komutlar\u0131 ile yeni imajlar \u00e7ekilerek uygulama g\u00fcncellenir.<\/p>\n<pre><code>\n# CI\/CD pipeline script \u00f6rne\u011fi (\u00f6rne\u011fin Jenkinsfile, GitLab CI, GitHub Actions)\n# ...\nstages:\n  - build\n  - test\n  - deploy\n\nbuild:\n  stage: build\n  script:\n    - docker build -t myapp:$(GIT_COMMIT) . # Commit ID ile etiketle\n    - docker push myapp:$(GIT_COMMIT) # \u0130maj\u0131 registry'e g\u00f6nder\n\ntest:\n  stage: test\n  script:\n    - docker compose -f docker-compose.yaml -f docker-compose.test.yaml up --build -d\n    - docker compose exec app npm run ci:test # Konteyner i\u00e7inde testleri \u00e7al\u0131\u015ft\u0131r\n    - docker compose down\n\ndeploy:\n  stage: deploy\n  script:\n    - ssh user@prod-server \"cd \/path\/to\/app && docker compose -f docker-compose.yaml -f docker-compose.prod.yaml pull\"\n    - ssh user@prod-server \"cd \/path\/to\/app && docker compose -f docker-compose.yaml -f docker-compose.prod.yaml up -d --remove-orphans\"\n# ...\n<\/pre>\n<p><\/code><\/p>\n<p>Bu ak\u0131\u015fta, <code>docker-compose.prod.yaml<\/code> dosyas\u0131 \u00fcretim ortam\u0131na \u00f6zel yap\u0131land\u0131rmalar\u0131 i\u00e7erir. CI\/CD arac\u0131, testleri ge\u00e7tikten sonra bu dosyay\u0131 kullanarak \u00fcretim sunucusunda uygulamay\u0131 g\u00fcnceller. Bu yakla\u015f\u0131m, da\u011f\u0131t\u0131m s\u00fcrecini tutarl\u0131 ve hatas\u0131z hale getirir. Her da\u011f\u0131t\u0131m\u0131n ayn\u0131 yap\u0131land\u0131rma dosyas\u0131ndan (farkl\u0131 override'larla birlikte) beslenmesi, \"\u00e7al\u0131\u015ft\u0131 bende\" sendromunu ortadan kald\u0131r\u0131r ve t\u00fcm ortamlarda \u00f6ng\u00f6r\u00fclebilir davran\u0131\u015f sa\u011flar. Dolay\u0131s\u0131yla, <code>docker-compose.yaml<\/code> dosyan\u0131z\u0131 ve onun override mekanizmalar\u0131n\u0131 CI\/CD s\u00fcre\u00e7lerinize entegre etmek, geli\u015ftirme ve da\u011f\u0131t\u0131m d\u00f6ng\u00fclerinizi h\u0131zland\u0131r\u0131rken, kalitenizi ve g\u00fcvenilirli\u011finizi art\u0131rman\u0131n temel ta\u015f\u0131d\u0131r. Bu sayede, yaz\u0131l\u0131m teslimat\u0131n\u0131 daha verimli ve otomatik hale getirebilirsiniz.<\/p>\n<h2>Geli\u015fmi\u015f Konfig\u00fcrasyonlar ve En \u0130yi Uygulamalar: G\u00fcvenlikten Performansa<\/h2>\n<p>Bir uygulaman\u0131n geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri sadece temel servislerin \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131yla s\u0131n\u0131rl\u0131 de\u011fildir. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, g\u00fcvenlik, performans, loglama, monitoring ve daha bir\u00e7ok ileri d\u00fczey konuda yap\u0131land\u0131rmalar yapmak gerekir. Docker-Compose.yaml dosyas\u0131, bu geli\u015fmi\u015f ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak i\u00e7in geni\u015f bir esneklik sunar. Deneyimli kullan\u0131c\u0131lar i\u00e7in bu b\u00f6l\u00fcm, Docker Compose'u tam potansiyeliyle kullanarak uygulamalar\u0131n\u0131z\u0131n daha sa\u011flam, g\u00fcvenli ve performansl\u0131 olmas\u0131n\u0131 sa\u011flayacak ipu\u00e7lar\u0131 ve en iyi uygulamalar\u0131 i\u00e7ermektedir.<\/p>\n<h4>G\u00fcvenlik Odakl\u0131 Yakla\u015f\u0131mlar<\/h4>\n<p>Konteynerli uygulamalarda g\u00fcvenlik, \u00f6ncelikli konulardan biridir. Hassas verilerin (API anahtarlar\u0131, veritaban\u0131 \u015fifreleri) y\u00f6netimi, a\u011f eri\u015fim k\u0131s\u0131tlamalar\u0131 ve imaj g\u00fcvenli\u011fi bu kapsamda de\u011ferlendirilir. Docker Secrets, bu hassas verilerinizi do\u011frudan Compose dosyas\u0131na yazmak yerine g\u00fcvenli bir \u015fekilde y\u00f6netmenizi sa\u011flar. Secrets, \u00fcretim ortamlar\u0131nda genellikle Docker Swarm veya Kubernetes gibi orchestrator'lar taraf\u0131ndan y\u00f6netilir, ancak Docker Compose'da da <code>external: true<\/code> ile harici olarak tan\u0131mlanabilir.<\/p>\n<pre><code>\nversion: '3.8'\nservices:\n  api:\n    image: myapi:latest\n    secrets:\n      - api_key\n      - db_password\n    environment:\n      # Ortam de\u011fi\u015fkeni olarak secret'\u0131 kullanmak i\u00e7in referans\n      API_SECRET: \/run\/secrets\/api_key\n      DB_PASS_FILE: \/run\/secrets\/db_password\n  db:\n    image: postgres:13\n    secrets:\n      - db_password\n    environment:\n      POSTGRES_PASSWORD_FILE: \/run\/secrets\/db_password\nsecrets:\n  api_key:\n    file: .\/secrets\/api_key.txt # Dosyadan okuyabilir veya harici olabilir\n  db_password:\n    external: true # Zaten olu\u015fturulmu\u015f bir secret'\u0131 kullan\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>api_key<\/code> ve <code>db_password<\/code> ad\u0131nda iki secret tan\u0131mlanm\u0131\u015ft\u0131r. <code>api_key<\/code> yerel bir dosyadan okunurken, <code>db_password<\/code> harici olarak y\u00f6netilir. Servisler, bu secret'lara <code>\/run\/secrets\/<\/code> yolu alt\u0131ndan eri\u015febilirler. Bu sayede hassas verilerinizin versiyon kontrol sistemine gitmesini engellersiniz. Ayr\u0131ca, \u00f6zel a\u011flar (custom networks) kullanarak servisler aras\u0131 ileti\u015fimi izole etmek ve sadece gerekli portlar\u0131 d\u0131\u015far\u0131ya a\u00e7mak da \u00f6nemli bir g\u00fcvenlik \u00f6nlemidir.<\/p>\n<h4>Performans \u0130yile\u015ftirmeleri ve Loglama<\/h4>\n<p>Performans, kullan\u0131c\u0131 deneyimi ve maliyet a\u00e7\u0131s\u0131ndan kritik bir fakt\u00f6rd\u00fcr. Docker-Compose.yaml dosyas\u0131nda yapaca\u011f\u0131n\u0131z baz\u0131 ayarlamalarla uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131rabilirsiniz. Kaynak s\u0131n\u0131rlamalar\u0131 (CPU, bellek) daha \u00f6nce bahsedildi\u011fi gibi performans\u0131 dengelemek i\u00e7in \u00f6nemlidir. Ancak, imaj boyutunu optimize etmek, gereksiz katmanlar\u0131 kald\u0131rmak ve uygun base imajlar\u0131 se\u00e7mek de performans \u00fczerinde b\u00fcy\u00fck etki yarat\u0131r. \u00d6rne\u011fin, Alpine Linux tabanl\u0131 imajlar, genellikle daha k\u00fc\u00e7\u00fck boyutlu ve daha h\u0131zl\u0131d\u0131r.<\/p>\n<p>Loglama, bir uygulaman\u0131n davran\u0131\u015f\u0131n\u0131 izlemek ve sorun gidermek i\u00e7in vazge\u00e7ilmezdir. Docker Compose, servislerinizin loglar\u0131n\u0131 \u00e7e\u015fitli s\u00fcr\u00fcc\u00fclerle (<code>json-file<\/code>, <code>syslog<\/code>, <code>gelf<\/code> vb.) y\u00f6netmenize olanak tan\u0131r. Merkezi bir loglama sistemine (ELK Stack, Grafana Loki) entegrasyon, b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalar i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<pre><code>\nversion: '3.8'\nservices:\n  web:\n    image: myapp\/web:latest\n    ports:\n      - \"80:80\"\n    logging:\n      driver: \"json-file\" # Varsay\u0131lan s\u00fcr\u00fcc\u00fc\n      options:\n        max-size: \"10m\"   # Her bir log dosyas\u0131n\u0131n maksimum boyutu\n        max-file: \"3\"     # Maksimum 3 log dosyas\u0131 tut\n  api:\n    image: myapp\/api:latest\n    logging:\n      driver: \"gelf\" # Graylog, Grafana Loki gibi sistemlere log g\u00f6nder\n      options:\n        gelf-address: \"udp:\/\/localhost:12201\"\n        tag: \"api_service\"\n<\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rmada, <code>web<\/code> servisi i\u00e7in loglar yerel olarak <code>json-file<\/code> format\u0131nda saklan\u0131rken, <code>api<\/code> servisi GELF s\u00fcr\u00fcc\u00fcs\u00fc kullan\u0131larak merkezi bir log sunucusuna g\u00f6nderilmektedir. Bu, log y\u00f6netimini basitle\u015ftirir ve hata ay\u0131klama s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r.<\/p>\n<aside class=\"expert-tip\">\n      Uzman \u0130pucu: \u00c7oklu ortamlar i\u00e7in Docker-Compose.yaml dosyalar\u0131n\u0131z\u0131 y\u00f6netirken, genel yap\u0131land\u0131rmay\u0131 temel (<code>docker-compose.yaml<\/code>) dosyada tutun ve ortama \u00f6zg\u00fc farkl\u0131l\u0131klar\u0131 (portlar, kaynak limitleri, environment de\u011fi\u015fkenleri) <code>docker-compose.override.yaml<\/code> veya ortama \u00f6zel dosyalarda (<code>docker-compose.dev.yaml<\/code>, <code>docker-compose.prod.yaml<\/code>) tan\u0131mlay\u0131n. Bu, kod tekrar\u0131n\u0131 \u00f6nler ve yap\u0131land\u0131rmay\u0131 daha okunabilir hale getirir.<br \/>\n    <\/aside>\n<p>Sonu\u00e7 olarak, Docker-Compose.yaml dosyas\u0131n\u0131 sadece \"uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rma\" arac\u0131 olarak g\u00f6rmek eksik bir bak\u0131\u015f a\u00e7\u0131s\u0131d\u0131r. Bu dosya, g\u00fcvenlik politikalar\u0131n\u0131 uygulamaktan, performans optimizasyonlar\u0131na, loglama stratejilerinden a\u011f segmentasyonuna kadar bir uygulaman\u0131n t\u00fcm ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc etkileyen geli\u015fmi\u015f yap\u0131land\u0131rmalara olanak tan\u0131r. Bu \u00f6zellikleri etkili bir \u015fekilde kullanarak, daha sa\u011flam, g\u00fcvenli ve y\u00f6netilebilir Dockerize uygulamalar geli\u015ftirebilirsiniz.<\/p>\n<h3>Mobil Uyumlu Geli\u015ftirme Yakla\u015f\u0131mlar\u0131 ve Docker Ortam\u0131nda Responsive Tasar\u0131m\u0131n Rol\u00fc<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz web uygulamalar\u0131 i\u00e7in mobil uyumluluk (responsive design) bir zorunluluktur. Kullan\u0131c\u0131lar, farkl\u0131 boyutlardaki cihazlardan (telefonlar, tabletler, diz\u00fcst\u00fc bilgisayarlar) uygulamalar\u0131n\u0131za eri\u015fti\u011finde, i\u00e7eri\u011fin d\u00fczg\u00fcn bir \u015fekilde g\u00f6r\u00fcnt\u00fclenmesi ve kullan\u0131labilir olmas\u0131 beklenir. Docker-Compose.yaml dosyas\u0131 do\u011frudan responsive tasar\u0131m\u0131n kendisini tan\u0131mlamasa da, geli\u015ftirme ortam\u0131n\u0131z\u0131 mobil uyumlu tasar\u0131m ilkelerini test etmeye ve uygulamaya uygun hale getirmek i\u00e7in \u00f6nemli roller \u00fcstlenebilir. Dockerize edilmi\u015f bir geli\u015ftirme ortam\u0131, farkl\u0131 cihazlarda veya sanal cihaz em\u00fclat\u00f6rlerinde uygulaman\u0131z\u0131n nas\u0131l g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc ve davrand\u0131\u011f\u0131n\u0131 tutarl\u0131 bir \u015fekilde test etmenizi sa\u011flar.<\/p>\n<h4>Geli\u015ftirme Ortam\u0131nda Responsive Tasar\u0131m Testleri<\/h4>\n<p>Docker ile \u00e7al\u0131\u015fan bir web uygulamas\u0131 geli\u015ftirirken, geli\u015ftirme servisinizi (\u00f6rne\u011fin bir frontend framework'\u00fc olan React, Angular veya Vue.js) Docker konteyneri i\u00e7inde \u00e7al\u0131\u015ft\u0131r\u0131rs\u0131n\u0131z. Bu konteyneri d\u0131\u015far\u0131ya a\u00e7t\u0131\u011f\u0131n\u0131z portlar sayesinde, yerel makinenizdeki herhangi bir taray\u0131c\u0131dan veya hatta ayn\u0131 a\u011fdaki mobil cihazlardan uygulamaya eri\u015febilirsiniz. Bu, responsive tasar\u0131m testlerini \u00e7ok daha kolay ve ger\u00e7ek\u00e7i hale getirir. Farkl\u0131 ekran boyutlar\u0131n\u0131 sim\u00fcle etmek i\u00e7in taray\u0131c\u0131n\u0131n geli\u015ftirici ara\u00e7lar\u0131n\u0131 kullanabilece\u011finiz gibi, fiziksel mobil cihazlarda da uygulaman\u0131z\u0131n nas\u0131l g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc an\u0131nda kontrol edebilirsiniz. Docker-Compose.yaml dosyan\u0131z\u0131, geli\u015ftirme sunucunuzun do\u011fru portlardan eri\u015filebilir olmas\u0131n\u0131 sa\u011flayacak \u015fekilde yap\u0131land\u0131rmak, bu s\u00fcre\u00e7te temel ad\u0131md\u0131r.<\/p>\n<pre><code>\nversion: '3.8'\nservices:\n  frontend:\n    build: .\n    ports:\n      - \"3000:3000\" # Frontend uygulamas\u0131n\u0131n portunu d\u0131\u015far\u0131ya a\u00e7\n    volumes:\n      - .\/src:\/app\/src # Canl\u0131 yeniden y\u00fckleme i\u00e7in kaynak kodunu ba\u011fla\n    environment:\n      NODE_ENV: development\n    command: npm start # Geli\u015ftirme sunucusunu ba\u015flat\n<\/pre>\n<p><\/code><\/p>\n<p>Bu basit yap\u0131land\u0131rma, frontend uygulaman\u0131z\u0131n <code>http:\/\/localhost:3000<\/code> adresinden veya yerel a\u011f\u0131n\u0131zdaki IP adresinizden (\u00f6rne\u011fin <code>http:\/\/192.168.1.10:3000<\/code>) eri\u015filebilir olmas\u0131n\u0131 sa\u011flar. Mobil cihaz\u0131n\u0131zda bu IP adresini kullanarak uygulaman\u0131z\u0131 test edebilir, b\u00f6ylece responsive CSS kurallar\u0131n\u0131z\u0131n ve JavaScript etkile\u015fimlerinizin farkl\u0131 ekran boyutlar\u0131nda d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olabilirsiniz.<\/p>\n<h4>Medya Sorgular\u0131 (Media Queries) ve HTML Yap\u0131s\u0131<\/h4>\n<p>Responsive tasar\u0131m\u0131n temelini, farkl\u0131 ekran boyutlar\u0131na ve cihaz \u00f6zelliklerine g\u00f6re stil kurallar\u0131n\u0131 uyarlayan CSS medya sorgular\u0131 (media queries) olu\u015fturur. Docker Compose, bu medya sorgular\u0131n\u0131n kendisini do\u011frudan etkilemez, ancak geli\u015ftirme ortam\u0131n\u0131z\u0131n bu sorgular\u0131n do\u011fru bir \u015fekilde uygulan\u0131p uygulanmad\u0131\u011f\u0131n\u0131 test etmenize olanak tan\u0131yan stabil bir platform sunar. Uygulaman\u0131z\u0131n HTML yap\u0131s\u0131n\u0131n semantik ve esnek olmas\u0131, responsive tasar\u0131m\u0131n ba\u015far\u0131l\u0131 bir \u015fekilde uygulanabilmesi i\u00e7in \u00f6nemlidir. \u00d6rne\u011fin, g\u00f6rsel olarak i\u00e7eri\u011fin ak\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirebilecek <code>flexbox<\/code> veya <code>grid<\/code> gibi CSS \u00f6zelliklerini kullanmak, mobil uyumlulu\u011fu art\u0131r\u0131r.<\/p>\n<p>Bir CSS medya sorgusu \u00f6rne\u011fi (normalde bir <code>.css<\/code> dosyas\u0131nda bulunur, ancak burada HTML i\u00e7inde g\u00f6sterim ama\u00e7l\u0131d\u0131r):<\/p>\n<pre><code class=\"language-html\">\n<style>\n  \/* Varsay\u0131lan stil: Geni\u015f ekranlar i\u00e7in *\/\n  .container {\n    display: flex;\n    flex-direction: row;\n    padding: 20px;\n  }\n  .item {\n    flex: 1;\n    margin: 10px;\n    background-color: lightblue;\n    padding: 15px;\n  }\n\n  \/* Mobil cihazlar i\u00e7in stil uyarlamalar\u0131 *\/\n  @media screen and (max-width: 768px) {\n    .container {\n      flex-direction: column; \/* Mobil cihazlarda s\u00fctun d\u00fczenine ge\u00e7 *\/\n    }\n    .item {\n      margin: 5px;\n    }\n  }\n<\/style>\n\n<div class=\"container\">\n  <div class=\"item\">\u00d6\u011fe 1<\/div>\n  <div class=\"item\">\u00d6\u011fe 2<\/div>\n  <div class=\"item\">\u00d6\u011fe 3<\/div>\n<\/div>\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki HTML ve CSS \u00f6rne\u011fi, bir konteynerin geni\u015f ekranlarda yan yana (row) ve 768 pikselden daha dar ekranlarda alt alta (column) nas\u0131l d\u00fczenlenece\u011fini g\u00f6sterir. Docker Compose ortam\u0131n\u0131zda frontend servisinizi \u00e7al\u0131\u015ft\u0131r\u0131rken, taray\u0131c\u0131n\u0131z\u0131n pencere boyutunu de\u011fi\u015ftirerek veya mobil cihaz em\u00fclat\u00f6rlerini kullanarak bu medya sorgular\u0131n\u0131n do\u011fru bir \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6zlemleyebilirsiniz. Bu, geli\u015ftiricilere, responsive tasar\u0131m yakla\u015f\u0131mlar\u0131n\u0131 tutarl\u0131 ve kontroll\u00fc bir ortamda test etme imkan\u0131 sunar.<\/p>\n<p>\u00d6zetle, Docker-Compose.yaml dosyas\u0131 do\u011frudan \"mobil uyumlu HTML \u00fcretmez\". Ancak, mobil uyumlu bir web uygulamas\u0131n\u0131n geli\u015ftirme ve test s\u00fcre\u00e7lerini destekleyen, stabil ve eri\u015filebilir bir geli\u015ftirme ortam\u0131 sa\u011flayarak responsive tasar\u0131m\u0131n ba\u015far\u0131l\u0131 bir \u015fekilde uygulanmas\u0131nda dolayl\u0131 bir rol oynar. Do\u011fru yap\u0131land\u0131r\u0131lm\u0131\u015f bir Compose dosyas\u0131 ile, uygulaman\u0131z\u0131n farkl\u0131 cihazlarda ve ekran boyutlar\u0131nda nas\u0131l davrand\u0131\u011f\u0131n\u0131 kolayca g\u00f6zlemleyebilir ve gerekli iyile\u015ftirmeleri yapabilirsiniz.<\/p>\n<h2>Sonu\u00e7: Esnek ve Y\u00f6netilebilir Bir Konteyner Deneyimi \u0130\u00e7in Docker-Compose.yaml<\/h2>\n<p>Docker-Compose.yaml dosyas\u0131, ba\u015flang\u0131\u00e7ta basit bir yap\u0131land\u0131rma arac\u0131 gibi g\u00f6r\u00fcnse de, modern konteynerle\u015ftirilmi\u015f uygulamalar\u0131n dinamik ve karma\u015f\u0131k ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in s\u00fcrekli olarak de\u011fi\u015ftirilmesi ve optimize edilmesi gereken merkezi bir bile\u015fendir. Bu rehberde detayl\u0131ca ele ald\u0131\u011f\u0131m\u0131z gibi, bu dosyan\u0131n sadece bir uygulama ba\u015flatma arac\u0131 olmad\u0131\u011f\u0131n\u0131, ayn\u0131 zamanda bir uygulaman\u0131n t\u00fcm ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc (geli\u015ftirme, test, \u00fcretim), performans\u0131n\u0131, g\u00fcvenli\u011fini ve \u00f6l\u00e7eklenebilirli\u011fini do\u011frudan etkileyen stratejik bir varl\u0131k oldu\u011funu g\u00f6rm\u00fc\u015f olduk. Ortam farkl\u0131l\u0131klar\u0131n\u0131 y\u00f6netmekten, kaynak optimizasyonuna; g\u00fcvenlik zafiyetlerini gidermekten, CI\/CD s\u00fcre\u00e7lerini otomatikle\u015ftirmeye kadar pek \u00e7ok senaryoda <code>docker-compose.yaml<\/code> dosyas\u0131n\u0131n modifikasyonu ka\u00e7\u0131n\u0131lmazd\u0131r ve hayati \u00f6neme sahiptir.<\/p>\n<p>Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, geli\u015ftiricilerin esnek ve y\u00f6netilebilir bir Docker deneyimi ya\u015fayabilmesi i\u00e7in <code>docker-compose.yaml<\/code> dosyas\u0131na ustaca hakim olmas\u0131 gerekir. Override dosyalar\u0131 kullanmak, ortam de\u011fi\u015fkenleriyle \u00e7al\u0131\u015fmak, kaynak limitleri tan\u0131mlamak, a\u011f yap\u0131land\u0131rmalar\u0131n\u0131 \u00f6zelle\u015ftirmek ve g\u00fcvenlik \u00f6zelliklerini entegre etmek, bu hakimiyetin temel ta\u015flar\u0131d\u0131r. Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, kullan\u0131c\u0131 taban\u0131n\u0131z geni\u015fledik\u00e7e ve yeni \u00f6zellikler ekledik\u00e7e, <code>docker-compose.yaml<\/code> dosyan\u0131z da sizinle birlikte evrilmelidir. Bu dosyan\u0131n bilin\u00e7li ve d\u00fczenli bir \u015fekilde g\u00fcncellenmesi, sadece uygulaman\u0131z\u0131n sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamakla kalmaz, ayn\u0131 zamanda geli\u015ftirme ekibinin verimlili\u011fini art\u0131r\u0131r, hata ay\u0131klama s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r ve genel sistem kararl\u0131l\u0131\u011f\u0131n\u0131 garanti eder. Sonu\u00e7 olarak, <code>docker-compose.yaml<\/code>, Docker ekosisteminin temel ta\u015flar\u0131ndan biridir ve onunla do\u011fru etkile\u015fim kurmak, ba\u015far\u0131l\u0131 bir konteyner stratejisinin anahtar\u0131d\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<dl>\n<dt>Docker-Compose.yaml dosyas\u0131n\u0131 ne zaman de\u011fi\u015ftirmeliyim?<\/dt>\n<dd>Uygulaman\u0131za yeni bir servis ekledi\u011finizde, mevcut bir servisin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 veya portlar\u0131n\u0131 de\u011fi\u015ftirdi\u011finizde, farkl\u0131 bir ortama (test\/\u00fcretim) da\u011f\u0131t\u0131m yapaca\u011f\u0131n\u0131zda, kaynak s\u0131n\u0131rlamalar\u0131 veya \u00f6l\u00e7ekleme ayarlar\u0131 yapman\u0131z gerekti\u011finde, g\u00fcvenlik yap\u0131land\u0131rmalar\u0131n\u0131 g\u00fcncelledi\u011finizde veya loglama\/izleme entegrasyonlar\u0131 ekledi\u011finizde de\u011fi\u015ftirmelisiniz.<\/dd>\n<dt><code>docker-compose.override.yaml<\/code> nedir ve ne i\u015fe yarar?<\/dt>\n<dd><code>docker-compose.override.yaml<\/code>, ana <code>docker-compose.yaml<\/code> dosyas\u0131ndaki servis yap\u0131land\u0131rmalar\u0131n\u0131 geni\u015fletmek veya ge\u00e7ersiz k\u0131lmak i\u00e7in kullan\u0131lan ek bir YAML dosyas\u0131d\u0131r. Genellikle ortama \u00f6zg\u00fc (\u00f6rne\u011fin geli\u015ftirme veya test) ayarlar\u0131 tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r, b\u00f6ylece ana dosya temiz ve genel kal\u0131r. <code>docker compose up<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Docker Compose otomatik olarak hem <code>docker-compose.yaml<\/code> hem de <code>docker-compose.override.yaml<\/code> dosyalar\u0131n\u0131 birle\u015ftirir.<\/dd>\n<dt>Hassas verileri (\u015fifreler, API anahtarlar\u0131) Docker-Compose.yaml dosyas\u0131nda nas\u0131l g\u00fcvenli bir \u015fekilde y\u00f6netebilirim?<\/dt>\n<dd>Hassas verileri do\u011frudan Docker-Compose.yaml dosyas\u0131na yazmaktan ka\u00e7\u0131nmal\u0131s\u0131n\u0131z. Bunun yerine, ortam de\u011fi\u015fkenleri (ancak bunlar\u0131 versiyon kontrol\u00fcnde tutmamaya dikkat edin), Docker Secrets veya bir Secret Management arac\u0131 (HashiCorp Vault gibi) kullanmal\u0131s\u0131n\u0131z. Docker Secrets, \u00f6zellikle \u00fcretim ortamlar\u0131nda hassas verileri g\u00fcvenli bir \u015fekilde servis konteynerlerine iletmek i\u00e7in tercih edilen bir y\u00f6ntemdir.<\/dd>\n<dt>Docker-Compose.yaml dosyam\u0131 CI\/CD s\u00fcre\u00e7lerime nas\u0131l entegre edebilirim?<\/dt>\n<dd>CI\/CD s\u00fcre\u00e7lerinizde, farkl\u0131 ortamlar i\u00e7in (test, \u00fcretim) \u00f6zel <code>docker-compose<\/code> dosyalar\u0131 (\u00f6rn. <code>docker-compose.test.yaml<\/code>, <code>docker-compose.prod.yaml<\/code>) tan\u0131mlayabilirsiniz. CI\/CD pipeline'\u0131n\u0131z, bu dosyalara referans vererek uygulamay\u0131 test ortam\u0131nda ba\u015flatabilir, testleri \u00e7al\u0131\u015ft\u0131rabilir ve ard\u0131ndan \u00fcretim ortam\u0131na da\u011f\u0131tabilir. <code>docker compose -f base.yaml -f override.yaml up<\/code> gibi komutlar bu entegrasyon i\u00e7in temeldir.<\/dd>\n<dt>Uygulamam\u0131n mobil uyumlulu\u011funu test etmek i\u00e7in Docker-Compose.yaml dosyas\u0131n\u0131 nas\u0131l yap\u0131land\u0131rabilirim?<\/dt>\n<dd>Docker-Compose.yaml dosyas\u0131 do\u011frudan responsive tasar\u0131m\u0131 \u00fcretmez, ancak geli\u015ftirme ortam\u0131n\u0131z\u0131 bu testlere uygun hale getirir. Frontend servisinizi d\u0131\u015far\u0131ya a\u00e7\u0131k bir port ile yap\u0131land\u0131rarak (\u00f6rn. <code>ports: - \"3000:3000\"<\/code>), yerel makinenizdeki taray\u0131c\u0131lardan veya ayn\u0131 a\u011fdaki fiziksel mobil cihazlardan uygulaman\u0131za eri\u015febilir ve responsive tasar\u0131m\u0131n\u0131z\u0131 ger\u00e7ek zamanl\u0131 olarak test edebilirsiniz. Canl\u0131 yeniden y\u00fckleme (live-reloading) i\u00e7in bind mount'lar\u0131 kullanmak da geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Docker-Compose.yaml dosyas\u0131, birden fazla servisi i\u00e7eren Docker uygulamalar\u0131n\u0131 tan\u0131mlaman\u0131n ve \u00e7al\u0131\u015ft\u0131rman\u0131n temelidir. Ancak projeniz geli\u015ftik\u00e7e, bu dosyan\u0131n statik&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-32492","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.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber<\/title>\n<meta name=\"description\" content=\"Docker-Compose.yaml dosyas\u0131, birden fazla servisi i\u00e7eren Docker uygulamalar\u0131n\u0131 tan\u0131mlaman\u0131n ve \u00e7al\u0131\u015ft\u0131rman\u0131n temelidir. Ancak projeniz geli\u015ftik\u00e7e, bu dosyan\u0131n statik kalmas\u0131 m\u00fcmk\u00fcn de\u011fildir. Peki, mevcut bir Docker-Compose.yaml dosyas\u0131n\u0131 neden de\u011fi\u015ftirmemiz gerekir? Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki farkl\u0131l\u0131klar\u0131 y\u00f6netmek, kaynaklar\u0131 optimize etmek, g\u00fcvenlik sa\u011flamak ve CI\/CD s\u00fcre\u00e7lerini otomatikle\u015ftirmek i\u00e7in bu dosya s\u00fcrekli evrim ge\u00e7irmelidir. Bu rehberde, Docker-Compose.yaml dosyas\u0131n\u0131 de\u011fi\u015ftirmenizin alt\u0131nda yatan nedenleri ve bunu nas\u0131l etkili bir \u015fekilde yapabilece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz.\" \/>\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-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker-Compose.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Docker-Compose.yaml dosyas\u0131, birden fazla servisi i\u00e7eren Docker uygulamalar\u0131n\u0131 tan\u0131mlaman\u0131n ve \u00e7al\u0131\u015ft\u0131rman\u0131n temelidir. Ancak projeniz geli\u015ftik\u00e7e, bu dosyan\u0131n statik kalmas\u0131 m\u00fcmk\u00fcn de\u011fildir. Peki, mevcut bir Docker-Compose.yaml dosyas\u0131n\u0131 neden de\u011fi\u015ftirmemiz gerekir? Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki farkl\u0131l\u0131klar\u0131 y\u00f6netmek, kaynaklar\u0131 optimize etmek, g\u00fcvenlik sa\u011flamak ve CI\/CD s\u00fcre\u00e7lerini otomatikle\u015ftirmek i\u00e7in bu dosya s\u00fcrekli evrim ge\u00e7irmelidir. Bu rehberde, Docker-Compose.yaml dosyas\u0131n\u0131 de\u011fi\u015ftirmenizin alt\u0131nda yatan nedenleri ve bunu nas\u0131l etkili bir \u015fekilde yapabilece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-22T08:01:26+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=\"26 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-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker-Compose.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-10-22T08:01:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/\"},\"wordCount\":4131,\"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-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/\",\"name\":\"Docker-Compose.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-22T08:01:26+00:00\",\"description\":\"Docker-Compose.yaml dosyas\u0131, birden fazla servisi i\u00e7eren Docker uygulamalar\u0131n\u0131 tan\u0131mlaman\u0131n ve \u00e7al\u0131\u015ft\u0131rman\u0131n temelidir. Ancak projeniz geli\u015ftik\u00e7e, bu dosyan\u0131n statik kalmas\u0131 m\u00fcmk\u00fcn de\u011fildir. Peki, mevcut bir Docker-Compose.yaml dosyas\u0131n\u0131 neden de\u011fi\u015ftirmemiz gerekir? Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki farkl\u0131l\u0131klar\u0131 y\u00f6netmek, kaynaklar\u0131 optimize etmek, g\u00fcvenlik sa\u011flamak ve CI\/CD s\u00fcre\u00e7lerini otomatikle\u015ftirmek i\u00e7in bu dosya s\u00fcrekli evrim ge\u00e7irmelidir. Bu rehberde, Docker-Compose.yaml dosyas\u0131n\u0131 de\u011fi\u015ftirmenizin alt\u0131nda yatan nedenleri ve bunu nas\u0131l etkili bir \u015fekilde yapabilece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker-Compose.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber\"}]},{\"@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.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber","description":"Docker-Compose.yaml dosyas\u0131, birden fazla servisi i\u00e7eren Docker uygulamalar\u0131n\u0131 tan\u0131mlaman\u0131n ve \u00e7al\u0131\u015ft\u0131rman\u0131n temelidir. Ancak projeniz geli\u015ftik\u00e7e, bu dosyan\u0131n statik kalmas\u0131 m\u00fcmk\u00fcn de\u011fildir. Peki, mevcut bir Docker-Compose.yaml dosyas\u0131n\u0131 neden de\u011fi\u015ftirmemiz gerekir? Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki farkl\u0131l\u0131klar\u0131 y\u00f6netmek, kaynaklar\u0131 optimize etmek, g\u00fcvenlik sa\u011flamak ve CI\/CD s\u00fcre\u00e7lerini otomatikle\u015ftirmek i\u00e7in bu dosya s\u00fcrekli evrim ge\u00e7irmelidir. Bu rehberde, Docker-Compose.yaml dosyas\u0131n\u0131 de\u011fi\u015ftirmenizin alt\u0131nda yatan nedenleri ve bunu nas\u0131l etkili bir \u015fekilde yapabilece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz.","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-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker-Compose.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber","og_description":"Docker-Compose.yaml dosyas\u0131, birden fazla servisi i\u00e7eren Docker uygulamalar\u0131n\u0131 tan\u0131mlaman\u0131n ve \u00e7al\u0131\u015ft\u0131rman\u0131n temelidir. Ancak projeniz geli\u015ftik\u00e7e, bu dosyan\u0131n statik kalmas\u0131 m\u00fcmk\u00fcn de\u011fildir. Peki, mevcut bir Docker-Compose.yaml dosyas\u0131n\u0131 neden de\u011fi\u015ftirmemiz gerekir? Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki farkl\u0131l\u0131klar\u0131 y\u00f6netmek, kaynaklar\u0131 optimize etmek, g\u00fcvenlik sa\u011flamak ve CI\/CD s\u00fcre\u00e7lerini otomatikle\u015ftirmek i\u00e7in bu dosya s\u00fcrekli evrim ge\u00e7irmelidir. Bu rehberde, Docker-Compose.yaml dosyas\u0131n\u0131 de\u011fi\u015ftirmenizin alt\u0131nda yatan nedenleri ve bunu nas\u0131l etkili bir \u015fekilde yapabilece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz.","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-22T08:01:26+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"26 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker-Compose.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber","datePublished":"2025-10-22T08:01:26+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/"},"wordCount":4131,"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-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/","name":"Docker-Compose.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-22T08:01:26+00:00","description":"Docker-Compose.yaml dosyas\u0131, birden fazla servisi i\u00e7eren Docker uygulamalar\u0131n\u0131 tan\u0131mlaman\u0131n ve \u00e7al\u0131\u015ft\u0131rman\u0131n temelidir. Ancak projeniz geli\u015ftik\u00e7e, bu dosyan\u0131n statik kalmas\u0131 m\u00fcmk\u00fcn de\u011fildir. Peki, mevcut bir Docker-Compose.yaml dosyas\u0131n\u0131 neden de\u011fi\u015ftirmemiz gerekir? Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki farkl\u0131l\u0131klar\u0131 y\u00f6netmek, kaynaklar\u0131 optimize etmek, g\u00fcvenlik sa\u011flamak ve CI\/CD s\u00fcre\u00e7lerini otomatikle\u015ftirmek i\u00e7in bu dosya s\u00fcrekli evrim ge\u00e7irmelidir. Bu rehberde, Docker-Compose.yaml dosyas\u0131n\u0131 de\u011fi\u015ftirmenizin alt\u0131nda yatan nedenleri ve bunu nas\u0131l etkili bir \u015fekilde yapabilece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-compose-yaml-neden-degistirilmeli-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker-Compose.yaml Neden De\u011fi\u015ftirilmeli: Kapsaml\u0131 Bir Rehber"}]},{"@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\/32492","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=32492"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32492\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}