Docker Network Drivers

Selamlar arkadaşlar, bu yazımda sizlere Docker Network Drivers hakkında bilgiler vereceğim.

Network Driver’lar, Docker Container’ların ağa nasıl bağlandığını ve iletişim kurduğunu yöneten bir bileşendir. Docker’da çeşitli ağ sürüceleri vardır ve bunlar oluşturmuş olduğumuz Container’ların birbirleriyle haberleşmesine olanak tanırlar.

Yaygın olarak kullanılan ağ sürücüleri aşağıdaki gibidir :

Bridge Driver :

Varsayılan olarak kullanılan ağ sürücüsüdür. Bu sürücü ile Containerlar kendi aralarında haberleşirken, aynı zamanda üzerinde bulundukları Host ile de haberleşirler. Her Container, Host’un alt ağına bağlı olan Docker Daemon tarafından otomatik olarak oluşturulan bu sürücüye bağlanırlar.

Host Driver :

Bu ağ ile Container’lar Docker Host’un ağına doğrudan erişim sağlarlar ve ortamınızda bulunan DHCP’den ip alırlar. Bu sayede ortamınızda bulunan diğer cihazlarla da bağlantıları olacaktır. Ancak bu yöntem ile izolasyon azalacaktır.

MacVlan Driver :

Bu sürücü ile her cihaza fiziksel bir ağ kartı varmış gibi MAC adresi ve IP Adresi verilir. Bu sayede fiziksel ağa bağlanması sağlanır. Ağ katmanında daha fazla kontrol de sağlar. Genellikle özel ağ kurulumları için kullanılırlar.

None Driver :

Bu sürücü ile Container’ın ağa bağlanma özelliği tamamen devre dışı bırakılır. Ağa ihtiyaç duymayan ve full izole edilmiş bir Container için tasarlanmıştır.

Overlay Driver :

Bu sürücü ile birden fazla Docker Host’un birbirleri arasında ağ oluşturulması ve Container’ların oluşturulan ağlar üzerinden iletişim kurmasını sağlarlar. Genel olarak Orkestrasyon araçlarıyla kullanılan ağdır.

İlk olarak Network cihazlarımızı görüntüleyelim :

> docker network ls

Komutu yardımıyla Docker cihazınızda bulunan Network Driver’larını görebilirsiniz.

> docker network inspect bridge

Komutu yardımıyla cihazınızda bulunan Network Driver’ların ayrıntılı özelliklerini görebilirsiniz. Local’de olduğu, Driver’ın bridge olduğu, subnet ve gateway, vb. ayrıntılı bilgileri görebiliriz. Ek olarak “com.docker.network.bridge.default_bridge”: “true”, yazısı kurulan Container’lara atanan Default Driver’ın bridge olduğunu gösterir. Bunu değiştirine kadar da açılan tüm Container’lara otomatik olarak atanmaktadır.

NOT : inspect komutu diğer objeler ilede kullanılabilir.

> docker container run -it --name deneme1 --net host alpine

Bu komut ile bir Container çalıştırıyoruz ve Default Network Driver’ı atanmasını istemediğimiz için –net ile host yazarak host Network Driver’ının atanamasını sağlıyoruz.

Port Publish :

İlk olarak Port Publish ettiğimizde ne işe yarayacağını anlatmak istiyorum. Oluşturmuş olduğumuz Container’larımızı dış dünyadan gelecek olan istekler ile haberleştirmek istersek bunu belirlediğimiz portlar ile Docker kurulu olan Host’un ip adresine yapılacak olan isteklerle yapıyoruz. Container’lar ise aynı şekilde dış dünyadaki sistemlerle paket göndermek ve haberleşmek isterse, paketleri direk olarak Host’un Gateway adresine gönderiyorlar ve bu şekilde iletişime geçmiş oluyorlar. Container’lar, kendi aralarında haberleşmesini ise bağlı oldukları Network Driver’ları ile sağlıyorlar.

Port Publish İşlemini yaparken ise aşağıdaki gibi komutlarımıza ekleceğimiz parametrelerle yapıyoruz.

-p host_port:container_port

Örnek vermek gerekirse : -p 8080:80 –publish 8443:443 -p 55:55/udp

Buradaki ilk portalarımız Docker’ımızın kurulu olduğu sistem üzerindeki cihazın 8080 portudur. Buraya yapılan istekler Container’ın portu olan 80 portuna yönlendirilecektir. Aynı şekilde birden fazla port Publish etmek istersek ise yan yana yazabiliriz. Port Publish işlemimizi UDP üzerinden yapacaksınız ise sonuna /udp yazmanız yeterli olacaktır.

Container’larınızın hangi portlarla başladığını görmek isterseniz; docker ps komudunu çalıştırmanız yeterli olacaktır.

> docker container run -d -p 80:80 --publish 8080:80 --name webserver httpd
> docker container ps

Yukarıdaki komutları çalıştırarak host’un 8080 portuna yapılan isteği, Container’ımın 80 portuna yönlendirmiş oldum. Bu sayede Apache bana It works! olarak çıktısını geri iletti.

Burada localhost yazmasına aldanmayın arkadaşlar örnekleri yaparken sanal cihazımın network kartından dolayı localhost’a istek yapıyorum. Siz bunu yaptığınızda Docker Host’unuzun ip adresini direk tarayıcınızdan yazın.

Docker Network Bridge : Bu kısımda sizlere Bridge Driver’ından birden fazla oluşturmayı göreceğiz.

Peki neden birden fazla Docker Network Bridge oluştururuz.
– Farklı Bridge Network’lerde olan Containerlar, birbirlerine erişemezler. Bu sayede network izolasyonu sağlanmış olacaktır.
User Defined Network (Kullanıcı tanımlı network) oluşturduğumuzda içerisindeki dns sistemi sayesinde Container Name’lerle de Container’larımız haberleşebiliyor olacaklar. Aynı zamanda IP adresleri ile de haberleşebilecekler. Default Bridge de bu özellik bulunmamaktadır.
Container’larınız çalışır durumdayken bile tanımlama yapabilmenizi sağlar ve aynı şekilde Kullanıcı Tanımlı Bridge Driver’ınızı kaldırabilirsiniz.

> docker network create new_bridge
> docker network ls
> docker network inspect new_bridge

Create komutu yardımıyla yeni bir Driver oluşturabilirsiniz, ls komutu ile listeleyebilir ve inspect komutu yardımıyla Driver’ınızın ayrıntılarını görebilirsiniz. Burada herhangi bir Subnet ve Gateway ayarlamadığımız için otomatik olarak sıradaki ip’ler atanmıştır ancak yazımın ilerilerinde bunlarıda göreceksiniz. Inspect ile ayrıntıları aldığınız zaman oluşturduğunuz Driver’a hangi Containerların bağlandığını ve IP adreslerinide bulabileceksiniz.

> docker container run -dit --name sunucu1 --net new_bridge alpine sh
> docker container run -dit --name sunucu1 --net new_bridge alpine sh
> docker attach sunucu1

İlk olarak sunucu1 ve sunucu2 adında Container’lar oluşturuyorum. Bunları –net komutu ile new_bridge adındaki Network Driver’ıma bağlıyorum. -dit’ın anlamı ise arka planda çalıştır, bunu yaparken kodun sonundaki sh shell ile bunu yap ancak tekrar komut satırına dön demek. Yani Container’lar çalışacak ancak komut satırından diğer komutlarınızı çalıştırmaya devam edeceksiniz.

Sonrasında attach komutu yardımıyla sunucularımızın tek tek shell’lerine bağlanıyorum ve oluştururken vermil olduğum sunucu1 ve sunucu2’nin ip adreslerine ping atıyorum. Bu şekilde içerideki DNS çözümünüde görmüş oluyorsunuz arkadaşlar.

En son adımda ise Container’ımı kapatmadan çıkmak için ise ctrl + p ve q tuşuna aynı anda basarak sağlıyorum.

User Defined Brdige Network’umuzu manuel olarak oluşturuyoruz :

> docker network create --driver=bridge --subnet=192.168.10.0/24 --ip-range=192.168.10.0/24 --gateway=192.168.10.1 new_ip_bridge
> docker network ls
> docker network inspect new_ip_bridge

İlk olarak create komutu ile oluşturma işlemine başladım ve –driver=bridge olduğunu belirttim. Daha sonrasında –subnet, –ip-range, –gateway komutları yardımıyla gerekli ayarlamaları sağladım ve komudumu çalıştırdım. Ardından listeleyerek oluşturduğum User Defined Bridge Network’umu listede gördüm. Daha sonrasında ise inspect ile ayrıntılı bilgilerine ulaştım.

> docker attach sunucu1
> docker network connect new_ip_bridge sunucu1
> docker attach sunucu1
> docker network disconnect new_ip_bridge sunucu1

İlk olarak oluşturduğumuz Bridge Network’leri Container’larımız çalışsada Connect edebiliriz. Aynı şekilde bağlantısı kopartıladabilir. Birden fazla Bridge Network’ü Container’ımıza bağlayadabiliriz.

> docker network ls
> docker network rm new_bridge new_ip_bridge

Oluşturduğumuz Network’leri rm komudu yardımıyla da silebiliyoruz tabi ki.

Bir yazımın daha sonuna geldim arkadaşlar. Docker Network konusunda öğrendiklerimi sizlere aktarmaya çalıştım. Sorularınız ya da görüşleriniz olması durumunda yorumlar alanından iletebilirsiniz. Destekleriniz içinde YouTube üzerinde bulunan SistemDostu kanalımı takip edebilirsiniz. Şimdiden hepinize kolay gelsin.

Bir yanıt yazın

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