Docker Network Nedir?
Docker Network, container'ların birbirleriyle, host makineyle ve internet ile haberleşmesini sağlayan sanal ağ yapısıdır.
Bizim yapımızda kemaltokmak.com container'ı ile Nginx Proxy Manager aynı network üzerinde çalıştığında, NPM container adına göre yönlendirme yapabilir.
Docker Network Neden Önemlidir?
VPS üzerinde birden fazla container çalıştırdığımızda bu container'ların düzenli şekilde haberleşmesi gerekir.
- Container'lar birbirlerine isimleriyle erişebilir.
- IP adresi ezberlemeye gerek kalmaz.
- Projeler birbirinden daha düzenli ayrılır.
- Nginx Proxy Manager yönlendirmeleri daha kolay yapılır.
Docker Network Listeleme
Sunucudaki Docker network'lerini görmek için:
docker network ls
Varsayılan Docker Network Türleri
Bridge Network
Docker'ın varsayılan network tipidir. Container'lar genellikle bridge network üzerinde çalışır.
Host Network
Container, host makinenin ağını doğrudan kullanır.
None Network
Container herhangi bir ağa bağlanmaz.
docker network inspect bridge
Özel Docker Network Oluşturma
Gerçek projelerde varsayılan bridge yerine özel network oluşturmak daha doğru bir yöntemdir.
docker network create web
Oluşturulan network'ü kontrol etmek için:
docker network ls
Container'ı Network ile Çalıştırma
Bir container'ı oluşturduğumuz özel network'e bağlı şekilde çalıştırabiliriz.
docker run -d \
--name nginx-test \
--network web \
nginx:alpine
Container'lar Arası Haberleşme
Aynı custom network içerisinde bulunan container'lar birbirlerine container adıyla erişebilir.
docker run -d --name web1 --network web nginx:alpine
docker run -it --name test-client --network web alpine sh
wget -qO- http://web1
Container IP adresleri değişebilir. Bu yüzden IP adresi yerine container adı kullanmak daha güvenli ve doğru bir yöntemdir.
Network Bilgilerini İnceleme
Bir network içindeki container'ları, subnet bilgisini ve gateway bilgisini görmek için inspect komutu kullanılır.
docker network inspect web
Çalışan Container'ı Network'e Sonradan Bağlama
Çalışan bir container daha sonra başka bir Docker network'e bağlanabilir.
docker network connect web nginx-test
Network'ten ayırmak için:
docker network disconnect web nginx-test
Docker Compose ile Network Kullanımı
Docker Compose dosyasında daha önce oluşturulmuş external network kullanılabilir.
services:
app:
image: nginx:alpine
container_name: app
networks:
- web
networks:
web:
external: true
Nginx Proxy Manager ile Network Kullanımı
Nginx Proxy Manager'ın web sitesi container'ına ulaşabilmesi için iki container'ın aynı Docker network üzerinde olması gerekir.
docker network connect web nginx-proxy-manager
docker network connect web kemaltokmak
Daha sonra Nginx Proxy Manager içinde Forward Hostname alanına container adı yazılır:
Scheme: http
Forward Hostname / IP: kemaltokmak
Forward Port: 80
Bu yapı sayesinde container IP adresi değişse bile Nginx Proxy Manager container adına göre yönlendirme yapmaya devam eder.
Sık Kullanılan Docker Network Komutları
docker network ls
docker network create web
docker network inspect web
docker network connect web container_adi
docker network disconnect web container_adi
docker network rm web
docker network prune
Bu Dokümanda Ne Öğrendik?
Bu dokümanda Docker network yapısını, network türlerini, özel network oluşturmayı, container'ları aynı network üzerinde çalıştırmayı ve Nginx Proxy Manager ile container haberleşmesini öğrendik.
- Docker Network yapısının ne işe yaradığını öğrendik.
- Bridge, host ve none network türlerini gördük.
- Özel Docker network oluşturduk.
- Container'ları aynı network üzerinde çalıştırdık.
- Container adıyla haberleşmeyi test ettik.
- Nginx Proxy Manager ile ortak network kullanımını öğrendik.