CodeBlanks Logo Icon CodeBlanks

Port yayınlama

Ağ üzerinde port yayınlamayı öğrenirsin.

Port yayınlama ve iç trafik

Aynı ağdaki container'lar birbirine container portu üzerinden doğrudan erişir; port yayınlamak yalnızca ana makine ve dış dünya içindir. Bu yüzden bağlantı adresinde ana makine portu değil, container portu kullanılır:

docker run -d --name db --network arka -p 15432:5432 postgres:16
# ana makineden:     psql -h localhost -p 15432
# arka ağındaki api: postgresql://db:5432/app     (15432 değil!)

Ters vekil deseni

Yaygın düzen: yalnızca bir ters vekil (nginx, Traefik, Caddy) 80/443'ü yayınlar ve isteği ağ içindeki servislere servis adlarıyla iletir. Uygulama ve veritabanı hiçbir port yayınlamaz:

# nginx.conf
location /api/ {
    proxy_pass http://api:8000/;
}

docker run -d --name vekil --network on -p 80:80 -v "$PWD/nginx.conf":/etc/nginx/conf.d/default.conf:ro nginx

Uygulama Vekilli yapı

İki komut yaz: api:1.0'dan api adlı container'ı arka planda on ağında ve port yayınlamadan başlat; nginx'ten vekil adlı container'ı arka planda on ağında, 80'i 80'e eşleyerek ve "$PWD/nginx.conf"'u /etc/nginx/conf.d/default.conf'a salt okunur bağlayarak başlat.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
docker run -d --name api --network on api:1.0
docker run -d --name vekil --network on -p 80:80 -v "$PWD/nginx.conf":/etc/nginx/conf.d/default.conf:ro nginx

Beklenen çıktı

091a2b3c4d5e
1a2b3c4d5e6f

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 db -p 15432:5432 ile yayınlandıysa aynı ağdaki api hangi adrese bağlanmalıdır?

  • db:5432 Doğru cevap
  • db:15432
  • localhost:15432
  • localhost:5432

Açıklama: Container içinde localhost container'ın kendisidir.

2 İsteği api servisine ilet.

Soru
location /api/ {
    proxy_pass http://____:8000/;
}
Cevap
location /api/ {
    proxy_pass http://api:8000/;
}

Açıklama: Ağ içindeki servis adı DNS adıdır.

3 Eşleştir.

Kavram Anlamı
container portu Ağ içi trafik
yayınlanan port Ana makine ve dış dünya
ters vekil Tek giriş noktası
localhost (container içinde) Container'ın kendisi

Başlangıç bölümündeki tüm dersler