JavaRush /Курсы /Модуль 2: Fullstack /Использование пользовательских сетей

Использование пользовательских сетей

Модуль 2: Fullstack
15 уровень , 4 лекция
Открыта

5.1 Основные виды пользовательских сетей

Пользовательские сети в Docker предоставляют гибкие возможности для настройки и управления сетевым взаимодействием между контейнерами. Они позволяют изолировать контейнеры, организовывать их взаимодействие и создавать сложные сетевые топологии. В этой лекции мы рассмотрим, как создавать и настраивать пользовательские сети в Docker, а также примеры их использования.

Основные виды пользовательских сетей

Docker поддерживает несколько типов пользовательских сетей, каждый из которых имеет свои особенности и предназначен для различных сценариев использования:

  1. Bridge (мостовые сети): обеспечивают изоляцию и связь между контейнерами на одном хосте. Этот тип сети используется по умолчанию для локальных приложений, которым не требуется взаимодействие за пределами хоста.
  2. Overlay (оверлейные сети): предназначены для связи контейнеров, работающих на разных хостах, в кластере Docker Swarm или Kubernetes. Они обеспечивают высокую масштабируемость и безопасность для распределенных приложений.
  3. Macvlan: позволяют контейнерам напрямую использовать физический сетевой интерфейс хоста. Это полезно для сетевых приложений с высокими требованиями к производительности, а также для случаев, где требуется привязка к определённым MAC-адресам. Контейнеры в сети Macvlan могут взаимодействовать с другими устройствами в физической сети как отдельные узлы.
  4. Host (сети хоста): контейнеры используют сетевой стек хоста, что устраняет накладные расходы на сетевую виртуализацию, но уменьшает изоляцию. Этот тип сети подходит для приложений, требующих максимальной сетевой производительности.

5.2 Создание и использование мостовых (bridge) сетей

Мостовые сети (bridge) являются наиболее распространенным типом пользовательских сетей и используются для изоляции контейнеров на одном хосте. Контейнеры, подключенные к одной и той же сети bridge, могут взаимодействовать друг с другом по IP-адресам и именам хостов.

Создание пользовательской bridge сети

Для создания пользовательской bridge сети используйте команду docker network create:

Terminal

docker network create --driver bridge my_bridge_network

Запуск контейнеров в пользовательской сети

Запустите контейнеры с подключением к созданной сети:

Terminal

docker run -d --name container1 --network my_bridge_network nginx

docker run -d --name container2 --network my_bridge_network busybox sleep 1000

Проверка связи между контейнерами

Вы можете использовать команду ping для проверки связи между контейнерами:

Terminal

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:

Yaml

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:

Terminal

docker compose up -d

В этом примере оба сервиса (web и app) подключены к пользовательской сети my_bridge_network.

5.4 Настройка и использование macvlan сетей

Сети macvlan позволяют контейнерам напрямую использовать физический сетевой интерфейс хоста, что может быть полезно для приложений с высокими требованиями к производительности сети. Контейнеры в такой сети получают собственные IP-адреса в пределах указанной подсети, что делает их видимыми в той же сети, что и хост.

Создание сети macvlan

Terminal

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

Terminal

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. Например:

Yaml

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:

Terminal

docker compose up -d

В данном примере сеть my_macvlan_network позволяет сервису web взаимодействовать с устройствами в подсети 192.168.1.0/24, включая хост.

Практические рекомендации:

  • Настройка доступа: Убедитесь, что ваш маршрутизатор или сетевой администратор разрешает использование подсети, указанной в настройках macvlan.
  • Изоляция: Если безопасность важна, используйте VLAN для сегментации сети, чтобы контейнеры имели доступ только к необходимым ресурсам.
  • Тестирование: После настройки проверьте связь между контейнерами и внешней сетью с помощью команд ping или curl.

5.6 Пример использования сетей для микросервисов

Рассмотрим пример, где у нас есть фронтенд, бекенд и база данных, которые изолированы в разные сети, но при этом обеспечивают взаимодействие через пересечение сетей.

Файл docker-compose.yml

Yaml

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:

Terminal

docker compose up -d 

В этом примере:

  • Сервис frontend подключен к сетям front-tier и back-tier, что позволяет ему взаимодействовать как с внешними клиентами, так и с бекендом.
  • Сервис backend подключен к сетям back-tier и db-tier, что позволяет ему взаимодействовать как с фронтендом, так и с базой данных.
  • Сервис database подключен только к сети db-tier, что обеспечивает изоляцию базы данных от внешнего доступа.

Практические рекомендации:

  • Используйте изоляцию: Разделение сетей помогает ограничить доступ сервисов к базам данных или другим критическим ресурсам.
  • Проверка связи: Убедитесь, что сервисы могут взаимодействовать друг с другом через общие сети, используя команды ping или curl.
  • Оптимизация: Используйте сеть overlay, если ваш проект предполагает работу в кластере или на нескольких хостах.

Этот пример иллюстрирует, как создавать сетевую изоляцию и одновременно обеспечивать взаимодействие между различными уровнями приложения.

3
Задача
Модуль 2: Fullstack, 15 уровень, 4 лекция
Недоступна
Создание и проверка bridge сети
Создание и проверка bridge сети
3
Задача
Модуль 2: Fullstack, 15 уровень, 4 лекция
Недоступна
Использование сети в Docker Compose
Использование сети в Docker Compose
3
Задача
Модуль 2: Fullstack, 15 уровень, 4 лекция
Недоступна
Создание сети macvlan
Создание сети macvlan
3
Задача
Модуль 2: Fullstack, 15 уровень, 4 лекция
Недоступна
Настройка сети для микросервисов
Настройка сети для микросервисов
1
Опрос
Сетевые настройки Docker, 15 уровень, 4 лекция
Недоступен
Сетевые настройки Docker
Сетевые настройки Docker
Комментарии (5)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ivan Уровень 59
4 июня 2025
У меня дежавю или эта статья уже была пару страниц назад?
Азамат Уровень 5
10 апреля 2025
Сервис backend подключен к сетям back-tier и db-tier, что позволяет ему взаимодействовать как с фронтендом, так и с базой данных. разве с фронтендом?
17 апреля 2025
да с фронтендом, потому что у фронтенда тоже доступна эта сеть
Vladimir Ovsyannikov Уровень 51
1 сентября 2025
Не учи тимлида из Майкрософт :)
Slevin Уровень 2
9 октября 2025
🤣🤣🤣