Лаб. работа “Docker: Сети”
Лабораторная работа по теме “Docker: Сети”
Цель работы
Изучить концепции сетевого взаимодействия в Docker. Получить практические навыки создания и управления пользовательскими сетями, настройки связи между контейнерами, понимания различных типов сетевых драйверов и их применения.
Краткие теоретические сведения
Сети Docker — это механизм, который обеспечивает изолированную сетевую связь между контейнерами и между контейнерами и внешним миром. Docker предоставляет несколько типов сетевых драйверов для различных сценариев использования.
Типы сетевых драйверов Docker:
- bridge — стандартный сетевой драйвер для контейнеров. Создает частную внутреннюю сеть на хосте. Контейнеры получают IP-адреса из частного диапазона и могут общаться друг с другом через сетевой мост.
- host — контейнер использует сетевой стек хоста напрямую, без изоляции. Это обеспечивает максимальную производительность, но снижает изоляцию.
- none — отключает весь сетевой функционал для контейнера. Контейнер не имеет сетевых интерфейсов.
- overlay — используется для создания распределенных сетей между несколькими хостами Docker (в Docker Swarm).
- macvlan — позволяет контейнеру получить MAC-адрес и выглядеть как физическое устройство в сети.
Ключевые концепции:
- Docker0 — стандартный сетевой мост, который Docker создает автоматически.
- Пользовательские сети — сети, создаваемые пользователем для лучшей изоляции и управления.
- DNS-резолюция — Docker предоставляет встроенный DNS-сервер для разрешения имен контейнеров внутри пользовательских сетей.
- Порты — механизм проброса портов позволяет сделать сервисы в контейнерах доступными из внешней сети.
Краткий справочник по командам работы с сетями
Основные команды для управления сетями
docker network ls— список всех сетейdocker network create [OPTIONS] NETWORK— создание новой сетиdocker network rm NETWORK— удаление сетиdocker network inspect NETWORK— просмотр детальной информации о сетиdocker network connect NETWORK CONTAINER— подключение контейнера к сетиdocker network disconnect NETWORK CONTAINER— отключение контейнера от сети
Параметры создания сети
--driverили-d— тип сетевого драйвера (bridge, host, none, overlay)--subnet— подсеть в формате CIDR (например, 172.20.0.0/16)--gateway— шлюз для сети--ip-range— диапазон IP-адресов для контейнеров
Параметры запуска контейнера с сетевыми настройками
--network— подключение контейнера к определенной сети--ip— назначение статического IP-адреса контейнеру--hostname— установка hostname для контейнера--link— связывание контейнеров (устаревший метод, лучше использовать пользовательские сети)
Требования к окружению
- Операционная система: Debian 13 “Trixie” или новее
- Docker Engine установлен и настроен
- Доступ в Интернет для загрузки образов
- Учетная запись пользователя без прав
root
Порядок выполнения работы
Часть 1. Изучение существующих сетей
Просмотр доступных сетей Посмотрите список всех сетей, доступных в Docker:
Вы должны увидеть три стандартные сети:
bridge,hostиnone.Детальная информация о сетях Получите подробную информацию о стандартной сети bridge:
Обратите внимание на параметры сети, подсеть, шлюз и подключенные контейнеры.
Часть 2. Создание и управление пользовательскими сетями
Создание пользовательской сети Создайте новую сеть типа bridge с пользовательскими параметрами:
Проверьте, что сеть создана:
Просмотр информации о созданной сети Получите детальную информацию о вашей новой сети:
Найдите информацию о подсети, шлюзе и конфигурации IPAM.
Часть 3. Работа с контейнерами в пользовательской сети
Запуск контейнеров в пользовательской сети Запустите два контейнера в вашей пользовательской сети:
Проверьте, что контейнеры запущены:
Тестирование сетевой связи по именам Подключитесь к контейнеру client и проверьте связь с web-server по имени:
Обратите внимание, что Docker автоматически обеспечивает DNS-резолюцию имен контейнеров в пользовательской сети.
Проверка IP-адресов контейнеров Узнайте IP-адреса контейнеров:
Убедитесь, что адреса находятся в диапазоне вашей подсети (172.20.0.0/16).
Часть 4. Назначение статических IP-адресов
Запуск контейнера с статическим IP Остановите и удалите существующие контейнеры, затем запустите новые со статическими IP:
Проверка назначенных IP Проверьте, что контейнерам назначены указанные IP-адреса:
Часть 5. Работа с портами и пробросом
Запуск контейнера с пробросом портов Запустите веб-сервер с пробросом порта на хост:
Проверка доступности сервиса Проверьте, что веб-сервер доступен на хосте:
Также проверьте доступность из другого контейнера в той же сети:
Часть 6. Изоляция сетей
Создание изолированных сетей Создайте две отдельные сети:
Запуск контейнеров в разных сетях Запустите контейнеры в разных сетях:
Проверка изоляции Попробуйте установить связь между контейнерами из разных сетей:
Соединение должно быть невозможно, что демонстрирует сетевую изоляцию.
Часть 7. Подключение контейнера к нескольким сетям
Подключение существующего контейнера к другой сети Подключите frontend-app к backend-network:
Проверка межсетевого взаимодействия Теперь проверьте связь между контейнерами:
Связь должна работать, так как frontend-app теперь подключен к обеим сетям.
Часть 8. Очистка окружения
Остановка и удаление всех контейнеров Остановите и удалите все созданные контейнеры:
Удаление пользовательских сетей Удалите созданные сети:
Проверьте, что остались только стандартные сети:
Задания для самостоятельного выполнения
Создание сети для микросервисов Создайте сеть
microservices-netс подсетью 10.10.0.0/24. Запустите три контейнера: nginx (веб-сервер), redis (кэш) и postgres (база данных). Убедитесь, что все контейнеры могут достигать друг друга по именам. Назначьте статические IP-адреса: nginx — 10.10.0.10, redis — 10.10.0.20, postgres — 10.10.0.30.Настройка сетевой изоляции Создайте две сети:
public-netиprivate-net. В public-net разместите nginx-сервер с пробросом порта 8080. В private-net разместите контейнер с PostgreSQL. Убедитесь, что из внешней сети можно достучаться только до nginx, но не до PostgreSQL напрямую.Исследование DNS-резолюции Запустите контейнер alpine в пользовательской сети. Используйте команды
nslookupиdig(установите при необходимости) для исследования DNS-резолюции имен контейнеров. Проверьте, какие DNS-записи создает Docker автоматически.Настройка множественных сетевых интерфейсов Создайте контейнер, который будет подключен к трем разным сетям одновременно. Проверьте, какие сетевые интерфейсы создаются внутри контейнера и как маршрутизируется трафик между ними.
Мониторинг сетевого трафика Используйте команду
docker network inspectдля мониторинга сетевого трафика между контейнерами. Запустите несколько контейнеров и создайте сетевую нагрузку между ними с помощьюping,wgetилиcurl. Проанализируйте, как изменяется статистика сети.
Контрольные вопросы
- Какие типы сетевых драйверов доступны в Docker и в чем их различие?
- В чем преимущество использования пользовательских сетей перед стандартной сетью bridge?
- Как Docker обеспечивает DNS-резолюцию имен контейнеров в пользовательских сетях?
- Как назначить контейнеру статический IP-адрес при запуске?
- Что такое сетевая изоляция в Docker и как ее реализовать?
- Как подключить существующий контейнер к дополнительной сети?
- Почему важно правильно планировать сетевую архитектуру при развертывании микросервисов?
Требования к отчету
Отчет по лабораторной работе должен содержать:
- Титульный лист
- Цель работы
- Пошаговое описание выполнения работы с приведением всех вводимых команд и их выводов (можно в виде скриншотов или текстовых блоков)
- Вывод, в котором необходимо кратко описать полученные знания и навыки
- Описание выполненных заданий для самостоятельной работы