Docker – 4. Network (sieť)

Network (sieť) umožnuje prepojiť porty z vnútra kontajnera do hostiteľského systému a vytvárať siete medzi kontajnermi.

Tip: Docker beží výborne vo WebSupport VPS. Vyskúšajte prémiový virtuálny server ešte dnes.

Otvorenie portu pre hostiteľský systém

V predošlej časti sme si ukázali zdieľanie dát (volume). Otvoriť sa tiež môže port, na ktorom prebieha sieťová komunikácia. Napríklad webový server Nginx prijíma dopyty na porte číslo 80, ale zatiaľ iba v kontajneri. Presunieme sa do priečinka ~/docker-test (prvý riadok) a tam s nezmeneným konfiguračným súborom Dockerfile zostavíme (druhý riadok) a spustíme (tretí riadok) kontajner s názvom nginx-test, podobne ako v predošlej časti.

Tentokrát ale ešte v treťom riadku pridáme nastavenie -p 80:80, ktoré komunikáciu na porte 80 v kontajneri (číslo pred dvojbodkou) zverejní aj na porte 8080 na hostiteľskom systéme (číslo za dvojbodkou):

cd ~/docker-test
docker build -t nginx-test .
docker run -d -v ~/docker-test/html:/usr/share/nginx/html -p 80:8080 nginx-test

Odteraz sa už nemusíme prihlasovať do kontajnera, aby sme cez webový server Nginx načítali obsah súboru index.html z priečinka ~/docker-test/html. Stačí, keď na hostiteľskom systéme spustíme príkaz:

curl localhost:8080

Obsah súboru index.html je teraz prístupný z kontajnera a tiež z hostiteľského počítača.

Ak ale potrebujeme zabezpečiť, aby kontajner dokázal komunikovať aj s inými kontajnermi (nie len s hostiteľským systémom), siahneme po konfigurácii siete (network).

Sieť medzi kontajnermi

Vďaka sieti (network) dokážeme vytvoriť izolovaný kanál, na ktorom sú schopné kontajnery medzi sebou komunikovať. Bežne sa takýto kanál využíva napríklad vtedy, keď v jednom kontajneri máme spustený webový server a v druhom zase databázový server. Ak webový server z prvého kontajnera potrebuje získať údaje z databázy z druhého kontajnera, musíme oba kontajnery zaradiť pod rovnakú sieť. My si to ale zjednodušíme a budeme pracovať iba s kontajnermi webového servera Nginx. Vytvorme si teda sieť pod názvom siet-test:

docker network create siet-test

Overíme si, či sa sieť vytvorila:

docker network ls

Zostavíme a spustíme 2 kontajneri pod názvami nginx-test-1 (prvé 2 riadky) a nginx-test-2 (posledné 2 riadky) a oba pomocou nastavenia --net=siet-test pridáme do siete s názvom siet-test. Za predpokladu, že sme v priečinku ~/docker-test a nezmenili sme obsah konfiguračného súboru Dockerfile, spustíme tieto 4 príkazy:

docker build -t nginx-test-1 .
docker run -d --net=siet-test nginx-test-1
docker build -t nginx-test-2 .
docker run -d --net=siet-test nginx-test-2

Zistíme IP adresy kontajnerov priradených do siete s názvom siet-test:

docker network inspect siet-test

V časti Containers hľadáme pri každom z dvoch kontajnerov IPv4Address (tu 172.18.0.2 a 172.18.0.3, u vás sa môžu líšiť). Prvá IP adresa patrí kontajneru nginx-test-1 a druhá nginx-test-2.

Zistíme ID kontajnerov (prvý riadok; vaše sa budú líšiť) a prihlásime sa do kontajnera nginx-test-1 s IP adresou 172.18.0.2 (druhý riadok):

docker ps
docker exec -it d5cef9ab1115 bash

Teraz už len zostáva overiť, či sa nám načíta súbor index.html cez webový server Nginx v kontajneri nginx-test-1 s IP adresou 172.18.0.2 z kontajnera nginx-test-2 s IP adresou 172.18.0.3:

curl 172.18.0.3

Ak sa zobrazil obsah súboru index.html, znamená to, že oba kontajnery spolu dokážu komunikovať cez sieť. Kontajner nginx-test-1 aj nginx-test-2 sme teda úspešne pridali do spoločnej izolovanej siete siet-test, v ktorej sa vidia a dokážu si vymieňať informácie.

Zhrnutie

Ukázali sme si ako kontajner otvoriť pomocou portu a aby kontajnery dokázali komunikovať medzi sebou po vyhradenej vnútornej sieti.

Aktualizované 11. januára 2021

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu