Docker Networking

Docker Networking

Odlomak:
Docker networking određuje kako container-i komuniciraju međusobno, kako su povezani sa reverse proxy sistemom i koji servisi su dostupni spolja, a koji ostaju zatvoreni unutar infrastrukture.

Docker Networking

Docker networking je jedan od najvažnijih delova container infrastrukture. Container-i nisu korisni samo zato što pokreću servise izolovano, već i zato što mogu precizno da se povezuju kroz interne mreže, bez nepotrebnog izlaganja portova spolja.

U jednostavnom setup-u jedan container može imati mapiran port direktno na host server. Na primer, aplikacija sluša port 3000, a server ga izlaže kao 3000. To može raditi za testiranje, ali u produkciji je često bolje da spolja bude otvoren samo reverse proxy, dok ostali servisi ostaju u internoj Docker mreži.

Docker network omogućava da container-i komuniciraju po imenu servisa. Umesto da aplikacija traži bazu preko IP adrese, može koristiti naziv container-a ili service name iz docker-compose.yml fajla. To čini konfiguraciju čitljivijom i lakšom za održavanje.

Kod web stack-ova često postoji zajednička proxy mreža. Na toj mreži se nalaze reverse proxy, kao što su Caddy ili Nginx, i aplikacije koje treba da budu dostupne preko domena ili subdomena. Proxy prima javni saobraćaj i prosleđuje ga internim servisima.

Nisu svi container-i namenjeni javnom pristupu. Baze podataka, Redis, interni worker-i, queue servisi i pomoćni alati obično ne treba da imaju otvorene portove ka internetu. Oni treba da budu dostupni samo aplikacijama koje ih koriste kroz internu Docker mrežu.

Dobra mrežna organizacija povećava bezbednost. Ako baza podataka nema javno mapiran port, mnogo je manji rizik da bude direktno napadnuta spolja. To ne zamenjuje lozinke, backup i hardening, ali smanjuje nepotrebnu površinu napada.

Kod više projekata na istom serveru treba pažljivo razdvajati mreže. Neki servisi mogu deliti zajedničku reverse proxy mrežu, dok svaki projekat može imati i svoju internu mrežu za aplikaciju, bazu i pomoćne servise. Tako se dobija balans između povezivanja i izolacije.

Docker networking je važan i za debugging. Kada servis ne radi, često treba proveriti da li su container-i na istoj mreži, da li se vide po nazivu, da li aplikacija koristi pravi hostname i port, i da li reverse proxy šalje request na ispravno mesto.

Posebnu pažnju treba obratiti na razliku između internog i eksternog porta. Aplikacija može unutar container-a slušati port 3000, ali to ne znači da taj port mora biti otvoren na hostu. U mnogim produkcionim setup-ovima dovoljno je da ga vidi samo reverse proxy.

Dobro postavljen Docker networking omogućava čistiju, sigurniju i stabilniju infrastrukturu. Kada su mreže, portovi, service name-ovi i reverse proxy routing pravilno organizovani, container sistem postaje mnogo lakši za održavanje, širenje i dijagnostiku.