{"id":277,"date":"2026-07-31T12:00:00","date_gmt":"2026-07-31T12:00:00","guid":{"rendered":"https:\/\/konteynerium.com\/?p=216"},"modified":"2026-10-06T11:34:00","modified_gmt":"2026-10-06T11:34:00","slug":"docker-networking-containerlar-nasil-haberlesir","status":"publish","type":"post","link":"https:\/\/konteynerium.com\/index.php\/2026\/07\/31\/docker-networking-containerlar-nasil-haberlesir\/","title":{"rendered":"Docker Networking: Container&#8217;lar Nas\u0131l Haberle\u015fir?"},"content":{"rendered":"<p>Bir web uygulaman\u0131z ve bir veritaban\u0131 container&#8217;\u0131n\u0131z oldu\u011funda, bu ikisinin birbirini nas\u0131l bulup konu\u015ftu\u011fu sorusu er ya da ge\u00e7 kar\u015f\u0131n\u0131za \u00e7\u0131kar. Docker networking, container&#8217;lar aras\u0131ndaki ve container&#8217;larla d\u0131\u015f d\u00fcnya aras\u0131ndaki bu ileti\u015fimi y\u00f6neten katmand\u0131r.<\/p>\n<h2>Docker&#8217;\u0131n varsay\u0131lan a\u011f t\u00fcrleri<\/h2>\n<table>\n<thead>\n<tr>\n<th>A\u011f t\u00fcr\u00fc<\/th>\n<th>Davran\u0131\u015f<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>bridge<\/code> (varsay\u0131lan)<\/td>\n<td>Ayn\u0131 host \u00fczerindeki container&#8217;lar, izole bir sanal a\u011f \u00fczerinden birbirleriyle konu\u015fabilir<\/td>\n<\/tr>\n<tr>\n<td><code>host<\/code><\/td>\n<td>Container, host&#8217;un a\u011f aray\u00fcz\u00fcn\u00fc do\u011frudan payla\u015f\u0131r \u2014 izolasyon yoktur, port e\u015fleme gerekmez<\/td>\n<\/tr>\n<tr>\n<td><code>none<\/code><\/td>\n<td>Container&#8217;\u0131n hi\u00e7bir a\u011f eri\u015fimi olmaz \u2014 tamamen izole<\/td>\n<\/tr>\n<tr>\n<td>\u00f6zel <code>bridge<\/code><\/td>\n<td>Sizin olu\u015fturdu\u011funuz, isimle DNS \u00e7\u00f6z\u00fcmlemesi yapan \u00f6zel bir a\u011f \u2014 <strong>\u00f6nerilen y\u00f6ntem<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Sorun: varsay\u0131lan bridge a\u011f\u0131nda isimle eri\u015fim yok<\/h2>\n<p>Docker&#8217;\u0131n varsay\u0131lan <code>bridge<\/code> a\u011f\u0131, container&#8217;lar\u0131n birbirine IP adresiyle eri\u015fmesine izin verir ama container isimlerini otomatik olarak \u00e7\u00f6z\u00fcmlemez. Bu, pratikte kullan\u0131\u015fs\u0131zd\u0131r \u00e7\u00fcnk\u00fc container&#8217;lar yeniden ba\u015flad\u0131\u011f\u0131nda IP adresleri de\u011fi\u015febilir.<\/p>\n<h2>\u00c7\u00f6z\u00fcm: kendi a\u011f\u0131n\u0131z\u0131 olu\u015fturun<\/h2>\n<pre><code># \u00d6zel bir bridge a\u011f\u0131 olu\u015ftur\ndocker network create uygulama-agi\n\n# Veritaban\u0131n\u0131 bu a\u011fa ba\u011fl\u0131 olarak ba\u015flat\ndocker run -d --name db --network uygulama-agi \\\n  -e POSTGRES_PASSWORD=gizli123 postgres:16\n\n# API'yi ayn\u0131 a\u011fa ba\u011fl\u0131 olarak ba\u015flat\ndocker run -d --name api --network uygulama-agi \\\n  -e DB_HOST=db my-api:1.0<\/code><\/pre>\n<p>Burada kritik nokta: <code>api<\/code> container&#8217;\u0131, veritaban\u0131na <code>db<\/code>&#8216;nin IP adresini bilmeden, do\u011frudan <strong>container ismini<\/strong> (<code>db<\/code>) bir hostname gibi kullanarak eri\u015febilir. Docker, kendi a\u011f\u0131 i\u00e7inde otomatik bir DNS sunucusu \u00e7al\u0131\u015ft\u0131r\u0131r ve container isimlerini IP&#8217;lere \u00e7\u00f6z\u00fcmler \u2014 bu, ayn\u0131 a\u011fdaki container&#8217;lar aras\u0131nda en pratik ileti\u015fim yoludur.<\/p>\n<div class=\"callout\">\n  <span class=\"glyph\">i<\/span><\/p>\n<p>Docker Compose kullan\u0131yorsan\u0131z bu ad\u0131m\u0131 elle yapman\u0131za gerek yok: ayn\u0131 <code>docker-compose.yml<\/code> i\u00e7indeki t\u00fcm servisler otomatik olarak ortak bir a\u011fa ba\u011flan\u0131r ve birbirlerine do\u011frudan servis ismiyle (<code>db<\/code>, <code>redis<\/code>, <code>api<\/code> gibi) eri\u015febilir.<\/p>\n<\/div>\n<h2>Port e\u015fleme: d\u0131\u015f d\u00fcnyadan eri\u015fim<\/h2>\n<p>Container&#8217;lar aras\u0131 ileti\u015fim i\u00e7in port e\u015flemeye gerek yoktur (ayn\u0131 a\u011fdaysalar container&#8217;\u0131n kendi i\u00e7 portuna do\u011frudan eri\u015filir). Port e\u015fleme (<code>-p<\/code>), sadece host makineden veya internetten container&#8217;a eri\u015fmek istedi\u011finizde gerekir:<\/p>\n<pre><code># Host'un 8080 portunu container'\u0131n 80 portuna ba\u011fla\ndocker run -d -p 8080:80 --name web nginx:alpine\n\n# Sadece belirli bir aray\u00fczden (\u00f6rn. localhost) eri\u015fime izin ver\ndocker run -d -p 127.0.0.1:8080:80 --name web nginx:alpine<\/code><\/pre>\n<p><code>-p host_portu:container_portu<\/code> format\u0131n\u0131 do\u011fru okumak \u00f6nemlidir \u2014 sondaki (sa\u011fdaki) say\u0131 her zaman container&#8217;\u0131n <em>i\u00e7indeki<\/em> porttur, ilk say\u0131 ise d\u0131\u015far\u0131dan ba\u011flanaca\u011f\u0131n\u0131z host portudur.<\/p>\n<h2>A\u011flar\u0131 listelemek ve incelemek<\/h2>\n<pre><code># Mevcut t\u00fcm a\u011flar\u0131 listele\ndocker network ls\n\n# Bir a\u011fa hangi container'lar\u0131n ba\u011fl\u0131 oldu\u011funu g\u00f6r\ndocker network inspect uygulama-agi\n\n# \u00c7al\u0131\u015fan bir container'\u0131 sonradan ba\u015fka bir a\u011fa da ba\u011fla\ndocker network connect baska-ag api<\/code><\/pre>\n<h2>Docker Compose&#8217;da a\u011f \u00f6rne\u011fi<\/h2>\n<pre><code>services:\n  api:\n    build: .\n    environment:\n      DB_HOST: db   # servis ismiyle do\u011frudan eri\u015fim\n    depends_on:\n      - db\n\n  db:\n    image: postgres:16\n    environment:\n      POSTGRES_PASSWORD: gizli123\n    # api ve db ayn\u0131 otomatik a\u011fda \u2014 ekstra tan\u0131m gerekmez<\/code><\/pre>\n<h2>G\u00fcvenlik a\u00e7\u0131s\u0131ndan bir not<\/h2>\n<p>Bir veritaban\u0131 container&#8217;\u0131n\u0131n portunu (<code>-p 5432:5432<\/code>) do\u011frudan d\u0131\u015far\u0131ya a\u00e7mak, gereksiz yere sald\u0131r\u0131 y\u00fczeyi olu\u015fturur. Genellikle sadece uygulaman\u0131z\u0131n eri\u015fmesi gereken bir servisin (veritaban\u0131, cache) portunu host&#8217;a hi\u00e7 e\u015flemeyin \u2014 ayn\u0131 Docker a\u011f\u0131ndaki di\u011fer container&#8217;lar zaten container isim \u00e7\u00f6z\u00fcmlemesi \u00fczerinden eri\u015febilir; sadece kullan\u0131c\u0131lar\u0131n do\u011frudan eri\u015fmesi gereken servisleri (web sunucusu, API) d\u0131\u015far\u0131 a\u00e7\u0131n.<\/p>\n<p>Container&#8217;lar art\u0131k birbiriyle g\u00fcvenli \u015fekilde konu\u015fabiliyor. Bu imajlar\u0131 ba\u015fka makinelerde ve ekiplerde de kullan\u0131labilir hale getirmek i\u00e7in s\u0131radaki ad\u0131m, onlar\u0131 bir registry&#8217;e (Docker Hub veya kendi private registry&#8217;niz) g\u00f6ndermektir \u2014 bunu bir sonraki yaz\u0131da ele al\u0131yoruz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Varsay\u0131lan bridge a\u011f\u0131n\u0131n s\u0131n\u0131rlar\u0131ndan \u00f6zel a\u011f olu\u015fturmaya, container isimleriyle otomatik DNS \u00e7\u00f6z\u00fcmlemesinden port e\u015flemenin do\u011fru okunmas\u0131na kadar Docker networking&#8217;i ba\u015ftan sona anlat\u0131yoruz.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"seviye":[8],"class_list":["post-277","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\/277","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/comments?post=277"}],"version-history":[{"count":1,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/277\/revisions"}],"predecessor-version":[{"id":575,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/277\/revisions\/575"}],"wp:attachment":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/media?parent=277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/categories?post=277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/tags?post=277"},{"taxonomy":"seviye","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/seviye?post=277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}