Введение
Сетевое взаимодействие в Docker — это фундаментальный аспект оркестрации, позволяющий контейнерам общаться друг с другом и с внешним миром. Это испытание проведет вас через основные концепции сетей Docker: от создания и управления сетями до подключения и отключения контейнеров.
Выполнив это задание, вы получите практический опыт работы с сетевыми командами Docker и поймете, как настраивать связь между контейнерами. Эти навыки критически важны для разработки и развертывания многоконтейнерных приложений в среде Docker.
Давайте погрузимся в мир сетей Docker!
Создание сети
На этом этапе вы создадите свою первую сеть Docker. Это основа для объединения контейнеров и обеспечения связи между ними.
Задачи
- Создайте новую сеть типа bridge с именем
my-network, используя командуdocker network create. - Убедитесь, что сеть создана, просмотрев список всех сетей Docker.
Требования
- Выполняйте все операции в директории
/home/labex/project. - При создании сети используйте драйвер bridge по умолчанию.
Пример
После выполнения этого шага вы должны увидеть my-network в списке при запуске docker network ls:
NETWORK ID NAME DRIVER SCOPE
abcdef123456 my-network bridge local
Запуск контейнеров в сети
Теперь, когда у нас есть сеть, давайте запустим несколько контейнеров и подключим их к ней. Этот этап продемонстрирует, как запускать контейнеры внутри определенной сети — ключевую концепцию сетевого взаимодействия Docker.
Задачи
- Запустите контейнер с именем
container1, используя образnginx, и подключите его кmy-network. - Запустите еще один контейнер с именем
container2, используя образhttpd, и также подключите его кmy-network. - Убедитесь, что оба контейнера запущены и подключены к
my-network.
Требования
- Выполняйте все операции в директории
/home/labex/project. - Используйте флаг
--networkпри запуске контейнеров для их подключения кmy-network. - Запустите оба контейнера в фоновом режиме (detached mode).
Пример
После выполнения этого шага вы должны увидеть оба запущенных контейнера при использовании docker ps:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abcdef123456 nginx "..." 2 minutes ago Up 2 minutes 80/tcp container1
fedcba654321 httpd "..." 2 minutes ago Up 2 minutes 80/tcp container2
Проверка связности
На этом этапе вы проверите, могут ли контейнеры взаимодействовать друг с другом через созданную вами сеть. Это критически важный тест для подтверждения правильности сетевой конфигурации.
Задачи
- Используйте команду
docker exec, чтобы запустить оболочку (shell) вcontainer1. - Находясь внутри
container1, используйте командуcurlдля обращения кcontainer2по его имени.
Требования
- Выполняйте все операции в директории
/home/labex/project. - Используйте
container2в качестве имени хоста в командеcurl. - Команда
curlдолжна обращаться к стандартному HTTP-порту (80) наcontainer2.
Пример
После выполнения команды curl из container1 вы должны увидеть содержимое стандартной страницы Apache HTTP Server:
<!DOCTYPE html>
<html><body><h1>It works!</h1></body></html>
Подключение контейнера к нескольким сетям
На этом этапе вы узнаете, как подключить один контейнер к нескольким сетям одновременно. Это продвинутая концепция, полезная для создания сложных сетевых топологий или постепенной миграции сервисов между сетями.
Задачи
- Создайте новую сеть типа bridge с именем
my-network2. - Подключите
container2кmy-network2, сохранив его подключение кmy-network. - Убедитесь, что
container2теперь подключен к обеим сетям.
Требования
- Выполняйте все операции в директории
/home/labex/project. - Используйте команду
docker network connectдля добавленияcontainer2вmy-network2. - Используйте команду
docker inspectдля проверки сетевых подключений.
Пример
После подключения container2 к my-network2 при инспектировании контейнера вы должны увидеть обе сети:
"Networks": {
"my-network": {
...
},
"my-network2": {
...
}
}
Отключение контейнера от сети
На этом этапе вы научитесь удалять контейнер из сети без его остановки. Это полезно, когда нужно изолировать контейнер или при реорганизации сетевой архитектуры.
Задачи
- Отключите
container2от сетиmy-network, используя командуdocker network disconnect. - Убедитесь, что
container2больше не подключен кmy-network.
Требования
- Выполняйте все операции в директории
/home/labex/project. - Используйте команду
docker network disconnectдля удаленияcontainer2изmy-network. - Используйте команду
docker network inspectдля проверки отключения.
Пример
После отключения container2 от my-network вы не должны видеть его в списке при инспектировании сети my-network:
$ docker network inspect my-network
[
{
"Name": "my-network",
...
"Containers": {
"container1": {
...
}
},
...
}
]
Удаление сети
На последнем этапе вы узнаете, как удалять сеть Docker, когда она больше не нужна. Правильная очистка неиспользуемых ресурсов — важная часть эффективного управления средой Docker.
Задачи
- Отключите
container2отmy-network2, если он все еще подключен. - Удалите сеть
my-network2, используя командуdocker network rm. - Убедитесь, что сеть
my-network2была удалена.
Требования
- Выполняйте все операции в директории
/home/labex/project. - Перед удалением сети убедитесь, что к ней не подключен ни один контейнер.
- Используйте команду
docker network lsдля проверки удаления.
Пример
После удаления my-network2 она должна исчезнуть из списка при запуске docker network ls:
NETWORK ID NAME DRIVER SCOPE
abcdef123456 my-network bridge local
ghijkl789012 bridge bridge local
mnopqr345678 host host local
stuvwx901234 none null local
Резюме
Поздравляем с завершением испытания по основам сетей Docker! Вы успешно освоили ключевые концепции сетевого взаимодействия, включая:
- Создание пользовательских сетей Docker.
- Запуск контейнеров в определенных сетях.
- Тестирование связности между контейнерами.
- Подключение контейнеров к нескольким сетям одновременно.
- Отключение контейнеров от сетей.
- Удаление сетей Docker.
Эти навыки составляют основу эффективного управления инфраструктурой Docker и будут бесценны при работе с более сложными контейнеризированными приложениями. Помните, что правильная настройка сети критически важна для изоляции контейнеров, безопасности и эффективного взаимодействия между сервисами.
В ходе этого испытания вы научились создавать изолированные среды, настраивать связь между ними и динамически управлять сетевыми подключениями. Эти возможности позволяют проектировать гибкие архитектуры, адаптирующиеся к меняющимся требованиям.
Продолжая изучение Docker, обратите внимание на такие продвинутые темы, как overlay-сети для кластеров из нескольких хостов, сетевые плагины и интеграция сетей Docker с платформами оркестрации, такими как Kubernetes. Также стоит углубиться в вопросы сетевой безопасности, например, использование сетевых политик для контроля трафика.
Продолжайте практиковаться, и вы сможете проектировать и управлять сложнейшими сетевыми архитектурами в своих будущих проектах. Эффективная сеть — это ключ к созданию масштабируемых и безопасных приложений.



