Docker to platforma, która służy konteneryzacji aplikacji. Umożliwia, między innymi uruchamianie ich w izolowanych środowiskach – zwanych kontenerami. Z tego artykułu dowiecie się więcej o konfiguracji i koncepcji działania sieci w kontenerach. Konfiguracja sieci w Dockerze odgrywa kluczową rolę w procesie konteneryzacji, ponieważ pozwala na zarządzanie sposobem, w jaki kontenery komunikują się między sobą i z innymi aplikacjami w sieci. 

Sposoby konfiguracji sieci w Dockerze 

Docker oferuje kilka typów sieci: 

  1. Network Bridge – Jest to domyślna sieć w Dockerze. Pozwala na komunikację między kontenerami oraz między kontenerami, a hostem. Ta sieć jest dostępna w momencie uruchomienia Docker Engine i każdy kontener połączony z tą siecią otrzymuje automatycznie adres IP. 
  2. Host Network – W tym przypadku kontener korzysta z interfejsu sieciowego hosta, dzięki czemu uzyskuje dostęp do sieci hosta. Ta opcja jest przydatna, jeśli kontener wymaga dostępu do sieci hosta lub gdy aplikacja w kontenerze musi działać na określonym porcie hosta. 
  3. None Network – Ta opcja wskazuje  brak sieci, co oznacza, że kontener nie będzie miał dostępu do sieci, ani do innych kontenerów, ani do hosta. Jest to przydatne w przypadku kontenerów, które mają działać w odosobnieniu od reszty systemu. 
  4. Overlay Network – To sieć, która pozwala na komunikację między kontenerami uruchomionymi na różnych hostach. Ta opcja jest przydatna w przypadku aplikacji rozproszonych, które wymagają komunikacji między kontenerami uruchomionymi na różnych hostach. 
  5. Macvlan Network – To sieć, która pozwala kontenerowi na użycie unikalnego adresu MAC., To umożliwia kontenerowi połączenie z siecią zewnętrzną jako oddzielne urządzenie sieciowe. Ta opcja jest przydatna w przypadku, gdy kontener musi działać jako rzeczywisty komputer z dostępem do sieci zewnętrznej. 
  6. None Network – sieć, w której kontener nie ma dostępu do żadnych interfejsów sieciowych. Oznacza to, że kontener jest izolowany od reszty sieci i nie może korzystać z żadnych funkcji sieciowych. Można skonfigurować sieć None za pomocą CLI. 
  7. Ipvlan – Podobnie jak w przypadku sieci typu macvlan; umożliwia dostęp do sieci VLAN, ale z wykorzystaniem własnych adresów IP dla kontenerów. 
  8. Bridge z punktem końcowym DNS – Ten typ sieci pozwala na konfigurację punktu końcowego DNS dla kontenerów, co umożliwia im dostęp do usług DNS w sieci hosta. 
  9. Socket – To typ sieci, który umożliwia kontenerom komunikację z aplikacjami działającymi bezpośrednio na hoście za pomocą gniazd Unix. 
  10. Third-party network – sieć, którą dostarcza inny system zarządzania siecią, a nie Dockera. Można użyć tej opcji, aby włączyć kontener do sieci zarządzanej przez zewnętrzny system. Można skonfigurować sieć Third-party za pomocą CLI. 

Konfiguracja sieci w Dockerze jest ważnym elementem tworzenia i uruchamiania aplikacji w kontenerach. Wybór odpowiedniego typu sieci zależy od wymagań aplikacji i sposobu jej uruchomienia. 

Plik konfiguracyjny i struktura 

Poniżej pokażę przykładowy plik konfiguracji kontenera i sieci dla podsieci 172.22.0.0/24. 

Struktura – jak widać – nie jest zbyt skomplikowana i można połapać się w niej bez większego problemu. Nie wyczerpuje to jednak zagadnienia pełnej konfiguracji sieci. Spójrzmy na bardziej rozbudowaną konfigurację,która zawiera  podział na podsieć dla aplikacji na froncie oraz w backendzie.

W tym przykładzie tworzony jest kontener z obrazu frontend:latest i przypisany do sieci frontend-net z adresem IP 172.18.0.2 oraz portem 80 przekierowanym na port hosta. Tworzony jest także kontener z obrazu backend:latest i przypisany do sieci backend-net z adresem IP 172.19.0.3. Oba kontenery są połączone do sieci typu bridge, ale każdy z nich ma przypisany inny adres IP z osobnej podsieci. Sieci frontend-net i backend-net mają różne podsieci i są odseparowane od siebie. W ten sposób kontenery z obrazami frontend:latest i backend:latest są połączone w dwóch oddzielnych sieciach, co umożliwia izolację aplikacji i zapewnienie bezpieczeństwa.

Innym przykładem może być sieć typu overlay, która pozwala na komunikację pomiędzy kontenerami na różnych hostach.

W tym przykładzie tworzona jest sieć typu overlay dla każdej z aplikacji – frontend-net i backend-net. Kontener frontend jest połączony z obiema sieciami, a kontener backend jest połączony tylko z siecią backend-net. Sieci frontend-net i backend-net są sieciami typu overlay i mają różne podsieci. Sieci typu overlay pozwalają na połączenie kontenerów na różnych hostach w klastrze Docker Swarm. W tym przypadku, aplikacja frontend i backend mogą komunikować się między sobą, nawet jeśli są uruchomione na różnych maszynach.

Jeszcze inny typ sieci:

W tym przykładzie definiuję sieć typu macvlan.

macvlan_net

driver określa, że używamy sterownika

parent określa interfejs fizyczny hosta, na którym zostanie utworzony interfejs

mode określa tryb działania

macvlan_mode określa, że używamy trybu bridge

mtu określa maksymalną wartość MTU dla interfejsu

host_iface_name definiuje nazwę interfejsu MacVLAN na hoście.

macvlan_config – tu określamy, że chcemy skonfigurować unikalny adres MAC dla interfejsu MacVLAN. W tym przypadku używamy jakiegoś losowego adresu MAC 02:42:c0:a8:01:02.

ipam definiuje konfigurację adresów IP.

subnet określa podsieć dla sieci macvlan_net

gateway określa adres bramy domyślnej dla podsieci.

aux_addresses określa mapowanie dodatkowych adresów IP na nazwy.

Podsumowanie

Podsumowując, ważnym aspektem jest odpowiedni wybór typu sieci dla naszych celów. Może nam to oszczędzić wielu problemów trakcie korzystania z   kontenerów czy problemów komunikacyjnych.

Podczas konfiguracji sieci w Dockerze warto zwrócić uwagę na kilka istotnych kwestii:

  1. Wybór odpowiedniego typu sieci – zależy on od potrzeb i wymagań aplikacji.
  2. Zarządzanie podsieciami i adresami IP – konieczne jest dokładne zaplanowanie podsieci i przydzielenie unikalnych adresów IP dla kontenerów.
  3. Konfiguracja woluminów i portów – należy dokładnie określić, jakie pliki i porty będą dostępne dla kontenerów.
  4. Bezpieczeństwo – należy zadbać o zabezpieczenie sieci i kontenerów przed atakami z zewnątrz.
  5. Skalowalność – sieć powinna być łatwa w zarządzaniu i skalowaniu, aby aplikacja mogła rozwijać się wraz z rozwojem biznesu.
  6. Monitorowanie i logowanie – konieczne jest zapewnienie odpowiedniego narzędzia do monitorowania i logowania sieci, aby wykryć i rozwiązać problemy w jak najkrótszym czasie.