Docker Ağlarında Ustalık: Özel Köprülerden Swarm’a Hazır Mimarilere
Ağ sürücüleri, IP yönetimi, Swarm overlay kurulumu ve ölçeklenebilir, güvenli konteyner sistemleri için performans ayarlamaları dahil Docker ağlarına yönelik eksiksiz, uygulamalı bir rehber.
Ağ, konteynerleştirilmiş uygulamaların temel konseptidir. Tüm konteynerlerin, ana sistemlerin ve harici hizmetlerin sorunsuz iletişim kurmasını sağlar. Docker’ın yerleşik ağ özellikleri, hizmetleri etkili biçimde izole etmek, veri akışını güvenceye almak ve ölçeklenebilir mikro hizmet mimarilerini orkestre etmek için hayati öneme sahiptir.
Bu bağlamdaki en güçlü araçlardan biri, uygulama ihtiyaçlarınıza özel ağlar tanımlamanıza olanak tanıyan Docker network create komutudur; DevOps mühendisleri ve geliştiriciler için vazgeçilmezdir.
Bu nedenle bugün, bu Docker ağlarını adım adım nasıl oluşturup etkin biçimde yöneteceğinizi anlatacağım.
Modern uygulamalar genellikle, ayrı ve izole konteynerlerde çalışan birden çok hizmet kullanılarak inşa edilir. Docker ağları, altyapıdan bağımsız olarak seçtiğiniz ağ modeline göre bu konteynerleri birbirine ve harici sistemlere bağlamak için esnek ve güçlü bir yol sunar.
Bu bölüm, Docker’ın kilit bir bileşeni olan ağlara dair temel bilgileri ve uygulamanız için hangi ağ yapılandırmasının uygun olacağını nasıl değerlendireceğinizi aktaracaktır. Ancak başlamadan önce, Docker’a tamamen yeniyseniz, Docker ağlarına daha derinlemesine dalmadan önce sağlam bir temel oluşturmak amacıyla Introduction to Docker kursuna göz atmanızı önemle tavsiye ederim.
Ağ sürücüleri: Docker ağlarının temeli
Docker, konteynerlerin nasıl bağlanıp iletişim kuracağını belirtmek için ağ sürücülerini kullanır. Her sürücü, konteyner ağ iletişimini nasıl yöneteceğini tanımlar. Sonuç olarak, Docker’ın ana ağ sürücülerinin her biri için performans, izolasyon ve karmaşıklık düzeyleri farklıdır.
Temel Docker ağ sürücülerine genel bakış
Docker’ın desteklediği başlıca yerleşik sürücüler şunlardır:
Bridge: Bağımsız konteynerler için varsayılan sürücü. Ana makinede izole bir dahili ağ oluşturur; konteynerlerin IP’ler veya konteyner adlarıyla birbirleriyle iletişim kurmasına olanak tanır. Tek bir ana makinede geliştirme ve test için idealdir.
Host: Ana makinenin ağ yığınını paylaşarak izolasyonu kaldırır. Konteyner doğrudan ana makinenin IP’sini ve portlarını kullanır. Yüksek performanslı uygulamalar veya ana makine düzeyindeki hizmetlerle uyumluluk için kullanışlıdır.
None: Konteyner için tüm ağ iletişimini devre dışı bırakır. Yalnızca loopback arayüzü mevcuttur. Harici bağlantı gerektirmeyen veya sıkı güvenlik izolasyonu isteyen konteynerler için en uygunudur.
Overlay: Farklı Docker ana makinelerindeki konteynerler arasında iletişimi etkinleştirir. Docker Swarm ve çok ana makineli dağıtımlarda yaygın olarak kullanılır. Altyapıdaki fiziksel katmanı soyutlayan dağıtık bir ağ oluşturur.
Macvlan: Her konteynere benzersiz bir MAC adresi atar; konteyneri ağda fiziksel bir aygıt gibi gösterir. Fiziksel ağa doğrudan erişim gerektiren eski uygulamalar için uygundur.
IPvlan: Macvlan’a benzer, ancak trafiği MAC adresleri yerine IP katmanında yönlendirir. Yüksek yoğunluklu ortamlarda daha iyi performans ve kontrol sunar.
Her sürücü, konteynerlerin birbirleriyle, ana makineyle ve harici ağlarla nasıl etkileşeceğini etkiler.
Bu ağ türlerinin birlikte nasıl çalıştığını merak ediyor musunuz? Intermediate Docker kursumuz Docker ağları, birimler ve Compose’u uygulamalı ayrıntılarla ele alır. Bu farkları anlamak, güvenli ve yüksek performanslı mimariler tasarlamanın anahtarıdır.
Hangi ağ türünü kullanmalıyım?
Doğru ağ sürücüsünü seçmek, uygulamanızın mimarisi ve operasyonel hedeflerinize bağlıdır:
Bridge: Çoğu yerel geliştirme senaryosu ve tek ana makinede basit çok konteynerli uygulamalar için önerilir. İzolasyon ve kullanım kolaylığı arasında denge sunar.
Host: Konteynerlerin ana makinenin ağına doğrudan bağlanması gerektiğinde en iyisidir; örneğin standart portlarda (örn. 80 veya 443) servis yayınlamak. Güvenlik ve port çakışmaları konusunda dikkatli olun.
None: Ağ erişimi olmaması gereken izole iş yükleri veya güvenlik kritik görevler için idealdir. Otomasyon iş akışlarında veya testlerde yaygındır.
Overlay: Konteynerlerin birden çok ana makineye yayıldığı Docker Swarm veya Kubernetes gibi kümelenmiş ortamlarda vazgeçilmezdir. Yatay ölçekleme ve hizmet keşfini etkinleştirir.
Macvlan: Konteynerlerin LAN üzerinde fiziksel aygıt gibi davranması gerektiğinde tercih edilir. Ağ dinleme, eski sistem entegrasyonu veya Docker’ın ağ yığınını baypas etme gibi durumlarda kullanılır.
IPvlan: Telko veya finans gibi sıkı ağ gereksinimleri olan ortamlarda macvlan’a kıyasla daha ayrıntılı kontrol ve daha iyi performans sunar.
Ağ sürücüsü seçerken ana makine topolojisi, güvenlik ihtiyaçları ve ölçekleme stratejisi gibi faktörleri değerlendirin.
Hâlâ iş yükünüze en uygun ağı seçmeye mi çalışıyorsunuz? Gerçek dağıtımlarda Docker ile Kubernetes’in nasıl karşılaştırıldığını bu Kubernetes vs Docker rehberiyle öğrenin.
Özel Docker Ağları Oluşturma
Özel Docker ağları, konteynerlerin birbirleriyle ve harici sistemlerle nasıl iletişim kuracağını kontrol etmenize olanak tanır; bu da hizmetleri daha iyi izole etmenize, öngörülebilir IP’ler atamanıza veya mimarinizi performans ya da güvenlik için tasarlamanıza yardımcı olur.
Bu bölüm, özel Docker ağları oluşturma sürecinde temel bilgilerden daha gelişmiş özelliklere kadar, komutlar ve özel IP yapılandırmaları dahil olmak üzere sizi yönlendirecektir.
Temel komut yapısı
Özel bir ağ oluşturmak için docker network create komutunu kullanın. Bu komut, konteyner iletişimini daha iyi kontrol etmek için ağ sürücüsünü, alt ağı ve diğer seçenekleri tanımlamanıza imkan tanır.
Varsayılan bridge sürücüsünü kullanan basit bir örnek:
Bu komut, demo-network adlı bir bridge ağı oluşturur. Docker, onay olarak benzersiz bir ağ kimliği döndürür. Bu noktada ağ mevcuttur ancak henüz herhangi bir konteynere bağlı değildir.
Daha büyük sistemlerle veya belirli ağ politikalarıyla çalışırken Docker, özel ağlar içinde IP adres aralıklarını manuel olarak yönetmenize izin verir.
--subnet ve --gateway bayraklarını kullanarak bir alt ağ ve ağ geçidi tanımlayabilirsiniz:
Docker Swarm modu, hizmetlerin Docker ana makine kümesi genelinde orkestrasyonlu dağıtımını sağlar. Bu orkestrasyonun kritik bir parçası da, farklı düğümlerde çalışan hizmetlerin birbiriyle sorunsuz ve güvenli şekilde iletişim kurmasını sağlayan ağ katmanıdır.
Swarm farkındalığı olan ağ mimarileri
Docker Swarm, Docker’ın yerel kümeleme çözümüdür; Docker ana makinelerinden oluşan bir havuzu tek bir sanal motora dönüştürür. Konteynerleri dağıtık hizmetler olarak dağıtıp yönetmenizi sağlar. En büyük güçlerinden biri, farklı makinelerdeki hizmetlerin aynı ana makinedeymiş gibi iletişim kurmasına olanak tanıyan çok ana makineli ağ iletişimidir.
Swarm ağı iki ana trafik türünü destekler:
Kontrol düzlemi trafiği – Docker düğümleri arasındaki şifreli yönetim iletişimi.
Veri düzlemi trafiği – konteynerden konteynere iletişim ve harici hizmet erişimi.
Swarm, düğümler arası hizmet iletişimini desteklemek için overlay ağları ve harici trafiği hizmet kopyaları arasında yük dengelemek için yönlendirme ağı (routing mesh) kullanır.
Swarm ağları oluşturma
Hizmet keşfini ve güvenli çok ana makineli iletişimi desteklemek için Docker Swarm, kapsamı swarm olan overlay ağları kullanır. Bunlar, hizmetler başlatıldığında manuel veya otomatik olarak oluşturulabilir.
--opt encrypted konteyner trafiği için IPSEC şifrelemesini etkinleştirir.
--scope swarm swarm modunda overlay sürücüsüyle otomatik olarak uygulanır.
--scope ve --attachable Bayraklarını Anlama
--scope swarm: Ağın swarmdaki tüm düğümler genelinde kullanılabilir olduğunu belirtir. Bu ağı yalnızca swarm hizmetleri (bağımsız konteynerler değil) kullanabilir; --attachable belirtilmedikçe.
--attachable: Bağımsız konteynerlerin swarm kapsamlı bir ağa katılmasına izin verir. Hata ayıklama veya geçici erişim için kullanışlıdır.
Bu, hizmetlere ek olarak normal konteynerleri de bir swarm ağına eklemenize olanak tanır.
Ağ Yapılandırması ve Doğrulama
Docker ağlarınızın doğru yapılandırıldığından emin olmanız gerekir; böylece konteynerler arasında düzgün iletişim kurulur, gerekli güvenlik sağlanır ve hizmetler performanslı olur. Docker, ağ yapılandırmalarını gözden geçirmek, sorun gidermek ve doğrulamak için çeşitli araç ve komutlar sunar.
Ağ yapılandırması doğrulama
Herhangi bir Docker ağının yapılandırma ayrıntılarını incelemek için docker network inspect komutunu kullanın. Ayrıntılı JSON çıktısı alırsınız; bu çıktı şunları içerir:
Ağ sürücüsü (bridge, overlay, vb.)
Alt ağ ve ağ geçidi yapılandırması
Kapsam (local, swarm)
Bağlı konteynerler ve IP adresleri
Dahili veya harici erişim
Sürücüye özgü seçenekler (örn. overlay ağlar için VXLAN kimlikleri)
"Driver": İstenen ağ türünün oluşturulduğunu doğrular.
"IPAM": Özel alt ağlar veya ağ geçitleri dahil IP adres yönetimi ayarlarını doğrular.
"Containers": Hangi konteynerlerin bağlı olduğunu ve atanan IP’lerini gösterir.
"Options": Şifreleme (encrypted: true) veya MTU boyutu gibi gelişmiş yapılandırmaları gösterir.
Doğrulama Teknikleri
Ağınızın beklendiği gibi çalıştığını doğrulamak için:
Önce IPAM yapılandırmasını doğrulayın Docker network inspect çıktısındaki "IPAM" bölümünü kontrol edin. Alt ağ ve ağ geçidinin hedeflediğiniz kurulumla eşleştiğinden emin olun. Yanlış yapılandırılmış alt ağlar, bağlantı sorunlarına veya IP çakışmalarına yol açabilir.
Sonra VXLAN tanımlayıcılarını kontrol edin (yalnızca Overlay) Overlay ağlar, birden çok ana makine genelinde konteyner trafiğini kapsüllemek için VXLAN kullanır. "Options" bölümünde şu anahtarları inceleyin:
Bu, VXLAN tünelinin etkin ve doğru yapılandırıldığını doğrular. Eksikse veya yanlışsa, hizmetler düğümler arası erişilebilir olmayabilir.
Son olarak, konteynerler arası bağlantıyı test edin Bir konteynerden, diğerine konteyner adı veya IP’siyle ping atmayı ya da erişmeyi deneyin. Bu, DNS çözümlemenin ve dahili yönlendirmenin çalıştığını doğrular:
Kullanıcı tanımlı ağlara bağlı konteynerler, Docker’ın gömülü DNS sunucusunu kullanır. Doğrulamak için konteyner içindeki /etc/resolv.conf dosyasını inceleyin ve hizmet adlarının çözümlemesini test edin.
Ağ geçidi yönlendirmesini doğrulayın
Birden fazla ağda bulunan konteynerler için Docker, varsayılan ağ geçidini en yüksek gw-priority değerine göre seçer. Doğru yönlendirmeyi zorlamak için konteyner oluştururken açık öncelikler atayın:
$ docker run --networkname=public,gw-priority=1--network private mycontainerAltyapı:
Günlükleri ve tanılama araçlarını kullanın
Bağlantı hataları için konteyner günlüklerini izleyin ve düşük seviyeli hata ayıklama için konteyner içinde curl, dig ve ip a gibi araçları kullanın.
Özetle, Docker ağ yapılandırmalarınızı doğrulamak, konteynerler arasında kesintisiz iletişimi güvence altına almaya ve çok hizmetli uygulamalarda beklenmedik hataları en aza indirmeye yardımcı olur.
Ve bu da bizi bir sonraki bölüme getiriyor.
Güvenlik ve Performans Optimizasyonu
Gerçek dünyada konteyner ağları yalnızca iletişim yöntemlerini etkinleştirmekten ibaret değildir. Çoğu durumda, performansın en üst düzeye çıkarılmasını sağlarken gerekli izolasyonu da sunar. Mimarinizin güvenliğini sağlarken ve hizmet sunarken, segmentasyon ve bant genişliği verimi yardımcı olabilir.
Ağ segmentasyonu stratejileri
Ağ segmentasyonu, konteynerleştirilmiş uygulamalar için temel bir uygulama ve güvenlik yöntemidir. Konteynerleri ayrı Docker ağlarına atayarak, ön yüz, arka uç ve veritabanı gibi çapraz kesen kaygılar için segmentasyon yaparak ayrımı sağlayabilirsiniz. Bu, maruziyete ve olası saldırılara karşı proaktif risk azaltımı sunar.
İletişim sınırlarını yönetmeye yardımcı olmak için kullanıcı tanımlı ağlardan yararlanabilirsiniz. Farklı ağlardaki konteynerler, açıkça bağlamadığınız sürece birbirleriyle iletişim kuramaz. Örneğin veritabanı konteynerinizi yalnızca dahili bir ağa yerleştirirseniz, herkese açık hizmetleriniz ona doğrudan erişemez.
Yerleşik güvenlik duvarı kuralları ve kontroller
Varsayılan olarak Docker, konteynerler ile dış dünya arasındaki iletişim uç noktalarını kısıtlamak için iptables kuralları uygular.
Bu segmentasyonu genişletmenin bazı yolları şunlardır:
Varsayılan bridge ağında konteynerler arası iletişimi devre dışı bırakma:
Bunu Docker daemon’unun daemon.json dosyasına ekleyin; böylece aynı kullanıcı tanımlı ağda olmadıkça konteynerler iletişim kuramaz.
Yetenekleri ve ayrıcalıkları sınırlama: --cap-drop, --read-only ve --no-new-privileges gibi bayrakları kullanın.
Swarm modunda overlay ağları kullanma: Birden çok ana makine genelinde şifreli, kapsamlı hizmet iletişimleri için.
Performans Optimizasyonu Teknikleri
Docker ile çeşitli yollarla performansı iyileştirebilirsiniz.
Ağ bant genişliğini artırma
Doğru ağ sürücüsünü seçmek, performansı doğrudan etkiler. Örneğin:
Düşük gecikme ve yüksek bant genişliği gerekliyse ve ağ izolasyonu öncelik değilse host sürücüsünü kullanın.
Yerel, izole ortamlar için bridge’i tercih edin.
Konteynerlerin ağınızda fiziksel aygıt gibi davranması gerektiğinde macvlan kullanın.
Varsayılan bridge ağını aşırı yüklemekten kaçının; yoğun hizmetler veya mantıksal gruplamalar için ayrı ağlar oluşturun.
iperf3 ve metriklerle performans profilleme
Ağ performansını ölçmek için iperf3 gibi profilleme araçlarını kullanın:
# Start server in container1docker run -it--rm--name server --network my-net networkstatic/iperf3 -s# Run client in container2docker run -it--rm--network my-net networkstatic/iperf3 -c serverAltyapı:
Ayrıca ağ istatistiklerini şu yollarla izleyebilirsiniz:
docker stats – Gerçek zamanlı CPU, bellek ve ağ G/Ç’si.
Prometheus + cAdvisor – Zaman serisi metrikleri ve uzun vadeli izleme için.
Konteyner içinden /proc/net/dev metriklerini dışa aktaran özel betikler veya ajanlar.
Düzenli profilleme, darboğazları erken saptamaya ve konteyner yerleşimi, sürücü seçimi veya ana makine ağı yükseltmeleriyle ilgili kararlara rehberlik etmeye yardımcı olur.
Ağ Sorunlarını Giderme
En iyi uygulamalara rağmen ağ sorunları ortaya çıkabilir. Bunları hızla teşhis edip çözmek, hizmet çalışma süresini korumak için kritiktir. Bu bölüm, yaygın Docker ağı sorunlarını belirlemek ve gidermek için araçlar ve teknikler sunar.
Ağ problemlerini teşhis etme
Minimal bir konteynerde ping, dig veya netstat gibi araçlar bulunmayabilir; bu da sorun gidermeyi zorlaştırır. Konteyneri değiştirmek yerine, onun ağ ad alanını paylaşan yeni bir konteyner başlatın:
docker run -it--network container:my-container alpineAltyapı:
Alternatif olarak, tanılama araçlarıyla dolu özel amaçlı bir imaj olan nicolaka/netshoot’u kullanın:
docker run -it--rm--network container:my-container nicolaka/netshootAltyapı:
ip, nslookup, netstat ve traceroute gibi araçlar yönlendirme veya DNS sorunlarını belirlemeye yardımcı olacaktır.
Bağlantı sorunlarını çözme
Yaygın bazı nedenler ve çözümleri:
DNS çözümleme hataları: Docker’ın gömülü DNS’inden yararlanmak için konteynerin kullanıcı tanımlı bir ağda olduğundan emin olun. /etc/resolv.conf dosyasını kontrol edin ve ad çözümlemesini dig veya nslookup ile test edin.
MTU uyumsuzlukları: Farklı ağlar veya ana makinelerdeki konteynerler, uyumsuz MTU’lar nedeniyle paket düşmeleri yaşayabilir. Tünelleme kullanılıyorsa overlay ağlarda MTU’yu düşürün:
Docker ağları arasında veya ana makinenizin fiziksel ağlarıyla çakışan alt ağlardan kaçının. Çakışmayan aralıkları tanımlamak için --subnet kullanın.
Ana makine güvenlik duvarı tarafından engellenen portlar
Gerekli Docker portlarının açık olduğundan emin olun:
2377 (Swarm yönetimi)
7946 TCP/UDP (konteyner keşfi)
4789 UDP (overlay verisi)
Etkili sorun giderme, tanılama ile konteynerlerin ağlarıyla nasıl etkileştiğine dair sağlam bir anlayışı birleştirir. Doğru araç ve yaklaşımla çoğu sorun dakikalar içinde izole edilip çözülebilir.
Sonuçlar
Docker Ağları, ister tek bir ana makinede ister dağıtık bir küme genelinde çalışsın, hizmetler arasında güvenli, verimli ve ölçeklenebilir iletişimi mümkün kılan konteyner mimarilerinin temel bir bileşenidir.
Çeşitli ağ sürücüleri için yerleşik destek, özelleştirilebilir IP yönetimi ve Swarm’a özgü overlay ağları ile Docker; geliştiricilerin ve DevOps ekiplerinin iş yüklerini izole etmesine, veri akışını kontrol etmesine ve karmaşık ortamlarda performansı optimize etmesine olanak tanır.
Tek bedene uyan bir çözüm değildir; ancak bilinçli kullanıldığında modern mikro hizmetler, otomasyon hatları ve güvenli dağıtık sistemler inşa etmek için güçlü yetenekler sunar.
Docker ve konteynerleştirme becerilerinizi geliştirmeye devam etmek ister misiniz?
Öğrenme yolculuğunuza devam etmek için şiddetle önerilen bazı kaynaklar:
Docker network create komutu ne için kullanılır? ⌄
Konteynerlerin güvenli ve verimli şekilde iletişim kurmasını sağlayan özel Docker ağlarını tanımlamak ve yapılandırmak için kullanılır.
Başlıca Docker ağ sürücüleri nelerdir?⌄
Başlıca sürücüler bridge, host, none, overlay, macvlan ve ipvlan’dır; her biri farklı izolasyon ve bağlantı düzeyleri sunar.
Docker’da overlay ağı ne zaman kullanmalıyım?⌄
Overlay ağlar, özellikle Docker Swarm veya Kubernetes ortamlarında çok ana makineli iletişim için idealdir.
Bir Docker ağının doğru yapılandırıldığını nasıl doğrularım?⌄
Docker network inspect kullanın, IPAM ve VXLAN ayarlarını kontrol edin ve ping veya DNS araçlarıyla konteyner bağlantısını test edin.
Docker ağ sorunlarını teşhis etmeye hangi araçlar yardımcı olur? ⌄
nicolaka/netshoot, dig, nslookup, iperf3 ve konteyner günlükleri gibi araçlar; DNS hataları veya MTU uyumsuzlukları gibi yaygın sorunları gidermeye yardımcı olur.
Josep, Avrupa projelerine odaklanan serbest bir Veri Bilimcidir; veri depolama, işleme, ileri analitik ve etkili veri hikâyeleştirme konularında uzmandır.
Eğitmen olarak Navarra Üniversitesi'nin Yüksek Lisans programında Büyük Veri dersleri vermekte ve Medium, KDNuggets ve DataCamp gibi platformlarda yayımladığı makalelerle görüşlerini paylaşmaktadır. Josep ayrıca Databites bülteninde (databites.tech) Veri ve Teknoloji üzerine yazmaktadır.
Katalonya Politeknik Üniversitesi'nden Mühendislik Fiziği lisans derecesine ve Pompeu Fabra Üniversitesi'nden Akıllı Etkileşimli Sistemler yüksek lisans derecesine sahiptir.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Docker'a giriş yapın ve veri uzmanlarının araç setinde Docker'ın önemini keşfedin. Docker konteynerleri, görüntüler ve daha fazlası hakkında bilgi edinin.
Ağ, konteynerleştirilmiş uygulamaların temel konseptidir. Tüm konteynerlerin, ana sistemlerin ve harici hizmetlerin sorunsuz iletişim kurmasını sağlar. Docker’ın yerleşik ağ özellikleri, hizmetleri etkili biçimde izole etmek, veri akışını güvenceye almak ve ölçeklenebilir mikro hizmet mimarilerini orkestre etmek için hayati öneme sahiptir.
Bu bağlamdaki en güçlü araçlardan biri, uygulama ihtiyaçlarınıza özel ağlar tanımlamanıza olanak tanıyan Docker network create komutudur; DevOps mühendisleri ve geliştiriciler için vazgeçilmezdir.
Bu nedenle bugün, bu Docker ağlarını adım adım nasıl oluşturup etkin biçimde yöneteceğinizi anlatacağım.
Docker’a yeniyseniz, uygulamalı deneyim kazanmak için mutlaka Docker ve Kubernetes ile Konteynerleştirme ve Sanallaştırma beceri yolumuzu inceleyin.
Docker Ağları Nedir?
Modern uygulamalar genellikle, ayrı ve izole konteynerlerde çalışan birden çok hizmet kullanılarak inşa edilir. Docker ağları, altyapıdan bağımsız olarak seçtiğiniz ağ modeline göre bu konteynerleri birbirine ve harici sistemlere bağlamak için esnek ve güçlü bir yol sunar.
Bu bölüm, Docker’ın kilit bir bileşeni olan ağlara dair temel bilgileri ve uygulamanız için hangi ağ yapılandırmasının uygun olacağını nasıl değerlendireceğinizi aktaracaktır. Ancak başlamadan önce, Docker’a tamamen yeniyseniz, Docker ağlarına daha derinlemesine dalmadan önce sağlam bir temel oluşturmak amacıyla Introduction to Docker kursuna göz atmanızı önemle tavsiye ederim.
Ağ sürücüleri: Docker ağlarının temeli
Docker, konteynerlerin nasıl bağlanıp iletişim kuracağını belirtmek için ağ sürücülerini kullanır. Her sürücü, konteyner ağ iletişimini nasıl yöneteceğini tanımlar. Sonuç olarak, Docker’ın ana ağ sürücülerinin her biri için performans, izolasyon ve karmaşıklık düzeyleri farklıdır.
Temel Docker ağ sürücülerine genel bakış
Docker’ın desteklediği başlıca yerleşik sürücüler şunlardır:
Her sürücü, konteynerlerin birbirleriyle, ana makineyle ve harici ağlarla nasıl etkileşeceğini etkiler.
Bu ağ türlerinin birlikte nasıl çalıştığını merak ediyor musunuz? Intermediate Docker kursumuz Docker ağları, birimler ve Compose’u uygulamalı ayrıntılarla ele alır. Bu farkları anlamak, güvenli ve yüksek performanslı mimariler tasarlamanın anahtarıdır.
Hangi ağ türünü kullanmalıyım?
Doğru ağ sürücüsünü seçmek, uygulamanızın mimarisi ve operasyonel hedeflerinize bağlıdır:
Ağ sürücüsü seçerken ana makine topolojisi, güvenlik ihtiyaçları ve ölçekleme stratejisi gibi faktörleri değerlendirin.
Hâlâ iş yükünüze en uygun ağı seçmeye mi çalışıyorsunuz? Gerçek dağıtımlarda Docker ile Kubernetes’in nasıl karşılaştırıldığını bu Kubernetes vs Docker rehberiyle öğrenin.
Özel Docker Ağları Oluşturma
Özel Docker ağları, konteynerlerin birbirleriyle ve harici sistemlerle nasıl iletişim kuracağını kontrol etmenize olanak tanır; bu da hizmetleri daha iyi izole etmenize, öngörülebilir IP’ler atamanıza veya mimarinizi performans ya da güvenlik için tasarlamanıza yardımcı olur.
Bu bölüm, özel Docker ağları oluşturma sürecinde temel bilgilerden daha gelişmiş özelliklere kadar, komutlar ve özel IP yapılandırmaları dahil olmak üzere sizi yönlendirecektir.
Temel komut yapısı
Özel bir ağ oluşturmak için docker network create komutunu kullanın. Bu komut, konteyner iletişimini daha iyi kontrol etmek için ağ sürücüsünü, alt ağı ve diğer seçenekleri tanımlamanıza imkan tanır.
Varsayılan bridge sürücüsünü kullanan basit bir örnek:
Bu komut, demo-network adlı bir bridge ağı oluşturur. Docker, onay olarak benzersiz bir ağ kimliği döndürür. Bu noktada ağ mevcuttur ancak henüz herhangi bir konteynere bağlı değildir.
Mevcut ağları görüntülemek için:
Bir konteyneri yeni ağınıza bağlamak için --network bayrağını kullanın:
Var olan bir konteyneri bir ağa eklemek için:
Ve çıkarmak için:
Son olarak, ağa artık ihtiyaç kalmadığında kaldırabilirsiniz:
Kullanılmayan tüm ağları temizlemek için:
Gelişmiş IP adres yönetimi
Daha büyük sistemlerle veya belirli ağ politikalarıyla çalışırken Docker, özel ağlar içinde IP adres aralıklarını manuel olarak yönetmenize izin verir.
--subnetve--gatewaybayraklarını kullanarak bir alt ağ ve ağ geçidi tanımlayabilirsiniz:Daha da fazla kontrol için şunları kullanın:
--ip-range: Konteynerlerin dinamik olarak alabileceği, tam alt ağ aralığından ayrı bir IP havuzu atayın.--aux-address: Alt ağ içinde harici sistemler veya dokümantasyon amacı için belirli IP adreslerini ayırın.Örneğin:
Bu kurulum:
Daha rehberli örneklere ihtiyaç duyarsanız, Yeni Başlayandan İleri Düzeye 10 Docker Proje Fikri yazısındaki gelişmiş kurulum stratejilerini keşfedebilirsiniz.
Swarm Modu Ağları
Docker Swarm modu, hizmetlerin Docker ana makine kümesi genelinde orkestrasyonlu dağıtımını sağlar. Bu orkestrasyonun kritik bir parçası da, farklı düğümlerde çalışan hizmetlerin birbiriyle sorunsuz ve güvenli şekilde iletişim kurmasını sağlayan ağ katmanıdır.
Swarm farkındalığı olan ağ mimarileri
Docker Swarm, Docker’ın yerel kümeleme çözümüdür; Docker ana makinelerinden oluşan bir havuzu tek bir sanal motora dönüştürür. Konteynerleri dağıtık hizmetler olarak dağıtıp yönetmenizi sağlar. En büyük güçlerinden biri, farklı makinelerdeki hizmetlerin aynı ana makinedeymiş gibi iletişim kurmasına olanak tanıyan çok ana makineli ağ iletişimidir.
Swarm ağı iki ana trafik türünü destekler:
Swarm, düğümler arası hizmet iletişimini desteklemek için overlay ağları ve harici trafiği hizmet kopyaları arasında yük dengelemek için yönlendirme ağı (routing mesh) kullanır.
Swarm ağları oluşturma
Hizmet keşfini ve güvenli çok ana makineli iletişimi desteklemek için Docker Swarm, kapsamı
swarmolan overlay ağları kullanır. Bunlar, hizmetler başlatıldığında manuel veya otomatik olarak oluşturulabilir.Swarm kapsamlı bir overlay ağı şöyle oluşturulur:
Bu ağ tek bir ana makineyle sınırlı değildir; swarma katılan herhangi bir düğüm bu ağa konteyner bağlayabilir. Şu komutla inceleyebilirsiniz:
Overlay Ağları Özelleştirme
Overlay ağları şu gibi gelişmiş yapılandırmaları destekler:
--subnetve--gatewayağ topolojisini tanımlar.--opt encryptedkonteyner trafiği için IPSEC şifrelemesini etkinleştirir.--scope swarmswarm modunda overlay sürücüsüyle otomatik olarak uygulanır.--scope ve --attachable Bayraklarını Anlama
--scope swarm: Ağın swarmdaki tüm düğümler genelinde kullanılabilir olduğunu belirtir. Bu ağı yalnızca swarm hizmetleri (bağımsız konteynerler değil) kullanabilir;--attachablebelirtilmedikçe.--attachable: Bağımsız konteynerlerin swarm kapsamlı bir ağa katılmasına izin verir. Hata ayıklama veya geçici erişim için kullanışlıdır.Örneğin:
Bu, hizmetlere ek olarak normal konteynerleri de bir swarm ağına eklemenize olanak tanır.
Ağ Yapılandırması ve Doğrulama
Docker ağlarınızın doğru yapılandırıldığından emin olmanız gerekir; böylece konteynerler arasında düzgün iletişim kurulur, gerekli güvenlik sağlanır ve hizmetler performanslı olur. Docker, ağ yapılandırmalarını gözden geçirmek, sorun gidermek ve doğrulamak için çeşitli araç ve komutlar sunar.
Ağ yapılandırması doğrulama
Herhangi bir Docker ağının yapılandırma ayrıntılarını incelemek için docker network inspect komutunu kullanın. Ayrıntılı JSON çıktısı alırsınız; bu çıktı şunları içerir:
bridge,overlay, vb.)local,swarm)Örneğin şöyle yapabilirsiniz:
Şu ana alanlara bakın:
Doğrulama Teknikleri
Ağınızın beklendiği gibi çalıştığını doğrulamak için:
Bu, VXLAN tünelinin etkin ve doğru yapılandırıldığını doğrular. Eksikse veya yanlışsa, hizmetler düğümler arası erişilebilir olmayabilir.
DNS davranışını kontrol edin
Kullanıcı tanımlı ağlara bağlı konteynerler, Docker’ın gömülü DNS sunucusunu kullanır. Doğrulamak için konteyner içindeki /etc/resolv.conf dosyasını inceleyin ve hizmet adlarının çözümlemesini test edin.
Ağ geçidi yönlendirmesini doğrulayın
Birden fazla ağda bulunan konteynerler için Docker, varsayılan ağ geçidini en yüksek gw-priority değerine göre seçer. Doğru yönlendirmeyi zorlamak için konteyner oluştururken açık öncelikler atayın:
Günlükleri ve tanılama araçlarını kullanın
Bağlantı hataları için konteyner günlüklerini izleyin ve düşük seviyeli hata ayıklama için konteyner içinde curl, dig ve ip a gibi araçları kullanın.
Özetle, Docker ağ yapılandırmalarınızı doğrulamak, konteynerler arasında kesintisiz iletişimi güvence altına almaya ve çok hizmetli uygulamalarda beklenmedik hataları en aza indirmeye yardımcı olur.
Ve bu da bizi bir sonraki bölüme getiriyor.
Güvenlik ve Performans Optimizasyonu
Gerçek dünyada konteyner ağları yalnızca iletişim yöntemlerini etkinleştirmekten ibaret değildir. Çoğu durumda, performansın en üst düzeye çıkarılmasını sağlarken gerekli izolasyonu da sunar. Mimarinizin güvenliğini sağlarken ve hizmet sunarken, segmentasyon ve bant genişliği verimi yardımcı olabilir.
Ağ segmentasyonu stratejileri
Ağ segmentasyonu, konteynerleştirilmiş uygulamalar için temel bir uygulama ve güvenlik yöntemidir. Konteynerleri ayrı Docker ağlarına atayarak, ön yüz, arka uç ve veritabanı gibi çapraz kesen kaygılar için segmentasyon yaparak ayrımı sağlayabilirsiniz. Bu, maruziyete ve olası saldırılara karşı proaktif risk azaltımı sunar.
İletişim sınırlarını yönetmeye yardımcı olmak için kullanıcı tanımlı ağlardan yararlanabilirsiniz. Farklı ağlardaki konteynerler, açıkça bağlamadığınız sürece birbirleriyle iletişim kuramaz. Örneğin veritabanı konteynerinizi yalnızca dahili bir ağa yerleştirirseniz, herkese açık hizmetleriniz ona doğrudan erişemez.
Yerleşik güvenlik duvarı kuralları ve kontroller
Varsayılan olarak Docker, konteynerler ile dış dünya arasındaki iletişim uç noktalarını kısıtlamak için iptables kuralları uygular.
Bu segmentasyonu genişletmenin bazı yolları şunlardır:
daemon.jsondosyasına ekleyin; böylece aynı kullanıcı tanımlı ağda olmadıkça konteynerler iletişim kuramaz.--cap-drop,--read-onlyve--no-new-privilegesgibi bayrakları kullanın.Performans Optimizasyonu Teknikleri
Docker ile çeşitli yollarla performansı iyileştirebilirsiniz.
Ağ bant genişliğini artırma
Doğru ağ sürücüsünü seçmek, performansı doğrudan etkiler. Örneğin:
Varsayılan bridge ağını aşırı yüklemekten kaçının; yoğun hizmetler veya mantıksal gruplamalar için ayrı ağlar oluşturun.
iperf3 ve metriklerle performans profilleme
Ağ performansını ölçmek için iperf3 gibi profilleme araçlarını kullanın:
Ayrıca ağ istatistiklerini şu yollarla izleyebilirsiniz:
docker stats– Gerçek zamanlı CPU, bellek ve ağ G/Ç’si./proc/net/devmetriklerini dışa aktaran özel betikler veya ajanlar.Düzenli profilleme, darboğazları erken saptamaya ve konteyner yerleşimi, sürücü seçimi veya ana makine ağı yükseltmeleriyle ilgili kararlara rehberlik etmeye yardımcı olur.
Ağ Sorunlarını Giderme
En iyi uygulamalara rağmen ağ sorunları ortaya çıkabilir. Bunları hızla teşhis edip çözmek, hizmet çalışma süresini korumak için kritiktir. Bu bölüm, yaygın Docker ağı sorunlarını belirlemek ve gidermek için araçlar ve teknikler sunar.
Ağ problemlerini teşhis etme
Minimal bir konteynerde ping, dig veya netstat gibi araçlar bulunmayabilir; bu da sorun gidermeyi zorlaştırır. Konteyneri değiştirmek yerine, onun ağ ad alanını paylaşan yeni bir konteyner başlatın:
Sonra ağ araçlarını kurun:
Alternatif olarak, tanılama araçlarıyla dolu özel amaçlı bir imaj olan nicolaka/netshoot’u kullanın:
ip, nslookup, netstat ve traceroute gibi araçlar yönlendirme veya DNS sorunlarını belirlemeye yardımcı olacaktır.
Bağlantı sorunlarını çözme
Yaygın bazı nedenler ve çözümleri:
Çakışan alt ağlar
Docker ağları arasında veya ana makinenizin fiziksel ağlarıyla çakışan alt ağlardan kaçının. Çakışmayan aralıkları tanımlamak için
--subnetkullanın.Ana makine güvenlik duvarı tarafından engellenen portlar
Gerekli Docker portlarının açık olduğundan emin olun:
Etkili sorun giderme, tanılama ile konteynerlerin ağlarıyla nasıl etkileştiğine dair sağlam bir anlayışı birleştirir. Doğru araç ve yaklaşımla çoğu sorun dakikalar içinde izole edilip çözülebilir.
Sonuçlar
Docker Ağları, ister tek bir ana makinede ister dağıtık bir küme genelinde çalışsın, hizmetler arasında güvenli, verimli ve ölçeklenebilir iletişimi mümkün kılan konteyner mimarilerinin temel bir bileşenidir.
Çeşitli ağ sürücüleri için yerleşik destek, özelleştirilebilir IP yönetimi ve Swarm’a özgü overlay ağları ile Docker; geliştiricilerin ve DevOps ekiplerinin iş yüklerini izole etmesine, veri akışını kontrol etmesine ve karmaşık ortamlarda performansı optimize etmesine olanak tanır.
Tek bedene uyan bir çözüm değildir; ancak bilinçli kullanıldığında modern mikro hizmetler, otomasyon hatları ve güvenli dağıtık sistemler inşa etmek için güçlü yetenekler sunar.
Docker ve konteynerleştirme becerilerinizi geliştirmeye devam etmek ister misiniz?
Öğrenme yolculuğunuza devam etmek için şiddetle önerilen bazı kaynaklar: