5.1 Główne rodzaje sieci użytkownika
Sieci użytkownika w Dockerze oferują elastyczne możliwości konfiguracji i zarządzania interakcją między kontenerami. Pozwalają na izolację kontenerów, organizowanie ich interakcji oraz tworzenie złożonych topologii sieciowych. W tym wykładzie przeanalizujemy, jak tworzyć i konfigurować sieci użytkownika w Dockerze, a także przykłady ich zastosowania.
Główne rodzaje sieci użytkownika
Docker obsługuje kilka typów sieci użytkownika, z których każdy ma swoje cechy szczególne i jest przeznaczony do różnych scenariuszy użycia:
-
Bridge (sieci mostowe)
: zapewniają izolację i połączenie między kontenerami na jednym hostingu. Ten typ sieci jest używany domyślnie dla lokalnych aplikacji, które nie wymagają interakcji poza hostingiem. -
Overlay (sieci nakładkowe)
: są przeznaczone do połączenia kontenerów działających na różnych hostach w klastrze Docker Swarm lub Kubernetes. Zapewniają wysoką skalowalność i bezpieczeństwo dla rozproszonych aplikacji. -
Macvlan
: pozwalają kontenerom bezpośrednio korzystać z fizycznego interfejsu sieciowego hosta. Jest to przydatne dla aplikacji sieciowych z wysokimi wymaganiami dotyczącymi wydajności, a także w przypadkach, gdy wymagana jest integracja z określonymi adresami MAC. Kontenery w sieci Macvlan mogą komunikować się z innymi urządzeniami w fizycznej sieci jako oddzielne węzły. -
Host (sieci hosta)
: kontenery korzystają ze stosu sieciowego hosta, co eliminuje narzuty związane z wirtualizacją sieci, ale zmniejsza izolację. Ten typ sieci nadaje się do aplikacji wymagających maksymalnej wydajności sieciowej.
5.2 Tworzenie i użycie sieci mostowych (bridge)
Sieci mostowe (bridge) są najczęściej używanym rodzajem sieci użytkownika i są wykorzystywane do izolacji kontenerów na jednym hoście. Kontenery podłączone do tej samej sieci bridge mogą komunikować się ze sobą za pomocą adresów IP i nazw hostów.
Tworzenie użytkownika bridge sieci
Aby utworzyć użytkownika bridge sieci
, użyj polecenia docker network create
:
docker network create --driver bridge my_bridge_network
Uruchamianie kontenerów w użytkownika sieci
Uruchom kontenery z podłączeniem do utworzonej sieci:
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network busybox sleep 1000
Sprawdzanie połączenia pomiędzy kontenerami
Możesz użyć polecenia ping
, aby sprawdzić połączenie pomiędzy kontenerami:
docker exec container2 ping -c 4 container1
Jeżeli kontenery są poprawnie podłączone do sieci my_bridge_network
, polecenie ping
zakończy się sukcesem.
5.3 Sieci użytkownika w Docker Compose
Przykłady korzystania z sieci użytkownika w Docker Compose
Docker Compose ułatwia tworzenie i zarządzanie sieciami dla aplikacji wielokontenerowych. Możesz zdefiniować sieci użytkownika w pliku docker-compose.yml
.
Przykład pliku docker-compose.yml
:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
app:
image: myapp:latest
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Uruchom Docker Compose:
docker compose up -d
W tym przykładzie oba serwisy (web
i app
) są podłączone do sieci użytkownika my_bridge_network
.
5.4 Konfiguracja i użycie sieci macvlan
Sieci macvlan
pozwalają kontenerom na bezpośrednie korzystanie z fizycznego interfejsu sieciowego hosta, co może być przydatne dla aplikacji z wysokimi wymaganiami dotyczącymi wydajności sieci. Kontenery w takiej sieci otrzymują własne adresy IP w określonej podsieci, co sprawia, że są widoczne w tej samej sieci co host.
Tworzenie sieci macvlan
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my_macvlan_network
W tej komendzie:
--subnet
: określa podsieć, w której będą znajdować się kontenery.--gateway
: ustawia bramę dla kontenerów.-o parent
: wskazuje interfejs sieciowy hosta, do którego przypisana jest sieć.
Uruchamianie kontenerów w sieci macvlan
docker run -d --name container1 --network my_macvlan_network nginx
docker run -d --name container2 --network my_macvlan_network busybox sleep 1000
W tym przykładzie oba kontenery są podłączone do sieci my_macvlan_network
i mają dostęp do zewnętrznej sieci poprzez fizyczny interfejs eth0
.
5.5 Przykłady użycia w Docker Compose
Możesz również używać sieci macvlan
w Docker Compose
. Na przykład:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_macvlan_network
networks:
my_macvlan_network:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
Uruchom Docker Compose
:
docker compose up -d
W tym przykładzie sieć my_macvlan_network
pozwala serwisowi web
komunikować się z urządzeniami w podsieci 192.168.1.0/24
, w tym z hostem.
Praktyczne wskazówki:
- Konfiguracja dostępu: Upewnij się, że twój router lub administrator sieci zezwala na używanie podsieci wskazanej w konfiguracji
macvlan
. - Izolacja: Jeśli bezpieczeństwo jest ważne, użyj VLAN do segmentacji sieci, aby kontenery miały dostęp tylko do wymaganych zasobów.
- Testowanie: Po konfiguracji sprawdź komunikację między kontenerami a siecią zewnętrzną za pomocą poleceń
ping
lubcurl
.
5.6 Przykład wykorzystania sieci dla mikroserwisów
Rozważmy przykład, w którym mamy frontend, backend i bazę danych, które są odizolowane w różnych sieciach, ale jednocześnie zapewniają współdziałanie poprzez przecięcia sieci.
Plik docker-compose.yml
version: '3.8'
services:
frontend:
image: myfrontend:latest
networks:
- front-tier
- back-tier
backend:
image: mybackend:latest
networks:
- back-tier
- db-tier
database:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- db-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
db-tier:
driver: bridge
Uruchom Docker Compose
:
docker compose up -d
W tym przykładzie:
- Serwis
frontend
jest podłączony do siecifront-tier
iback-tier
, co pozwala mu współdziałać zarówno z zewnętrznymi klientami, jak i z backendem. - Serwis
backend
jest podłączony do sieciback-tier
idb-tier
, co pozwala mu współdziałać zarówno z frontendem, jak i z bazą danych. - Serwis
database
jest podłączony tylko do siecidb-tier
, co zapewnia izolację bazy danych od zewnętrznego dostępu.
Praktyczne zalecenia:
- Wykorzystaj izolację: Podział sieci pomaga ograniczyć dostęp serwisów do baz danych lub innych krytycznych zasobów.
- Sprawdzenie połączenia: Upewnij się, że serwisy mogą współdziałać ze sobą przez wspólne sieci, używając komend
ping
lubcurl
. - Optymalizacja: Użyj sieci
overlay
, jeśli Twój projekt wymaga pracy w klastrze lub na kilku hostach.
Ten przykład ilustruje, jak tworzyć izolację sieciową i jednocześnie zapewniać współdziałanie pomiędzy różnymi poziomami aplikacji.
GO TO FULL VERSION