Docker – kontenery a sieć

W tym wpisie opiszę w skrócie podstawowe aspekty sieci w kontekście kontenerów.

Internet

Na początku warto zaznaczyć, że kontenery domyślnie mają dostęp do Internetu – czyli aplikacje wewnętrzne mogą bez problemów wysyłać żądania do zasobów Internetowych.

Połączenie z kontenera do lokalnego komputera (hosta)

Aby korzystać z serwisów hosta z poziomu kontenera należy posługiwać się specjalną nazwą – host.docker.internal:

get("https://host.docker.internal:8038/app/entities)

Komunikacja pomiędzy kontenerami

Aby komunikować się pomiędzy kontenerami należy stworzyć nową sieć:

docker network create containers_network

a następnie podczas uruchamiania kontenerów dodać informację, że chcemy korzystać ze stworzonej sieci:

docker run --network containers_network image_name

w kodzie zaś posługujemy się nazwami kontenerów, dlatego lepiej jest im od razu nadać nazwę:

docker run --network containers_network --name container_name image_name

i teraz w kodzie aplikacji należy posługiwać się zadaną nazwą:

get("https://container_name:8038/app/entities)

Docker compose tworzy dodatkową nazwę

Uruchamiając kontenery za pomocą Docker compose definiujemy kontenery jako serwisy:

services:
  first:
    ...
  second:
    container_name: your_container_name
    ... 

mamy zdefiniowane dwa serwisy: first oraz second. W kodzie aplikacji możliwe jest posługiwanie się nazwami serwisów (first lub second), ale dalej można korzystać z nazw kontenerów.

* Mniej poręczne połączenie pomiędzy kontenerami

Z racji tego, że każdy kontener dostaje automatycznie jakiś adres IP możemy go sprawdzić:

docker container inspect your_container_name
"Networks": {
                "bridge": {
                    ...
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    ...
                }
            }

Takim adresem można się posługiwać, aby dostać się do tego kontenera, ale przy każdym stworzeniu kontenera będzie on inny, stąd nie jest to dobre rozwiązanie.

Odcinanie od jakiejkolwiek sieci

Aby odciąć kontener całkowicie od Internetu należy użyć predefiniowanego sterownika o nazwie none:

docker run --network none image_name

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *