3.1 Podstawy bridge-sieci
Sieć bridge
to domyślny network driver w Dockerze, który jest używany do tworzenia izolowanej sieci, w której kontenery mogą się ze sobą komunikować. Ta sieć umożliwia kontenerom komunikację za pomocą adresów IP i nazw hostów, zapewniając wygodny sposób organizacji interakcji między różnymi komponentami aplikacji wielokontenerowych.
Sieć bridge
tworzy prywatną, wewnętrzną sieć na poziomie hosta, która jest odizolowana od zewnętrznej sieci hosta. Kontenery podłączone do tej sieci mogą komunikować się ze sobą, ale nie mogą być bezpośrednio dostępne z zewnątrz bez konfiguracji przekierowania portów.
Automatyczne tworzenie bridge-sieci
Domyślnie Docker tworzy sieć bridge
podczas instalacji, a kontenery uruchamiane bez wskazania konkretnej sieci są automatycznie podłączane do tej sieci.
Przykład tworzenia i używania kontenerów w bridge-sieci
1. Uruchamianie kontenerów w sieci bridge
:
W tym przykładzie uruchamiamy dwa kontenery: container1 z Nginx i container2 z Busybox. Oba kontenery są podłączone do domyślnej sieci bridge.
docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000
2. Sprawdzanie adresów IP kontenerów:
Aby sprawdzić adresy IP kontenerów, użyj polecenia docker inspect.
Te komendy wyświetlą adresy IP kontenerów, które można wykorzystać do komunikacji między nimi.
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2
3. Komunikacja między kontenerami za pomocą adresu IP:
Aby sprawdzić komunikację między kontenerami, użyj polecenia ping
z kontenera container2
, aby pingować container1
.
Jeśli kontenery są poprawnie podłączone do sieci bridge
, polecenie ping
zakończy się sukcesem.
docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>
Wyjaśnienie: Sieć bridge
zapewnia proste rozwiązanie dla lokalnych aplikacji, gdzie kontenery muszą się ze sobą komunikować, pozostając izolowane od zewnętrznej sieci. Pingowanie za pomocą adresu IP to podstawowy sposób sprawdzania połączenia sieciowego, ale dla bardziej złożonych aplikacji może być konieczne skonfigurowanie DNS lub dodatkowych network driverów.
3.2 Używanie nazw hostów
Używanie nazw hostów do połączenia między kontenerami
Oprócz używania adresów IP, Docker pozwala także na korzystanie z nazw kontenerów do ich połączenia. To upraszcza konfigurację, ponieważ nazwy kontenerów są stałe, w przeciwieństwie do adresów IP, które mogą się zmieniać po ponownym uruchomieniu kontenerów.
Przykład połączenia za pomocą nazwy hosta
1. Uruchomienie kontenerów z określeniem sieci bridge
:
docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
2. Sprawdzanie połączenia za pomocą nazwy hosta:
Użyj komendy ping
z kontenera appserver
aby pingować webserver
:
docker exec appserver ping -c 4 webserver
Tworzenie niestandardowej sieci bridge
Zamiast używania domyślnej sieci bridge
, możesz stworzyć własną niestandardową sieć bridge
, aby lepiej kontrolować interakcje między kontenerami.
Przykład tworzenia niestandardowej sieci
1. Tworzenie niestandardowej sieci:
docker network create --driver bridge my_bridge_network
2. Uruchamianie kontenerów w niestandardowej sieci:
docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000
3. Sprawdzanie połączenia za pomocą nazwy hosta:
docker exec appserver ping -c 4 webserver
3.3 Przykłady kilku hostów
Przykłady praktycznego użycia
Przykład 1: Serwer WWW i baza danych
Utwórz plik docker-compose.yml
dla serwera WWW i bazy danych:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Uruchom Docker Compose:
docker compose up -d
Sprawdź połączenie pomiędzy kontenerami:
docker compose exec web ping -c 4 db
Przykład 2: Architektura mikroserwisowa
Utwórz plik docker-compose.yml
dla aplikacji mikroserwisowej:
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- my_bridge_network
backend:
image: mybackend:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Uruchom Docker Compose
:
docker compose up -d
Sprawdź połączenie pomiędzy kontenerami:
docker compose exec backend ping -c 4 db
docker compose exec frontend ping -c 4 backend
GO TO FULL VERSION