JavaRush /Курси /Модуль 2: Fullstack /Зв'язок між контейнерами

Зв'язок між контейнерами

Модуль 2: Fullstack
Рівень 15 , Лекція 2
Відкрита

3.1 Основи bridge-мережі

Мережа bridge є мережевим драйвером за замовчуванням у Docker і використовується для створення ізольованої мережі, в якій контейнери можуть взаємодіяти один з одним. Ця мережа дозволяє контейнерам спілкуватися за IP-адресами та іменами хостів, забезпечуючи зручний спосіб організації взаємодії між різними компонентами багатоконтейнерних застосунків.

Мережа bridge створює приватну внутрішню мережу на рівні хоста, яка ізольована від зовнішньої мережі хоста. Контейнери, підключені до цієї мережі, можуть взаємодіяти один з одним, але не можуть бути безпосередньо доступні ззовні без налаштування переадресації портів.

Автоматичне створення bridge-мережі

За замовчуванням Docker створює мережу bridge при встановленні, і контейнери, що запускаються без вказання конкретної мережі, автоматично підключаються до цієї мережі.

Приклад створення і використання контейнерів у bridge-мережі

1. Запуск контейнерів у мережі bridge:

У цьому прикладі ми запускаємо два контейнери: container1 з Nginx і container2 з Busybox. Обидва контейнери підключені до мережі bridge за замовчуванням.

Terminal

docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000

2. Перевірка IP-адрес контейнерів:

Щоб перевірити IP-адреси контейнерів, використовуйте команду docker inspect.

Ці команди виведуть IP-адреси контейнерів, які можна використовувати для зв'язку між ними.

Terminal

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2

3. Зв'язок між контейнерами за IP-адресою:

Для перевірки зв'язку між контейнерами використовуйте команду ping з контейнера container2 для пінгу container1.

Якщо контейнери правильно підключені до мережі bridge, команда ping буде успішною.

Terminal

docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>

Пояснення: Мережа bridge надає просте рішення для локальних застосунків, де контейнери повинні взаємодіяти один з одним, залишаючись ізольованими від зовнішньої мережі. Пінг за IP-адресою є базовим способом перевірки мережевого з'єднання, проте для більш складних застосунків може знадобитися налаштування DNS або додаткових мережевих драйверів.

3.2 Використання імен хостів

Використання імен хостів для зв’язку між контейнерами

Окрім використання IP-адрес, Docker також дозволяє використовувати імена контейнерів для зв’язку між ними. Це спрощує конфігурацію, оскільки імена контейнерів залишаються постійними, на відміну від IP-адрес, які можуть змінюватись при перезапуску контейнерів.

Приклад зв’язку за ім’ям хоста

1. Запуск контейнерів із зазначенням мережі bridge:

Terminal

docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
    

2. Перевірка зв’язку за ім’ям хоста:

Використовуйте команду ping із контейнера appserver для перевірки зв’язку з webserver:

Terminal

docker exec appserver ping -c 4 webserver 
    

Створення користувацької bridge-мережі

Замість використання мережі bridge за замовчуванням, ви можете створити користувацьку bridge-мережу, щоб краще контролювати взаємодію між контейнерами.

Приклад створення користувацької мережі

1. Створення користувацької мережі:

Terminal

docker network create --driver bridge my_bridge_network 
    

2. Запуск контейнерів у користувацькій мережі:

Terminal

docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000 
    

3. Перевірка зв’язку за ім’ям хоста:

Terminal

docker exec appserver ping -c 4 webserver 
    

3.3 Приклади кількох хостів

Приклади практичного використання

Приклад 1: Веб-сервер та база даних

Створіть файл docker-compose.yml для веб-сервера та бази даних:

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

Запустіть Docker Compose:

Terminal


docker compose up -d 

Перевірте зв'язок між контейнерами:

Terminal


docker compose exec web ping -c 4 db 

Приклад 2: Мікросервісна архітектура

Створіть файл docker-compose.yml для мікросервісного застосунку:

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

Запустіть Docker Compose:

Terminal

        
docker compose up -d 

Перевірте зв'язок між контейнерами:

Terminal

docker compose exec backend ping -c 4 db

docker compose exec frontend ping -c 4 backend 
Коментарі (3)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
DmitriyK_py Рівень 46
31 травня 2025
Десь можна було написати що робить параметр "-с" в команді docker compose exec backend ping -c 4 db ? І так на кожному кроці, вже дістало...
21 вересня 2025
друже, цю опцію описували ще на перших рівнях, коли вивчався Лінукс. Якщо ти скіпав лекції - це твої проблеми
Марк Рівень 47
10 травня 2025
Перевірка зв'язку між контейнерами за IP - не містить точного опису про ip адресу, підказки не дають розуміння де саме проблема і як вирішити. Приклад вірної відповіді містить конкретну ip адресу = яку не приймає перевірка.