{"id":204,"date":"2026-05-08T12:00:00","date_gmt":"2026-05-08T12:00:00","guid":{"rendered":"https:\/\/konteynerium.com\/?p=204"},"modified":"2026-10-06T11:34:00","modified_gmt":"2026-10-06T11:34:00","slug":"docker-compose-ile-coklu-servis-yonetimi","status":"publish","type":"post","link":"https:\/\/konteynerium.com\/index.php\/2026\/05\/08\/docker-compose-ile-coklu-servis-yonetimi\/","title":{"rendered":"Docker Compose ile \u00c7oklu Servis Y\u00f6netimi"},"content":{"rendered":"<p>Ger\u00e7ek d\u00fcnya uygulamalar\u0131 nadiren tek bir container&#8217;dan ibarettir: bir API sunucusu, bir veritaban\u0131, belki bir Redis cache ve bir reverse proxy \u2014 hepsini ayr\u0131 ayr\u0131 <code>docker run<\/code> komutlar\u0131yla y\u00f6netmek h\u0131zla karma\u015f\u0131kla\u015f\u0131r. Docker Compose, bu servisleri tek bir YAML dosyas\u0131nda tan\u0131mlay\u0131p tek komutla aya\u011fa kald\u0131rman\u0131z\u0131 sa\u011flar.<\/p>\n<h2>Docker Compose ile WordPress nas\u0131l kurulur? (WordPress + MySQL \u00f6rne\u011fi)<\/h2>\n<p>Bu portal\u0131n kendisinin de kurulumunda kullan\u0131labilecek klasik bir \u00f6rnek \u2014 WordPress ve veritaban\u0131n\u0131 birlikte tan\u0131mlayan bir <code>docker-compose.yml<\/code>:<\/p>\n<pre><code>services:\n  db:\n    image: mariadb:10.11\n    restart: unless-stopped\n    environment:\n      MYSQL_DATABASE: wordpress\n      MYSQL_USER: wpuser\n      MYSQL_PASSWORD: wppass\n      MYSQL_ROOT_PASSWORD: rootpass\n    volumes:\n      - db_data:\/var\/lib\/mysql\n\n  wordpress:\n    image: wordpress:latest\n    restart: unless-stopped\n    depends_on:\n      - db\n    ports:\n      - \"8080:80\"\n    environment:\n      WORDPRESS_DB_HOST: db\n      WORDPRESS_DB_NAME: wordpress\n      WORDPRESS_DB_USER: wpuser\n      WORDPRESS_DB_PASSWORD: wppass\n    volumes:\n      - wp_data:\/var\/www\/html\n\nvolumes:\n  db_data:\n  wp_data:<\/code><\/pre>\n<p>T\u00fcm stack&#8217;i aya\u011fa kald\u0131rmak tek bir komut:<\/p>\n<pre><code>docker compose up -d<\/code><\/pre>\n<h2>Dosyan\u0131n anatomisi<\/h2>\n<ul>\n<li><strong>services:<\/strong> Her biri kendi container&#8217;\u0131nda \u00e7al\u0131\u015facak par\u00e7alar\u0131 tan\u0131mlar (<code>db<\/code>, <code>wordpress<\/code>).<\/li>\n<li><strong>depends_on:<\/strong> Ba\u015flatma s\u0131ras\u0131n\u0131 belirtir \u2014 <code>wordpress<\/code>, <code>db<\/code>&#8216;den sonra ba\u015flar (ama veritaban\u0131n\u0131n <em>haz\u0131r<\/em> oldu\u011funu garanti etmez, sadece container&#8217;\u0131n ba\u015flad\u0131\u011f\u0131n\u0131).<\/li>\n<li><strong>environment:<\/strong> Container i\u00e7ine enjekte edilen ortam de\u011fi\u015fkenleri.<\/li>\n<li><strong>volumes:<\/strong> Container silinse bile verinin kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flayan isimlendirilmi\u015f diskler.<\/li>\n<li><strong>ports:<\/strong> Host makinenin portunu container&#8217;\u0131n portuna e\u015fler (<code>host:container<\/code>).<\/li>\n<\/ul>\n<h2>Servisler aras\u0131 ileti\u015fim<\/h2>\n<p>Compose, ayn\u0131 dosyada tan\u0131ml\u0131 servisler i\u00e7in otomatik olarak bir a\u011f (network) olu\u015fturur. Bu sayede <code>wordpress<\/code> servisi, veritaban\u0131na <code>localhost<\/code> yerine do\u011frudan <strong>servis ad\u0131yla<\/strong> (<code>db<\/code>) ula\u015fabilir \u2014 Docker&#8217;\u0131n dahili DNS \u00e7\u00f6z\u00fcmlemesi bunu otomatik halleder.<\/p>\n<div class=\"callout\">\n  <span class=\"glyph\">i<\/span><\/p>\n<p>Ortam de\u011fi\u015fkenlerini ve parolalar\u0131 do\u011frudan <code>docker-compose.yml<\/code> i\u00e7ine yazmak yerine, production&#8217;da bir <code>.env<\/code> dosyas\u0131 veya Docker secrets kullanmak g\u00fcvenlik a\u00e7\u0131s\u0131ndan \u00f6nerilir. Bu konuyu G\u00fcvenlik b\u00f6l\u00fcm\u00fcnde detayl\u0131 i\u015fliyoruz.<\/p>\n<\/div>\n<h2>S\u0131k kullan\u0131lan komutlar<\/h2>\n<pre><code>docker compose up -d          # servisleri arka planda ba\u015flat\ndocker compose ps             # \u00e7al\u0131\u015fan servisleri listele\ndocker compose logs -f wordpress   # belirli bir servisin loglar\u0131n\u0131 takip et\ndocker compose down           # servisleri durdur ve kald\u0131r\ndocker compose down -v        # + isimlendirilmi\u015f volume'leri de sil<\/code><\/pre>\n<p>Tek makinede birden fazla servisi y\u00f6netmeyi \u00f6\u011frendi\u011finize g\u00f6re, art\u0131k bunu Podman gibi alternatiflerle veya \u00e7ok makineli orkestrasyon ara\u00e7lar\u0131yla nas\u0131l kar\u015f\u0131la\u015ft\u0131raca\u011f\u0131n\u0131za bakabiliriz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker Compose ile WordPress nas\u0131l kurulur? Birden fazla servisi tek bir docker-compose.yml ile nas\u0131l tan\u0131mlay\u0131p y\u00f6netece\u011finizi, WordPress + MySQL \u00f6rne\u011fi \u00fczerinden ad\u0131m ad\u0131m g\u00f6r\u00fcn.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"seviye":[8],"class_list":["post-204","post","type-post","status-publish","format-standard","hentry","category-docker-derinlemesine","seviye-orta"],"_links":{"self":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/comments?post=204"}],"version-history":[{"count":1,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/204\/revisions"}],"predecessor-version":[{"id":567,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/204\/revisions\/567"}],"wp:attachment":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/media?parent=204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/categories?post=204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/tags?post=204"},{"taxonomy":"seviye","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/seviye?post=204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}