What is Docker Network
Docker network, Docker container’larının birbirleriyle ve dış dünya ile nasıl haberleşeceğini belirleyen sanal ağ yapısıdır. Kısaca, Container’lar arası iletişimi ve internet erişimini yönetir.
Docker Network ne işe yarar?
- Container’ların birbirini IP veya isimle bulmasını sağlar.
- Aynı sunucudaki container’ları izole eder.
- Güvenli ve kontrollü servis iletişimi kurar.
- Port çakışmalarını azaltır.
- Mikroservis mimarisini kolaylaştırır.
Docker Network türleri ne işe yarar?
Docker network driver’ları, container’ların hangi ağ yapısını kullanacağını ve nasıl haberleşeceğini belirleyen mekanizmalardır. Temel olarak 5 tane driver gelir.
- bridge: Aynı host üzerindeki container’ların birbiriyle izole ve güvenli şekilde iletişim kurmasını sağlar
- host: Container’ın host makinenin ağını doğrudan kullanmasını sağlar. (düşük gecikme, az izolasyon)
- none: Container’ı tamamen ağdan izole eder
- overlay: Farklı Docker host’larındaki container’ların tek bir sanal ağdaymış gibi haberleşmesini sağlar
- macvlan: Container’lara fiziksel ağdan gerçek IP vererek LAN’daki cihazlar gibi davranmalarını sağlar
Network Create
Bir container oluştururken eğer network seçilmez ise varsayılan olarak bridge network dahil olunur. Docker host üzerinde çalışan container’ların özel (sanal) bir ağ üzerinden birbirleriyle haberleşmesini sağlar. Docker, Linux’ta docker0 adlı sanal bir köprü (bridge) oluşturur. ifconfig komutunu kullanarak bu network'u görebilirsiniz. Container’lar bu köprüye bağlanır ve her container’a özel bir IP atanır. (genelde 172.x.x.x)

Container’lar aynı bridge içindeyse, birbirlerine doğrudan erişebilir. Farklı bridge’ler üzerinde ise birbirlerini göremezler yani izolasyon sağlanır.
Network driverlarının detaylarını öğrenmek için yine inspect komutunu kullanabilirsiniz.
docker network inspect bridge
Aşağıdaki çıktıda hangi containerların bu network'a bağlandığını görebilirsiniz.

Aslında sistemde birden fazla bridge network var. Ancak yukarıda söylediğimiz gibi farklı bridge network oluşturduğumuz zaman containlar birbirinden izole olup erişim engellemektedir.
docker network ls
docker network inspect ozwiki_default

Aşağıdaki örnek ile custom bridge network oluşturup container’ları bu ağa nasıl dahil edeceğimizi anlatmaktadır. Bridge Network Oluşturmak için aşağıdaki komutu çalıştırın.
docker network create my_bridge
Kontrol etmek için aşağıdaki komutu kullanabilirsiniz.
docker network ls
Container’ı Bridge Network’e Dahil Etmek için --network my_bridge opsiyonunu kullanmanız yeterlidir.
docker run -d --name network_test --network my_bridge busybox sleep 3600

Connecting the Container to the Network Later
Çalışan bir containerı eklemek için aşağıdaki komutu kullanabilirsiniz.
docker network connect my_bridge container_name

Çalışan bir containerı çıkarmak için aşağıdaki komutu kullanabilirsiniz.
docker network disconnect my_bridge container_name

Host Network Create
Host network, containerın ayrı bir sanal ağ kullanmadan, doğrudan host makinenin network’ünü kullanmasıdır. Yani, Container = Host olur aynı IP, aynı network interface’leri, aynı port alanı olacaktır.
Host networkte port mapping yapılamaz. Çünkü host network kullanan container, host makinenin ağını doğrudan kullanır.
- Ayrı bir container IP’si yoktur
- NAT yoktur
- Docker araya girmez
| Özellik | bridge | host |
|---|---|---|
| IP | Container’a özel | Host ile aynı |
| Port mapping | Gerekli | Gerekmez |
| İzolasyon | Var | Yok |
| Güvenlik | Daha iyi | Zayıf |
| Performans | Normal | Yüksek |
Basit bir örnek ile daha iyi anlaşılmasını sağlayalım. Aşağıda 3000 ve 3001 numaralı portlardan yayın yapan bir uygulama ayağa kaldırıyorum. Farkındaysanız komutta port publish yapılmamış. Bunun sebebi biraz önce bahsettiğimiz --network host opsiyonu ile container ağını yalıtmadan host ile birleştirmemizdir.
docker run -d --name openspeedtest --network host openspeedtest/latest
Şimdi container içine girelim.
docker exec -it openspeedtest sh
Container içindeki network kartlarını görüntüleyelim.
ifconfig
Aşağıda görüldüğü gibi containerden farklı olarak host üzerinde bulunan tüm kartlar gözükmektedir. Yani izole olmadan host ile birebir aynı olmuştur.

None Network Create
Docker none network, bir container’ın hiçbir ağa bağlanmadan, tamamen izole şekilde çalışmasını sağlayan network sürücüsüdür.
- Container’a IP adresi atanmaz
- lo (localhost) dışında network arayüzü yoktur
- İnternete çıkamaz
- Başka container’larla haberleşemez
- Dışarıdan erişilemez, port açılmaz
- Docker’ın bridge, NAT, DNS, iptables mekanizmeleri devre dışıdır
Ne zaman kullanılır?
- Maksimum güvenlik gereken durumlarda
- Offline çalışması istenen işlemlerde
- Ağ erişimi olmaması gereken script veya batch job’larda
- Test ve izolasyon amaçlı çalışmalarda
Docker none network, container’ı tamamen ağdan izole eder. Aşağıdaki örnek ile daha iyi anlaşılmasını sağlayabiliriz. Şimdi None Network ile Container çalıştıralım.
docker run -it --name isolated --network none alpine
Aşağıda görüldüğü gibi lo (localhost) dışında hiçbir interface yok.

Bu container, IP adresi almadığı için, İnternete çıkamaz, başka container’ları göremez. Ping denemesi yaptığımız zaman başarısız olduğunu görebiliriz.
ping 8.8.8.8

Port Publish
Docker port publish, container içindeki bir servisin kullandığı portu host makinenin bir portu üzerinden dış dünyaya açma işlemidir.
- Container içindeki port → host portuna bağlanır
- Host’tan gelen trafik container’a yönlendirilir (NAT)
- Sadece bridge / custom network’lerde kullanılır
- host network’te çalışmaz
Örneğin, host’un 8888 portuna gelen istekleri, container’ın 80 portuna iletmeye çalışalım.
docker run -p 8888:80 nginx

Aşağıda gördüğünüz gibi çok basit bir şekilde bu işlemi gerçekleştirebildik.

Varsayılan olarak herhangi bir opsiyon belirtilmez ise port publish tcp paketleri için geçerli olacaktır. Eğer Container içindeki UDP tabanlı bir servisin (DNS, syslog, game server vb.) ise host makineden erişilebilir hale getirilmesi için aşağıdaki örneği baz alabilirsiniz.
docker run -d -p 5353:53/udp my-dns-image