Docker Network Driver Tipleri
5 min read

Docker Network Driver Tipleri

Docker Network, containerlar arasında haberleşmeyi sağlamak için kullanılan önemli bir araçtır.
Docker Network Driver Tipleri
Photo by Jerome Monta / Unsplash

Docker, containerların bağlantısını sağlamak için birçok araç sunar. Bu araçlar arasında en önemlilerinden biri "Docker Network" olmaktadır. Docker Network, containerlar arasında haberleşmeyi sağlamak için kullanılır. Bu sayede containerlar, aynı ağ üzerinde oldukları takdirde birbirleriyle haberleşebilirler.

Docker network, Docker container'ları arasında ağ bağlantısı kurmanıza olanak sağlar. Docker, container'lar için farklı ağ tiplerini destekler. Bu ağ tipleri, container'ların birbirleriyle nasıl iletişim kuracağını belirler. Docker network tipleri şunlardır:

  • bridge
  • host
  • none
  • overlay
  • macvlan
  • ipvlan

Şimdi bu network tiplerinden en çok kullanılanların detaylarını inceleyelim.

1. Bridge Driver

Bridge newtork tipi, Docker container'larının bulunduğu host'a bağlı olan bir ağ oluşturur. Bu ağ üzerinden container'lar birbirleriyle iletişim kurabilir ve host'un ağ bağlantısını kullanarak dış ağlara da bağlanabilir. Bu ağ çeşidini kullanarak, container'ların host'a bağlı bir ağda çalışmasını sağlayabilirsiniz.

Docker bridge network tipi
💡
Bridge network tipi, varsayılandır ve "docker0" isimli adapter ile oluşturulur.

Eğer yeni bir bridge tipinde network oluşturursanız, belirlediğiniz isimde yeni bir adapter da oluşturulur. Ve tüm bridge networkler birbirleriyle izolasyon sağlarlar.

🦄
Default bridge network olan docker0 hariç, kendi oluşturduğunuz bridge network'e eklenen tüm container'lar IP adresi yerine container isimleriyle birbirleriyle haberleşebilirler. Örneğin odin isimli container da ping loki komutu başarıyla çalışır.

2. Host Driver

Host newtork tipi, Docker container'larının bulunduğu host'un ağına direkt olarak bağlanmasını sağlar. Bu ağ çeşidini kullanarak, container'lar host'un ağına direkt olarak bağlanarak iletişim kurabilir. Bu sayede, container'lar host'un ağını kullanarak dış ağlara da bağlanabilir.

Docker host network tipi

Host network'üne atanan containerlar, tıpkı o host cihazına kurulmuş bir uygulama gibi çalışır. Bu containerlar için herhangi bir port expose etmenize gerek kalmaz ve host makinasının IP adresi ile containerlarınıza bağlanabilirsiniz.

3. None Driver

None newtork tipi, Docker container'larına hiçbir ağ bağlantısı sağlamaz. Bu ağ çeşidini kullanarak, container'ların ağ bağlantısını kesebilir ve container'ların ağ üzerinden iletişim kurmasını engelleyebilirsiniz.

Docker none network tipi

4. Overlay Driver

Overlay network tipi, birden fazla Docker daemon arasında ağ bağlantılarını sağlamak için kullanılan bir ağ türüdür. Bu tür ağlar, Docker swarm modunda çalışan veya birden fazla fiziksel makine arasında yayılmış olan containerlar arasında iletişimi sağlar. Overlay network, containerların fiziksel makine sınırlarını aşmasını ve böylece birbirleriyle doğrudan iletişim kurmasını sağlar. Bu, containerlar arasında daha esnek ve skalable bir ağ topolojisi oluşturmasına olanak tanır.

5. MacVLAN Driver

MacVLAN network, Docker containerlarının yerel ağdaki gerçek IP adresleri kullanarak iletişim kurmasını sağlar. Bu tür ağlar, containerların gerçek ağda yer alan diğer cihazlar gibi görünmelerini ve aynı zamanda host makine ve diğer containerlar arasında iletişim kurmalarını sağlar. Bu tür ağlar, containerların yerel ağda gerçek bir fiziksel cihaz gibi davranmalarını sağlar ve böylece özellikle, üretim ortamlarında kullanılması düşünülen uygulamalar için uygun hale gelir.

Docker macVLAN network tipi
🔎
MacVLAN network kullanan containerların hem kendi IP adresleri hem de farklı MAC adresleri vardır.

6. IPVLAN Driver

IPVLAN ağlar, MacVLAN ağlarına benzer şekilde çalışır ancak IPVLAN aracılığıyla containerların yerel ağda gerçek bir cihaz gibi davranması sağlanırken MacVLAN ağları aracılığıyla containerlar yerel ağda gerçek bir mac adresi kullanır.

📍
Yani, IPVLAN containerlar kendi IP adreslerini kullanırken, host cihazının ortak MAC adresini kullanırlar. MacVLAN network kullanan containerlar da ise her biri ayrı bir MAC adresine sahip olur.

1. Docker Network Nasıl Oluşturulur?

Docker Network, iki çeşit şekilde oluşturulabilir:

  1. Docker CLI aracılığıyla
  2. Docker Compose aracılığıyla

1.1. Docker CLI Aracılığıyla Network Oluşturmak

Docker Network oluşturmak için Docker CLI aracılığıyla kullanabileceğiniz komutlar şunlardır:

docker network create [NETWORK_NAME]

Bu komut, belirtilen isimde yeni bir ağ oluşturur. Network tipi belirtmeden oluşturduğunuz ağlar varsayılan olarak bridge tipini kullanırlar.

docker network create --driver host [NETWORK_NAME]

Eğer oluşturacağınız ağın tipini değiştirmek istiyorsanız --driver parametresi ile ap tipini belirleyebilirsiniz.

docker network ls

Bu komut, oluşturulmuş olan tüm ağları listeler.

docker network inspect [NETWORK_NAME]

Bu komut, belirtilen ağ hakkında detaylı bilgi verir.

docker network rm [NETWORK_NAME]

Bu komut, belirtilen ağı siler.

Ayrıca, network oluştururken IP aralıklarını kendiniz tanımlayabilirsiniz. Aşağıdaki örnek --subnet, --ip-range ve --gateway parametrelerini kullanarak özel bir ağ oluşturur.

docker network create --driver bridge --subnet=10.0.0.0/24 --ip-range=10.0.0.0/28 --gateway=10.0.0.1 [NETWORK_NAME]

1.2. Docker Compose Aracılığıyla Network Oluşturmak

Docker Compose aracılığıyla oluşturulan ağlar, docker-compose.yml dosyası içerisinde tanımlanır. Aşağıda, docker-compose.yml dosyası içerisinde ağ tanımlaması yapılmış bir örnek veriyorum:

version: '3'

networks:
  mynet:
    driver: bridge

Bu örnekte, mynet isminde bir ağ tanımlanmıştır ve ağ tipi olarak bridge kullanılmıştır. Bu ağ, docker-compose up komutu ile oluşturulur ve containerlar, bu ağ üzerinde çalışırlar.

2. Bir Container Docker Network'e Nasıl Eklenir ve  Çıkarılır?

Bir container Docker network'e eklemek için, "docker network connect" komutu kullanılır. Örneğin, aşağıdaki komut "my_network" adlı network'e "my_container" adlı container'ı ekler:

docker network connect my_network my_container

Ayrıca run komutunun sırasında --network parametresi ile container oluşturulurken aynı anda network'e eklenebilir. Örnek olarak :

docker run --network=my_network -it --name my_container ubuntu /bin/bash

Bu komut ile "my_network" adlı network'e "my_container" adlı container oluşur ve aynı anda network'e eklenir.

Benzer şekilde, container bir network'ten çıkarılmak istenirse "docker network disconnect" komutu kullanılabilir.

docker network disconnect my_network my_container

Docker serimizin sıradaki yazısı için aşağıdaki bağlantıyla devam edebilirsiniz.

Docker Run Komutu ve Parametreleri
Docker run komutunu ve parametrelerini detaylıca inceliyoruz.