3.1 Основи bridge-мережі
Мережа bridge є мережевим драйвером за замовчуванням у Docker і використовується для створення ізольованої мережі, в якій контейнери можуть взаємодіяти один з одним. Ця мережа дозволяє контейнерам спілкуватися за IP-адресами та іменами хостів, забезпечуючи зручний спосіб організації взаємодії між різними компонентами багатоконтейнерних застосунків.
Мережа bridge створює приватну внутрішню мережу на рівні хоста, яка ізольована від зовнішньої мережі хоста. Контейнери, підключені до цієї мережі, можуть взаємодіяти один з одним, але не можуть бути безпосередньо доступні ззовні без налаштування переадресації портів.
Автоматичне створення bridge-мережі
За замовчуванням Docker створює мережу bridge при встановленні, і контейнери, що запускаються без вказання конкретної мережі, автоматично підключаються до цієї мережі.
Приклад створення і використання контейнерів у bridge-мережі
1. Запуск контейнерів у мережі bridge:
У цьому прикладі ми запускаємо два контейнери: container1 з Nginx і container2 з Busybox. Обидва контейнери підключені до мережі bridge за замовчуванням.
docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000
2. Перевірка IP-адрес контейнерів:
Щоб перевірити IP-адреси контейнерів, використовуйте команду docker inspect.
Ці команди виведуть IP-адреси контейнерів, які можна використовувати для зв'язку між ними.
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 буде успішною.
docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>
Пояснення: Мережа bridge надає просте рішення для локальних застосунків, де контейнери повинні взаємодіяти один з одним, залишаючись ізольованими від зовнішньої мережі. Пінг за IP-адресою є базовим способом перевірки мережевого з'єднання, проте для більш складних застосунків може знадобитися налаштування DNS або додаткових мережевих драйверів.
3.2 Використання імен хостів
Використання імен хостів для зв’язку між контейнерами
Окрім використання IP-адрес, Docker також дозволяє використовувати імена контейнерів для зв’язку між ними. Це спрощує конфігурацію, оскільки імена контейнерів залишаються постійними, на відміну від IP-адрес, які можуть змінюватись при перезапуску контейнерів.
Приклад зв’язку за ім’ям хоста
1. Запуск контейнерів із зазначенням мережі bridge:
docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
2. Перевірка зв’язку за ім’ям хоста:
Використовуйте команду ping із контейнера appserver для перевірки зв’язку з webserver:
docker exec appserver ping -c 4 webserver
Створення користувацької bridge-мережі
Замість використання мережі bridge за замовчуванням, ви можете створити користувацьку bridge-мережу, щоб краще контролювати взаємодію між контейнерами.
Приклад створення користувацької мережі
1. Створення користувацької мережі:
docker network create --driver bridge my_bridge_network
2. Запуск контейнерів у користувацькій мережі:
docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000
3. Перевірка зв’язку за ім’ям хоста:
docker exec appserver ping -c 4 webserver
3.3 Приклади кількох хостів
Приклади практичного використання
Приклад 1: Веб-сервер та база даних
Створіть файл docker-compose.yml для веб-сервера та бази даних:
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:
docker compose up -d
Перевірте зв'язок між контейнерами:
docker compose exec web ping -c 4 db
Приклад 2: Мікросервісна архітектура
Створіть файл docker-compose.yml для мікросервісного застосунку:
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:
docker compose up -d
Перевірте зв'язок між контейнерами:
docker compose exec backend ping -c 4 db
docker compose exec frontend ping -c 4 backend
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ