Giriş
Docker, konteynerler sayesinde uygulama bileşenlerini izole çalıştırmayı sağlar. Ancak ağ (network) ve veri (volume) yapılandırmaları doğru yapılmazsa konteynerler arasında iletişim kurmak veya veriyi kalıcı hale getirmek mümkün olmayabilir.
Bu makalede şunları öğreneceksiniz:
- Docker ağ türleri (
bridge,host,overlay) - Konteynerler arası iletişim kurma
- Kalıcı veri saklama yöntemleri
bind mountvenamed volumefarklarıdocker-composeile otomasyon- Volume yedekleme ve geri yükleme işlemleri
Bu rehberin sonunda, hem tek host hem de çoklu node ortamlarında sağlam ağ ve veri yapılandırmaları yapabilecek düzeye geleceksiniz.
Önkoşullar
- Linux/macOS (veya Windows Docker Desktop) ortamı
- Docker Engine v24+
- Terminal bilgisi
- İnternet erişimi
Not: Komutlar
sudoyetkisine sahip ancak root olmayan kullanıcı üzerinden çalıştırılmalıdır.
Adım 1 — Docker Ağ Türleri
Docker ağları, konteynerlerin hem birbirleriyle hem de dış dünya ile iletişim kurmasını sağlar.
Listeleme:
docker network ls
Örnek çıktı:
NETWORK ID NAME DRIVER SCOPE
b1292dd03ea9 bridge bridge local
🔹 bridge (Varsayılan)
Docker, varsayılan olarak bridge ağını kullanır. Her yeni konteyner bu ağa bağlanır.
docker run -dit --name web1 nginx
docker exec -it web1 ip a
Özel Bridge Ağı
docker network create --driver bridge my_bridge
docker run -dit --name nginx1 --network my_bridge nginx
docker run -dit --name nginx2 --network my_bridge alpine sh
docker exec -it nginx2 ping nginx1
Konteynerler isimleriyle haberleşebilir.
🔸 host Ağı
Bu modda konteyner, host’un ağ arabirimini doğrudan kullanır.
docker run --rm -d --network host nginx
Port yönlendirmesi gerekmez. Güvenlik açısından dikkatli olunmalıdır.
🔸 overlay Ağı
Birden fazla Docker host arasında ağ oluşturur. Swarm mod gerektirir.
docker swarm init
docker network create -d overlay --attachable app_overlay
Overlay ağlar VXLAN tünelleme ile çalışır.
Diğerleri: macvlan ve none
macvlan: Gerçek IP ve MAC adresi atamak için kullanılır.none: Tam izole mod (ağsız).
Adım 2 — Trafik İzleme (tcpdump)
sudo apt install tcpdump -y
sudo tcpdump -i docker0
Konteynerler arası ping trafiği izlendiğinde, ICMP paketleri docker0 köprüsü üzerinden geçer.
Adım 3 — Ağ Yapısı
[ Container1 ]---vethX docker0 host Internet
[ Container2 ]---vethY /
Her konteyner veth çiftiyle köprüye bağlanır.
Adım 4 — Docker Volumes
Konteynerler silindiğinde veriler kaybolur. Kalıcı veri için volume yapısı kullanılır.
🟦 Named Volumes
docker volume create app_data
docker run -d -v app_data:/usr/share/nginx/html nginx
docker volume inspect app_data
🟧 Bind Mounts
mkdir -p ~/data
echo "Merhaba Docker" > ~/data/index.html
docker run -d -v ~/data:/usr/share/nginx/html -p 8080:80 nginx
Adım 5 — Bind vs Named Volume
| Özellik | Named Volume | Bind Mount |
|---|---|---|
| Performans | Optimize | Donanıma bağlı |
| Güvenlik | Daha güvenli | Root erişimi gerekebilir |
| Yedekleme | Kolay | Karmaşık |
| Esneklik | Düşük | Yüksek |
| Taşınabilirlik | Yüksek | Düşük |
Adım 6 — Volume Yedekleme ve Geri Yükleme
Yedekleme
docker run --rm -v app_data:/volume -v $(pwd):/backup busybox tar czf /backup/app_data.tar.gz /volume
Geri Yükleme
docker run --rm -v app_data:/restore -v $(pwd):/backup busybox tar xzf /backup/app_data.tar.gz -C /
Adım 7 — Docker Compose
version: "3.8"
services:
web:
image: nginx
volumes:
- app_data:/usr/share/nginx/html
networks:
- backend
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data
networks:
- backend
volumes:
app_data:
db_data:
networks:
backend:
docker compose up -d
Adım 8 — Güvenlik ve İzinler
sudo chown -R 1000:1000 ~/data
sudo chmod -R 755 ~/data
SELinux aktifse :Z etiketi gerekebilir:
-v /host/path:/container/path:Z
Sonuç
Bu rehberde:
- Docker ağ türlerini öğrendiniz
- Volume yapılarını incelediniz
- Bind ve Named farkını gördünüz
- Yedekleme ve Compose yapılandırmasını uyguladınız
Artık Docker projelerinizde kalıcı veri ve ağ yapılandırmasını güvenle yönetebilirsiniz.