5.1 Основні види користувацьких мереж
Користувацькі мережі в Docker надають гнучкі можливості для налаштування і управління мережею між контейнерами. Вони дозволяють ізолювати контейнери, організовувати їхню взаємодію та створювати складні мережеві топології. У цій лекції ми розглянемо, як створювати і налаштовувати користувацькі мережі в Docker, а також приклади їх використання.
Основні види користувацьких мереж
Docker підтримує кілька типів користувацьких мереж, кожен з яких має свої особливості і призначений для різних сценаріїв використання:
-
Bridge (містові мережі): забезпечують ізоляцію та зв'язок між контейнерами на одному хості. Цей тип мережі використовується за замовчуванням для локальних застосунків, яким не потрібна взаємодія за межами хоста. -
Overlay (оверлейні мережі): призначені для зв'язку контейнерів, які працюють на різних хостах, у кластері Docker Swarm або Kubernetes. Вони забезпечують високу масштабованість і безпеку для розподілених застосунків. -
Macvlan: дозволяють контейнерам безпосередньо використовувати фізичний мережевий інтерфейс хоста. Це корисно для мережевих застосунків із високими вимогами до продуктивності, а також для випадків, коли потрібна прив'язка до конкретних MAC-адрес. Контейнери в мережі Macvlan можуть взаємодіяти з іншими пристроями у фізичній мережі як окремі вузли. -
Host (мережі хоста): контейнери використовують мережевий стек хоста, що усуває накладні витрати на мережеву віртуалізацію, але зменшує ізоляцію. Цей тип мережі підходить для застосунків, що потребують максимальної продуктивності мережі.
5.2 Створення та використання мостових (bridge) мереж
Мостові мережі (bridge) є найпоширенішим типом користувацьких мереж і використовуються для ізоляції контейнерів на одному хості. Контейнери, підключені до однієї і тієї ж мережі bridge, можуть взаємодіяти один з одним за IP-адресами та іменами хостів.
Створення користувацької bridge мережі
Для створення користувацької bridge мережі використовуйте команду docker network create:
docker network create --driver bridge my_bridge_network
Запуск контейнерів у користувацькій мережі
Запустіть контейнери з підключенням до створеної мережі:
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network busybox sleep 1000
Перевірка зв'язку між контейнерами
Ви можете використовувати команду ping для перевірки зв'язку між контейнерами:
docker exec container2 ping -c 4 container1
Якщо контейнери правильно підключені до мережі my_bridge_network, команда ping буде успішною.
5.3 Користувацькі мережі в Docker Compose
Приклади використання користувацьких мереж в Docker Compose
Docker Compose спрощує створення та управління мережами для багатоконтейнерних додатків. Ти можеш визначити користувацькі мережі у файлі docker-compose.yml.
Приклад файлу 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
Запусти Docker Compose:
docker compose up -d
У цьому прикладі обидва сервіси (web і app) підключені до користувацької мережі my_bridge_network.
5.4 Налаштування та використання macvlan мереж
Мережі macvlan дозволяють контейнерам напряму використовувати фізичний мережевий інтерфейс хоста, що може бути корисно для застосунків із високими вимогами до продуктивності мережі. Контейнери в такій мережі отримують власні IP-адреси в межах вказаної підмережі, що робить їх видимими в тій самій мережі, що й хост.
Створення мережі macvlan
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my_macvlan_network
У цій команді:
--subnet: визначає підмережу, в якій будуть знаходитись контейнери.--gateway: задає шлюз для контейнерів.-o parent: вказує мережевий інтерфейс хоста, до якого прив’язується мережа.
Запуск контейнерів у мережі macvlan
docker run -d --name container1 --network my_macvlan_network nginx
docker run -d --name container2 --network my_macvlan_network busybox sleep 1000
У цьому прикладі обидва контейнери під'єднані до мережі my_macvlan_network і мають доступ до зовнішньої мережі через фізичний інтерфейс eth0.
5.5 Приклади використання у Docker Compose
Ти також можеш використовувати macvlan мережі в Docker Compose. Наприклад:
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
Запусти Docker Compose:
docker compose up -d
У цьому прикладі мережа my_macvlan_network дозволяє сервісу web взаємодіяти з пристроями в підмережі 192.168.1.0/24, включно з хостом.
Практичні рекомендації:
- Налаштування доступу: Переконайся, що твій маршрутизатор або мережевий адміністратор дозволяє використання підмережі, вказаної у налаштуваннях
macvlan. - Ізоляція: Якщо важлива безпека, використовуй VLAN для сегментації мережі, щоб контейнери мали доступ тільки до потрібних ресурсів.
- Тестування: Після налаштування перевір зв'язок між контейнерами та зовнішньою мережею за допомогою команд
pingабоcurl.
5.6 Приклад використання мереж для мікросервісів
Давай розглянемо приклад, де у нас є фронтенд, бекенд і база даних, які ізольовані в різні мережі, проте забезпечують взаємодію через перетин мереж.
Файл 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
Запустіть Docker Compose:
docker compose up -d
У цьому прикладі:
- Сервіс
frontendпідключений до мережfront-tierтаback-tier, що дозволяє йому взаємодіяти як з зовнішніми клієнтами, так і з бекендом. - Сервіс
backendпідключений до мережback-tierтаdb-tier, що дозволяє йому взаємодіяти як з фронтендом, так і з базою даних. - Сервіс
databaseпідключений тільки до мережіdb-tier, що забезпечує ізоляцію бази даних від зовнішнього доступу.
Практичні рекомендації:
- Використовуйте ізоляцію: Розділення мереж допомагає обмежити доступ сервісів до баз даних або інших критичних ресурсів.
- Перевірка зв’язку: Переконайтеся, що сервіси можуть взаємодіяти один з одним через спільні мережі, використовуючи команди
pingабоcurl. - Оптимізація: Використовуйте мережу
overlay, якщо ваш проєкт передбачає роботу в кластері або на кількох хостах.
Цей приклад ілюструє, як створювати мережеву ізоляцію й одночасно забезпечувати взаємодію між різними рівнями застосунку.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ