Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • JupyterHub
    • Soft
  1. ИСиТ
  2. ИППРПО
  3. Практика
  4. Лаб. работа “Docker: Сети”
  • ИСиТ
    • АОС
      • Теория
        • Введение в операционные системы
        • Управление памятью
        • Управление процессами
        • Система ввода-вывода
        • Информационная безопасность
        • Виртуализация
      • Практика
    • РВПсИПП
      • Теория
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
        • Основы Laravel
        • Шаблоны в Laravel
        • Модели и базы данных в Laravel
        • Формы и валидация в Laravel
        • Аутентификация и авторизация в Laravel
        • Создание REST API в Laravel
        • Работа с файлами и изображениями в Laravel
        • Тестирование и отладка в Laravel
        • Введение в фреймворк Symfony
        • Маршруты и контроллеры в Symfony
        • Шаблоны и Twig в Symfony
        • Формы и валидация в Symfony
        • Доступ к базам данных в Symfony
        • Аутентификация и авторизация в Symfony
        • Сервисы и зависимости в Symfony
        • Создание REST API в Symfony
        • Работа с файлами и медиа в Symfony
        • Сравнение и выбор фреймворка
        • Развертывание веб-приложения
      • Практика
        • Лаб. работа 1 “Создание нового приложения Laravel”
        • Лаб. работа 2 “Добавление главной страницы и базовых маршрутов”
        • Лаб. работа 3 “Создание моделей, миграций и сидеров”
        • Лаб. работа 4 “Создание индексных страниц и пагинация”
        • Лаб. работа 5 “Создание форм для работы с сущностями”
        • Лаб. работа 6 “Работа с файлами (эмуляция S3-хранилища)”
        • Лаб. работа “Создание маршрутов в Laravel”
        • Лаб. работа “Работа с базами данных в Laravel”
        • Лаб. работа “Работа с формами в Laravel”
        • Лаб. работа “Аутентификация и авторизация в Laravel”
        • Лаб. работа “Работа с файлами в Laravel”
        • Лаб. работа “Тестирование и оптимизация в Laravel”
        • Лаб. работа “Создание REST API в Laravel”
        • Лаб. работа “Основы Symfony”
        • Лаб. работа “Шаблоны и представления в Symfony”
        • Лаб. работа “Работа с базами данных в Symfony”
        • Лаб. работа “Фомы и аутентификация в Symfony”
        • Лаб. работа “Сервисы и зависимости в Symfony”
        • Лаб. работа “REST API в Symfony”
        • Лаб. работа “Работа с медиа контентом в Symfony”
        • Лаб. работа “Создание и развертывание проекта”
        • Расчетно-графическая работа: Разработка веб-приложения с использованием Laravel
          • Методические рекомендации по выполнению работы
          • Варианты заданий для расчетно-графической работы
    • ПСП
      • Теория
        • Введение
        • Протокол HTTP
        • Программирование с использованием сокетов
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб. работа “Массивы в PHP”
        • Лаб. работа “Создание веб-приложений с использованием Slim”
      • Темы курсовых проектов по дисциплине “Программирование сетевых приложений”
    • Компьютерные сети
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Введение в PHP
        • Протокол HTTP
        • Введение в компьютерные сети
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”
    • РиОИИС
      • Теория
        • Классификация оптимизационных задач
        • Генетические алгоритмы
        • Системы массового обслуживания
        • Теория игр
        • Машинное обучение
        • Глубокое обучение (Deep learning)
        • Основы функционального программирования
        • Основы программирования на Haskell
        • Введение в логическое программирование
        • Инференция и рассуждения в логическом программировании
        • Разработка экспертных систем
        • Интеллектуальные системы и их архитектура
        • Веб-скрэйпинг
        • Сбор данных с открытых API
      • Практика
        • JupyterHub
        • Лаб. работа "Методы одномерной оптимизации"
          • Лаб. работа “Методы одномерной оптимизации”
        • Лаб. работа “Методы многомерной оптимизации”
        • Лаб. работа “Основы программирования на Python”
        • Лаб. работа “Функции в Python”
        • Лаб. работа “Рекурсия в Python”
        • Лаб. работа “Итераторы в Python”
        • Лаб. работа “Генетические алгоритмы”
        • Лаб. работа “Haskell”
        • Лаб. работа “Логическое программирование”
        • Лаб. работа “Сбор данных с помощью веб-скрейпинга”
        • Лаб. работа “Предобработка данных”
        • Лаб. работа “Машинное обучение: классификация”
        • Лаб. работа “Создание и обучение простейших нейронных сетей”
        • Лаб. работа “Системы массового обслуживания”
        • Лаб. работа “Обработка естественного языка”
        • Лаб. работа “Компьютерное зрение”
        • Лаб. работа “Нейросети и глубокое обучение”
    • КСКР
      • Практика
        • Лаб. работа “Одномерные и двумерные массивы в C#”
        • Лаб. работа “Обращение матриц в C#”
    • Системное программирование
      • Теория
        • Управление памятью в Windows
        • Файловые операции в Windows
        • Управление процессами в Windows
        • Графический интерфейс Windows
        • ОС Unix
      • Практика
        • Лаб. работа “Работа с динамической памятью в Windows”
        • Лаб. работа “Операции с файлами в Windows”
        • Лаб. работа “Управление процессами в Windows”
        • Лаб. работа “Работа с виртуальной машиной Linux”
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Работа с файлами в Linux”
        • Лаб. работа “Работа с процессами в Linux”
    • ИППРПО
      • Теория
      • Практика
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Управление процессами в Shell”
        • Лаб. работа “Управление файловой системой в Shell”
        • Лаб. работа “Управление пакетами в ОС Linux”
        • Лаб. работа “Сетевые инструменты в Linux”
        • Лаб. работа “Мониторинг и анализ системы Linux”
        • Лаб. работа “Основы Docker. Управление контейнерами”
        • Лаб. работа “Docker: Сети”
        • Лаб. работа "Docker: Образы"
        • Лаб. работа “Docker Compose: Управление многоконтейнерными приложениями”
        • Лаб. работа “CI/CD с GitLab”

Содержание

  • Лабораторная работа по теме “Docker: Сети”
    • Цель работы
    • Краткие теоретические сведения
    • Краткий справочник по командам работы с сетями
    • Требования к окружению
    • Порядок выполнения работы
    • Задания для самостоятельного выполнения
    • Контрольные вопросы
    • Требования к отчету
  1. ИСиТ
  2. ИППРПО
  3. Практика
  4. Лаб. работа “Docker: Сети”

Лаб. работа “Docker: Сети”

Инструменты промышленной разработки
Практика
Автор

Бизюк Андрей

Дата публикации

16 декабря 2025 г.

Лабораторная работа по теме “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. Изучение существующих сетей

  1. Просмотр доступных сетей Посмотрите список всех сетей, доступных в Docker:

    docker network ls

    Вы должны увидеть три стандартные сети: bridge, host и none.

  2. Детальная информация о сетях Получите подробную информацию о стандартной сети bridge:

    docker network inspect bridge

    Обратите внимание на параметры сети, подсеть, шлюз и подключенные контейнеры.

Часть 2. Создание и управление пользовательскими сетями

  1. Создание пользовательской сети Создайте новую сеть типа bridge с пользовательскими параметрами:

    docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 my-custom-network

    Проверьте, что сеть создана:

    docker network ls
  2. Просмотр информации о созданной сети Получите детальную информацию о вашей новой сети:

    docker network inspect my-custom-network

    Найдите информацию о подсети, шлюзе и конфигурации IPAM.

Часть 3. Работа с контейнерами в пользовательской сети

  1. Запуск контейнеров в пользовательской сети Запустите два контейнера в вашей пользовательской сети:

    # Запуск первого контейнера с именем
    docker run -d --name web-server --network my-custom-network nginx:alpine
    
    # Запуск второго контейнера для тестирования связи
    docker run -d --name client --network my-custom-network alpine sleep 3600

    Проверьте, что контейнеры запущены:

    docker ps
  2. Тестирование сетевой связи по именам Подключитесь к контейнеру client и проверьте связь с web-server по имени:

    docker exec -it client sh
    
    # Внутри контейнера выполните:
    ping web-server
    nslookup web-server
    wget -O- http://web-server
    exit

    Обратите внимание, что Docker автоматически обеспечивает DNS-резолюцию имен контейнеров в пользовательской сети.

  3. Проверка IP-адресов контейнеров Узнайте IP-адреса контейнеров:

    docker inspect web-server | grep IPAddress
    docker inspect client | grep IPAddress

    Убедитесь, что адреса находятся в диапазоне вашей подсети (172.20.0.0/16).

Часть 4. Назначение статических IP-адресов

  1. Запуск контейнера с статическим IP Остановите и удалите существующие контейнеры, затем запустите новые со статическими IP:

    # Остановка и удаление
    docker stop web-server client
    docker rm web-server client
    
    # Запуск с статическими IP
    docker run -d --name web-server --network my-custom-network --ip 172.20.0.10 nginx:alpine
    docker run -d --name client --network my-custom-network --ip 172.20.0.20 alpine sleep 3600
  2. Проверка назначенных IP Проверьте, что контейнерам назначены указанные IP-адреса:

    docker inspect web-server | grep IPAddress
    docker inspect client | grep IPAddress

Часть 5. Работа с портами и пробросом

  1. Запуск контейнера с пробросом портов Запустите веб-сервер с пробросом порта на хост:

    docker run -d --name public-web -p 8080:80 --network my-custom-network nginx:alpine
  2. Проверка доступности сервиса Проверьте, что веб-сервер доступен на хосте:

    curl http://localhost:8080

    Также проверьте доступность из другого контейнера в той же сети:

    docker exec client wget -O- http://public-web

Часть 6. Изоляция сетей

  1. Создание изолированных сетей Создайте две отдельные сети:

    docker network create --driver bridge frontend-network
    docker network create --driver bridge backend-network
  2. Запуск контейнеров в разных сетях Запустите контейнеры в разных сетях:

    # Frontend сеть
    docker run -d --name frontend-app --network frontend-network nginx:alpine
    
    # Backend сеть
    docker run -d --name backend-db --network backend-network postgres:alpine
  3. Проверка изоляции Попробуйте установить связь между контейнерами из разных сетей:

    docker exec frontend-app ping backend-db

    Соединение должно быть невозможно, что демонстрирует сетевую изоляцию.

Часть 7. Подключение контейнера к нескольким сетям

  1. Подключение существующего контейнера к другой сети Подключите frontend-app к backend-network:

    docker network connect backend-network frontend-app
  2. Проверка межсетевого взаимодействия Теперь проверьте связь между контейнерами:

    docker exec frontend-app ping backend-db

    Связь должна работать, так как frontend-app теперь подключен к обеим сетям.

Часть 8. Очистка окружения

  1. Остановка и удаление всех контейнеров Остановите и удалите все созданные контейнеры:

    docker stop $(docker ps -q)
    docker rm $(docker ps -aq)
  2. Удаление пользовательских сетей Удалите созданные сети:

    docker network rm my-custom-network frontend-network backend-network

    Проверьте, что остались только стандартные сети:

    docker network ls

Задания для самостоятельного выполнения

  1. Создание сети для микросервисов Создайте сеть 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.

  2. Настройка сетевой изоляции Создайте две сети: public-net и private-net. В public-net разместите nginx-сервер с пробросом порта 8080. В private-net разместите контейнер с PostgreSQL. Убедитесь, что из внешней сети можно достучаться только до nginx, но не до PostgreSQL напрямую.

  3. Исследование DNS-резолюции Запустите контейнер alpine в пользовательской сети. Используйте команды nslookup и dig (установите при необходимости) для исследования DNS-резолюции имен контейнеров. Проверьте, какие DNS-записи создает Docker автоматически.

  4. Настройка множественных сетевых интерфейсов Создайте контейнер, который будет подключен к трем разным сетям одновременно. Проверьте, какие сетевые интерфейсы создаются внутри контейнера и как маршрутизируется трафик между ними.

  5. Мониторинг сетевого трафика Используйте команду docker network inspect для мониторинга сетевого трафика между контейнерами. Запустите несколько контейнеров и создайте сетевую нагрузку между ними с помощью ping, wget или curl. Проанализируйте, как изменяется статистика сети.

Контрольные вопросы

  1. Какие типы сетевых драйверов доступны в Docker и в чем их различие?
  2. В чем преимущество использования пользовательских сетей перед стандартной сетью bridge?
  3. Как Docker обеспечивает DNS-резолюцию имен контейнеров в пользовательских сетях?
  4. Как назначить контейнеру статический IP-адрес при запуске?
  5. Что такое сетевая изоляция в Docker и как ее реализовать?
  6. Как подключить существующий контейнер к дополнительной сети?
  7. Почему важно правильно планировать сетевую архитектуру при развертывании микросервисов?

Требования к отчету

Отчет по лабораторной работе должен содержать:

  1. Титульный лист
  2. Цель работы
  3. Пошаговое описание выполнения работы с приведением всех вводимых команд и их выводов (можно в виде скриншотов или текстовых блоков)
  4. Вывод, в котором необходимо кратко описать полученные знания и навыки
  5. Описание выполненных заданий для самостоятельной работы
Наверх
Лаб. работа “Основы Docker. Управление контейнерами”
Лаб. работа "Docker: Образы"