Translate This Page:
Docker networke genel bakış
Docker Platformunun en önemli özelliklerinden biri de containerların birbirinden izole çalışabilmesidir. Bu sayede sistemlerde herhangi bir sorun olduğunda sadece sorun olan yerin etkilenmesi sistemler için bir avantajdır. Containerlar Default durumda birbirinden izole (bağımsız) çalışırlar. Ancak gerçek hayatta ve production ortamlarında containerları birbiriyle iletişimde olmasını isteriz.
İşte tam bu noktada docker Networking bu sorunu çözmek için ihtiyacımız olan en basit yapıdan en esnek yapıya kadar sorunlarımıza çözümler sunuyor.
Docker containerları birbirlerine ve dış dünyaya bağlamaktır, böylece birbirleriyle iletişim kurabilirler ve Docker Host ile konuşabilirler . Docker containerları Docker platformunuzda yer almayan başka networkteki kanaklarla birbirine bağlamanıza olanak tanıyan bir yapıya sahip.
Docker, ağ iletişimi için CNM Konteyner Ağ Modelini kullanır. Bu model, birden çok ağ sürücüsü kullanan konteynerler için ağ oluşturmak için gereken adımları standart hale getirir. Böylece ister local ister cloud base bir platform kullanıyor olun container yapınızı her yerde çalıştırabilir ve her yere taşıyabilir olursunuz.
Zaten container mimarisinin ana temelide platform bağımsızlığı üzerine kurulu değllmidir !
Container Ağ Modeli (CNM)
Konteyner ağ modeli, Container networkün omurgası olarak düşünülebilir. Ağı, sürücüler (bridge, overlay, weave vb.) kullanan bir eklenti olarak uygulamak yerine, container çalışma zamanından ayrı bir kitaplık olarak tutmayı amaçlar.
CNM modelinin arkasındaki tüm felsefe budur. Birden çok ağ sürücüsünü desteklemenin yanı sıra ortak ağ oluşturmanın karmaşıklığını çeşitlendirmek için soyutlama katmanı amacına hizmet ettiğini düşünebilirsiniz. Modelin üç ana bileşeni vardır –
Korumalı alan – bir kapsayıcının ağ yığınının yapılandırmasını içerir.
- Sandbox :bir containerın ağ birimlerine bağlanmasını sağlar.
- Endpoint : Ayrılmış networke dahil eder.
- Network : birbirinden ayrı networkleri birleştirir.
Proje, GitHub’da barındırılmaktadır. CNM modeli hakkında daha fazla bilgi edinmekle ilgileniyorsanız, buradan devam etmenizi ve kapsamlı bir şekilde okumanızı tavsiye ederim.
Docker Network Driver
Ağ sürücüleri, Docker Konteynerleri için gerçek ağ uygulamalarını sağlayan takılabilir arabirimlerdir. Docker, hizmet keşfi, şifreleme, çok ana bilgisayarlı ağ iletişimi vb. gibi birçok kullanım durumu için temel ağ işlevselliği sağlayan birkaç sürücüyle birlikte gelir.
Ardından, özel kullanım durumları için 3. taraf sürücüler (eklenti sağlayıcıları tarafından) mevcuttur.Son olarak, eğer mevcut olanlar yeterli değilse, kendi özel sürücülerini bile oluşturabilirler (gerçi bu nadiren gerekli olacaktır).
5 kullanıma hazır ağ sürücüsü şunlardır:
- None
- Bridge
- Host
- Overlay
- Macvlan
hangi network sürücü kullanılacaksa, aşağıdaki gibi komut –network parametresiyle belirtilebilir.
$ docker network create --driver <dahili driver türü> network_adı
None Driver
Driver none , bir container için ağı devre dışı bırakarak onu diğer containerlarda izole eder. Bunu sanal bir makinenin network kartını disable ederek networkten ayırdığınızı düşünebilirsiniz.
Aşağıdaki komutla oluşturacağınız bir container’ı none networke dahil edebilirsiniz.
docker container run --network none alpine
Bridge Network
Bridge network (körüleme), bir container dağıttığınızda otomatik olarak oluşturulan default ağdır yani yeni bir container çalıştırığınızda eğer özellikle network belirtmediyseniz standart olarak burada oluşturulur.
Bridge network, aynı bridge networke bağlı konteynerlerin iletişim kurmasına izin veren yazılımsal bir ağdır.Bridge network, bu ağdaki konteynerlerin iletişim kurabilmesi için ana bilgisayardan izole ayrı bir network oluşturur.
Aşağıdaki komutla yeni bir bridge network yarabilirsiniz.
docker network create --driver bridge bridge_network01
Eğer oluşturacağınız networkte ip bloğunu siz belirlemek istiyorsanır aşağıdaki şekilde networkünüzü yaratabilirsiniz.
docker network create --driver=bridge --subnet=10.10.0.0/16 --ip-range=10.10.10.0/24 --gateway=10.10.10.10 bridge_network02
Oluşturduğum networkleri görüntülüyorum.
serdar@docker01:/$ docker network ls NETWORK ID NAME DRIVER SCOPE 4f6fc9e4c9f8 bridge bridge local 68a6d95e2785 bridge_network02 bridge local 0788e0210252 host host local 2b2c01b138db none null local serdar@docker01:/$
Container oluştururken network seçmek
Şimdi az önce oluşturduğum “bridge_network02 ” networküne bir container oluşturup bu ağa dahil edeceğim.
docker container run -d --network bridge_network02 alpine
Çalışan containerı başka bir networke bağlamak
docker network connect bridge_network02 <cantainerName/ID>
Çalışan containerı networkten çıkarmak
docker network disconnect bridge_network02 <cantainerName/ID>
Docker network inspect
“inspect” komutu ile docker dünyasında herhangi bir docker objesinin/bileşenin detaylarını görüntüleyebiliriz.
serdar@docker01:/$ docker network inspect bridge_network02 [ { "Name": "bridge_network02", "Id": "e2f9714562ad0bafc09d808892e6c1526b104195a75c0717ecdf471115ed7261", "Created": "2023-03-25T10:52:23.541039429+03:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "10.10.0.0/16", "IPRange": "10.10.10.0/24", "Gateway": "10.10.10.10" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ] serdar@docker01:/$
Host Network
Bu Network bağlantısı ana bilgisayar(docker host) ile bu ağa bağlı konteynerleri arasındaki tüm ağ izolasyonlarını ortadan kaldırır. yani oluşturduğunuz containerlar docker host makine ile aynı swithce bağlı gibi çalışır. host makine ile network performansı optimize etmek için yararlı olabilir .oluşturulan containerlar için herhangi bir NAT tanımı gerektirmez.
Not: host networking yalnızca Linux ana bilgisayarlarında çalışır ve Mac için Docker Desktop, Windows için Docker Desktop veya Windows Server için Docker EE’de desteklenmez.
Overlay Networking
Overlay network’ler birden fazla docker hostu birbirine bağlar ve bunlar içindeki hizmetlerin birbirleriyel haberleşmesini sağlar. Bu yapı docker swarm gibi platformlarda kullanılmaktadır.Burada öncelikli dikkat edilmesi gereken nokta, Docker engine’lerin swarm modunun cluster için etkinleştirilmesidir.
Şema-1
Şema-2
Macvlan Networking
Macvlan network’leri, bir MAC adresini container’a atamanızı sağlar böylece Container’ın ağınızda fiziksel bir cihaz olarak görünmesini sağlayabilirsiniz. Bu yöntemde Docker daemon, network trafiğini container MAC adreslerine göre yönlendirir. Bu yöntem MAC adresi gerektiren eski uygulamalarda kullanılır.
Bu yazıda docker networkü inceledik başka bir makalede görüşmek üzere.