Docker Ağ Sürücüleri ve Özel Ağ Kurulumu
Docker, container’ların ağ iletişimini yönetmek için farklı network sürücüleri kullanır. Bu sürücüler, container’ların birbirleriyle veya dış dünyayla nasıl etkileşim kuracağını belirleyen temel bileşenlerdir.
Her ağ sürücüsü, container’ların IP adres aralıklarını, erişim seviyelerini ve bağlantı tiplerini tanımlar. Bazı sürücüler tam izolasyon sağlarken, bazıları esnek ve genişletilebilir ağ bağlantılarına imkan tanır.
Bridge Driver (Köprü) Ağı
Bridge, Docker’ın varsayılan ağ sürücüsüdür ve container’lar arasında yerel iletişimi sağlar. Aynı host üzerindeki container’lar bu ağ sayesinde birbirine bağlanabilir, fakat dış ağlardan izole bir biçimde çalışır.
Docker, docker0 adında sanal bir köprü oluşturur ve her container’a bu köprü üzerinden bir IP adresi verir. Dış dünyaya erişim gerektiğinde, trafik NAT aracılığıyla yönlendirilir.
Bu ağ türü özellikle Ubuntu tabanlı Docker ortamlarında tercih edilir, çünkü varsayılan ayarlar çoğu senaryoda sorunsuz çalışır.
docker run -d --name web1 --network bridge nginx
Bridge, küçük projeler veya tek host üzerinde çalışan uygulamalarda idealdir. Ancak farklı makinelerdeki container’lar doğrudan birbirine bağlanamaz.

Host Ağı
Host ağı, container ile ana sistem arasındaki ağ sınırını kaldıran bir sürücü türüdür. Bu modda container doğrudan host’un IP adresini kullanır ve sanal bir ağ oluşturulmaz. Düşük gecikme ve yüksek hız gerektiren uygulamalarda tercih edilir.
docker run -d --network host nginx
Avantajı yüksek performans ve düşük gecikmedir. Dezavantajı ise izolasyonun ortadan kalkması ve güvenlik riskinin artmasıdır.

None Driver (Ağsız)
None ağı, container’ı tamamen dış ağlardan soyutlayarak yalnızca kendi içinde çalışmasına izin verir. Bu modda container’ın hiçbir dış bağlantısı bulunmaz.
Bu yapı, özel test ortamları veya güvenlik odaklı senaryolar için uygundur.
docker run -d --network none alpine sleep 1000
Avantajı tam izolasyon sağlamasıdır, dezavantajı ise dış ağlarla bağlantı kuramamasıdır.

Overlay Driver (Ağı)
Overlay ağı, birden fazla host üzerinde çalışan container’ların birbirleriyle iletişim kurmasını sağlar. Bu yapı Docker Swarm ve Kubernetes gibi orkestrasyon sistemlerinde yaygın olarak kullanılır.
VXLAN teknolojisiyle farklı fiziksel makinelerdeki container’lar aynı yerel ağdaymış gibi iletişim kurar.
docker network create -d overlay my_overlay
Avantajı çoklu host ortamlarında kolay ağ yönetimidir, dezavantajı ise ek yapılandırma ve orkestrasyon gereksinimidir.
Macvlan Ağı
Macvlan ağı,, her container’a fiziksel bir MAC adresi vererek onu ağda bağımsız bir cihaz gibi gösterir. Bu sayede container, fiziksel cihazlar gibi router veya switch tarafından tanınabilir.
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 macvlan_net
Avantajı, yüksek performans ve gerçek ağ kimliği sunmasıdır. Dezavantajı, kurulumun karmaşık olması ve IP yönetiminin zorlaşmasıdır.

IPvlan Ağı
IPvlan ağı, Macvlan’a benzer şekilde çalışır ancak container’lara ayrı MAC adresi vermek yerine IP düzeyinde iletişim kurar. Bu sayede ağ trafiği sadeleşir ve router üzerindeki yük azalır.
docker network create -d ipvlan \
--subnet=10.0.0.0/24 \
--gateway=10.0.0.1 \
-o parent=eth0 ipvlan_net
Avantajı kolay ağ yönetimi ve düşük router yüküdür. Dezavantajı ise broadcast trafiğinin sınırlı olması ve izolasyon eksikliğidir.
Network driver’lar, Docker’ın container iletişimini nasıl yönettiğini anlamamızı sağlar. Bu sürücülerin gerçek gücü ise özel (custom) ağ yapılandırmaları oluşturulduğunda ortaya çıkar.
Docker’da Özel Ağ Tanımlama
Docker, varsayılan bir ağ yapısı sunsa da kullanıcılar özel network’ler tanımlayarak çok daha esnek ve güvenli mimariler oluşturabilir. Bu yöntemle container gruplarını birbirinden ayırabilir ve yalnızca belirli servislerin iletişimine izin verebiliriz.
Özel Ağ Oluşturma
Yeni bir özel ağ oluşturmak için aşağıdaki komutu kullanabiliriz:
docker network create --driver bridge my_bridge
Bu işlemle “my_bridge” adında özel bir köprü ağı tanımlanır. Ardından container’larımızı bu ağa dahil edebiliriz:
docker run -d --name web --network my_bridge nginx
docker run -it --network my_bridge alpine ping web
Driver’lara Göre İzolasyon Seviyesi
| Driver | İzolasyon Seviyesi | Açıklama |
|---|---|---|
| Bridge | Orta | Aynı host üzerindeki container’lar iletişim kurabilir. |
| Host | Yok | Container, host’un IP adresini kullanır. |
| Overlay | Yüksek | Farklı host’lar arasında iletişim kurar. |
| Macvlan | Düşük | Container fiziksel ağda bağımsız cihaz olarak görünür. |
| None | Tam | Dış bağlantılar tamamen kapatılır. |
Tam İzole Ağların Oluşturulması
Eğer container’ların dış ağlarla hiçbir şekilde iletişim kurmasını istemiyorsak, --internal parametresini kullanarak tamamen izole bir ağ tanımlayabiliriz:
docker network create --driver bridge --internal kapali_ag
Bu tip ağlar genellikle yalnızca sistem içinde çalışan veritabanları veya arka plan servisleri için tercih edilir. Bu sayede dış erişim kapatılır, güvenlik seviyesi en üst düzeye çıkar.
Bir Container’ı İki Ağa Bağlamak
Bazen bir container’ın hem ön yüz (frontend) hem de arka uç (backend) sistemlerle iletişim kurması gerekebilir.
docker network create on_yuz_ag
docker network create arka_uc_ag
docker run -d --name api --network arka_uc_ag nginx
docker network connect on_yuz_ag api
Sık Sorulan Sorular
Ubuntu Docker ortamında köprü ağı nasıl kullanılır?
Ubuntu sisteminde Docker kurulunca otomatik olarak docker0 köprüsü oluşturulur.
Yeni bir ağ eklemek istersen:
docker network create --driver bridge my_bridge
komutunu çalıştırabilirsin.
Bridge ağı ile dış dünyaya nasıl erişilir?
Container’lar dış ağa NAT (Network Address Translation) üzerinden çıkar. Bu sayede internet erişimi olur, ancak dışarıdan container’a doğrudan erişim engellenir.
Bridge ağı hangi durumlarda yetersiz kalır?
Birden fazla fiziksel host arasında iletişim gerekiyorsa Bridge yeterli olmaz. Bu tür senaryolarda Overlay ağı kullanılmalıdır.
Bridge ağıyla container’lar birbirine bağlanmıyorsa ne yapılmalı?
Böyle bir durumda ağ tanımları çakışıyor olabilir.
Ağı kontrol etmek için:
docker network inspect bridge
komutunu kullan. Eğer hata “network not found” şeklindeyse, çözümünü burada bulabilirsiniz.
Docker ‘network not found’ Hatası Nasıl Giderilir?
Docker ağ yapılandırmalarını denemeden önce neye dikkat etmeliyim?
Öncelikle sisteminde Docker ve Docker Compose’un doğru şekilde kurulu olması gerekir.
Kurulum adımları için şu rehberden yararlanabilirsin:
Windows, Linux ve macOS’ta Docker ve Docker Compose Kurulumu