İçeriğe geç

Docker Network Driver Tipleri Ve Özel Ağ Oluşturma

Kategori: Uncategorized

Docker, container’ların ağ bağlantılarını yönetmek için farklı ağ sürücüleri kullanır. Bu sürücüler, container’ların birbirleriyle ve harici sistemlerle nasıl iletişim kuracağını belirler.

Docker yapılandırmalarına geçmeden önce, sistemde Docker kurulumunun doğru şekilde yapılmış olması önemlidir. Henüz kurulum yapmadıysak, anlattığımız “Docker ve Docker Compose Kurulumu” yazımıza göz atabilirsiniz.

Ağ sürücüleri, container’ların dahil olacağı ağı, IP adres aralıklarını ve bağlantı yöntemlerini tanımlar. Bazı sürücüler tamamen izole ortamlar oluşturmak için tasarlanırken, bazıları ise daha geniş ağ erişimi ve esneklik sağlamak üzere geliştirilmiştir.

Bridge Driver (Köprü) Ağı

Bridge, Docker’ın varsayılan ağ sürücüsüdür ve container’lar arasında iletişim kurmayı sağlar. Aynı host üzerindeki container’lar bu ağ üzerinden birbirine bağlanabilir, ancak dış dünyadan izole şekilde çalışır.

Docker, docker0 adlı sanal bir köprü oluşturur ve her container’a bu köprü aracılığıyla bir IP adresi atar. Container’ların dış ağa erişmesi gerektiğinde, bağlantı NAT üzerinden gerçekleştirilir.

Bu ağ türü özellikle Ubuntu Docker ortamlarında sıkça kullanılır, çünkü varsayılan yapılandırma çoğu senaryoda doğrudan çalışır.

Bridge, küçük projelerde veya tek host’ta çalışan uygulamalarda gayet yeterlidir.
Ancak farklı makinelerdeki container’lar arasında doğrudan bağlantı kuramayız.

Host Ağı

Host ağı, container ile ana sistem arasındaki ağ sınırını ortadan kaldıran bir sürücü türüdür. Bu modda container, doğrudan host’un IP adresini kullanır ve ayrı bir sanal ağ oluşturulmaz. Bu yapı, özellikle düşük gecikme ve yüksek ağ performansı gerektiren uygulamalarda tercih edilir.

  • Avantajı, maksimum performans, düşük gecikme süresi.
  • Dezavantajı, iİzolasyon yoktur, güvenlik riski artar.

None Driver (Ağsız)

None ağı, container’ı tamamen dış ağlardan izole eder ve sadece kendi içinde çalışmasını sağlar. Bu modda container’ın harici bir ağ bağlantısı olmaz.

Bu yapı, özel ağ konfigürasyonlarına ihtiyaç duyan test ortamlarında veya güvenlik odaklı senaryolarda tercih edilir.

  • Avantajı, tam izolasyon sağlar.
  • Dezavantajı, dış dünya veya diğer container’larla bağlantı kurulamaz.

Overlay Driver (Ağı)

Overlay ağı, birden fazla host üzerinde çalışan container’lar arasında iletişim kurmak için kullanılır. Bu ağ türü, özellikle Docker Swarm veya Kubernetes gibi orkestrasyon sistemlerinde tercih edilir.

VXLAN ile farklı fiziksel makinelerdeki container’ların sanki aynı yerel ağdaymış gibi iletişim kurmasını sağlar.

  • Avantajı, çoklu host ortamlarında ağ yönetimini kolaylaştırır.
  • Dezavantajı, ek yapılandırma ve bir orkestrasyon aracı gerektirir.

Macvlan Ağı

Macvlan ağı, her container’a fiziksel bir MAC adresi atayarak onu ağda bağımsız bir cihaz gibi gösterir. Bu sayede container, sanki fiziksel bir makineymiş gibi doğrudan switch veya router tarafından tanınabilir.

  • Avantajı, gerçek ağ kimliği ve performans sağlar.
  • Dezavantajı, kurulum karmaşıktır, dinamik IP yönetimi zordur.

IPvlan Ağı

IPvlan ağı, Macvlan’a benzer şekilde çalışır ancak her container’a ayrı bir MAC adresi atamak yerine IP seviyesinde iletişim kurar. Bu yapı, ağ trafiğini daha basit hale getirir ve yönlendirici üzerinde ek yük oluşmasını engeller.

docker network create -d ipvlan \
--subnet=10.0.0.0/24 \
--gateway=10.0.0.1 \
-o parent=eth0 ipvlan_net
  • Avantajı, ağ yönetimi kolaydır, router yükü azalır.
  • Dezavantajı, broadcast trafiği sınırlıdır, bazı senaryolarda izolasyon eksikliği yaşanabilir.

Network driver türleri, Docker’ın container’lar arasındaki iletişimi nasıl yönettiğini anlamamıza yardımcı olur. Ancak bu sürücülerin gerçek gücü, özel ağ yapılandırmaları (custom networks) oluşturulduğunda ortaya çıkar.

Birden fazla container’ı birlikte çalıştırmak ve sadece belirli servislerin iletişim kurmasını sağlamak istiyorsak, özel ağlar oluşturmalıyız. Bu sayede güvenli ve ölçeklenebilir bir Docker ağı kurabiliriz.

Docker’da Özel Ağ (Custom Network) Oluşturma

Docker bize varsayılan ağ yapısını verse de, özel network’ler oluşturarak çok daha kontrollü yapılar kurabiliriz. Böylece container gruplarını birbirinden ayırabilir, sadece belirli servislerin iletişim kurmasını sağlayabiliriz.

Özel Ağ Oluşturalım

Container’larımızı bu özel ağa bağlamak için aşağıdaki komutları kullanalım.

Özel ağlar oluştururken bazen Docker, tanımlanan ağı bulamayabilir ve “network not found” hatası verebilir. Bu tür durumlarda ağların nasıl yeniden tanımlanacağını öğrenmek için Docker ‘network not found’ Hatası Nasıl Giderilir? rehberine göz atabilirsiniz.

Driver’lara Göre İzolasyon Mantığı

Driverİzolasyon SeviyesiAçıklama
BridgeOrtaAynı host’taki container’lar haberleşebilir.
HostYokContainer, host’un IP’sini kullanır.
OverlayYüksekFarklı host’lar arası iletişim.
MacvlanDüşükContainer fiziksel ağda görünür.
NoneTamDış bağlantı tamamen kapalıdır.

Tam İzole Ağlar

Eğer container’ların dış dünyayla hiçbir şekilde iletişim kurmasını istemiyorsak, --internal seçeneğini kullanarak tamamen izole bir ağ oluşturabiliriz.

Bu yapı genellikle yalnızca sistem içi çalışan veritabanı veya arka plan servisleri için tercih edilir.

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.

Sık Sorulan Sorular

Bridge ağı ile Overlay ağı arasındaki fark nedir?

Bridge ağı yalnızca aynı host üzerindeki container’lar arasında iletişim sağlar. Overlay ağı ise birden fazla host arasında ağ iletişimini mümkün kılar.

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

Docker network driver seçimi performansı nasıl etkiler?

Her sürücü farklı amaç için tasarlanmıştır. Bridge orta seviye performans sunarken, Host ve Macvlan sürücüleri daha düşük gecikme sağlar. Overlay ise çoklu host ortamları için optimize edilmiştir.

Bir container aynı anda birden fazla Docker ağına bağlanabilir mi?

docker network connect komutu ile bir container’ı birden fazla ağa dahil edebilirsiniz. Böylece hem frontend hem backend gibi farklı ağlarda aynı anda aktif olabilir.

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir