Uncategorized

      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 SeviyesiAçıklama
      BridgeOrtaAynı host üzerindeki container’lar iletişim kurabilir.
      HostYokContainer, host’un IP adresini kullanır.
      OverlayYüksekFarklı host’lar arasında iletişim kurar.
      MacvlanDüşükContainer fiziksel ağda bağımsız cihaz olarak görünür.
      NoneTamDış 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.

      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

      Hi, I’m Spesifik

      Bir yanıt yazın

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