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
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ