CodeGym /Kursy /Docker SELF /Połączenie między kontenerami

Połączenie między kontenerami

Docker SELF
Poziom 17 , Lekcja 2
Dostępny

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.

Terminal

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.

Terminal

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.

Terminal

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:

Terminal

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:

Terminal

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:

Terminal

docker network create --driver bridge my_bridge_network 
    

2. Uruchamianie kontenerów w niestandardowej sieci:

Terminal

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:

Terminal

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:

Yaml

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:

Terminal


docker compose up -d 

Sprawdź połączenie pomiędzy kontenerami:

Terminal


docker compose exec web ping -c 4 db 

Przykład 2: Architektura mikroserwisowa

Utwórz plik docker-compose.yml dla aplikacji mikroserwisowej:

Yaml

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:

Terminal

        
docker compose up -d 

Sprawdź połączenie pomiędzy kontenerami:

Terminal

docker compose exec backend ping -c 4 db

docker compose exec frontend ping -c 4 backend 
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION