Найти тему
КУЗИНОБИТ

Урок 5: Работа с сетью (Networks) в Docker.

Оглавление

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

Основы сетей в Docker.

Docker предоставляет несколько сетевых драйверов по умолчанию:

  1. bridge (мост): Используется по умолчанию. Контейнеры, подключённые к мосту, могут общаться друг с другом на одном хосте.
  2. host (хост): Контейнер использует сетевой стек хост-машины напрямую.
  3. none (отсутствие сети): Контейнер изолирован от сети.

Вы также можете создавать пользовательские сети для более гибкого управления.

Мост (Bridge Network).

При запуске контейнера без указания сети Docker подключает его к сети bridge, которая позволяет контейнерам на одном хосте общаться друг с другом.

Просмотр сетей:

docker network ls

Создание bridge:

docker network create mybridge

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

docker run -d --name db --network mybridge postgres
docker run -d --name web --network mybridge nginx

Теперь контейнеры db и web могут общаться друг с другом по имени контейнера.

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

Внутри пользовательской сети контейнеры могут обращаться друг к другу по имени.

Пример подключения из контейнера web к контейнеру db:

docker exec -it web ping db

Пример: Запуск приложения с базой данных и веб-сервером.

Предположим, у нас есть приложение, которое состоит из веб-сервера Nginx и базы данных PostgreSQL. Нам нужно, чтобы веб-сервер мог подключаться к базе данных.

Шаг 1: Создаём пользовательскую сеть.

docker network create app-network

Шаг 2: Запускаем базу данных в этой сети.

docker run -d --name mypostgres --network app-network -e POSTGRES_PASSWORD=mysecretpassword postgres

Шаг 3: Запускаем веб-сервер в той же сети.

docker run -d --name mynginx --network app-network nginx

Шаг 4: Настраиваем веб-сервер для подключения к базе данных.

В реальной ситуации вам нужно будет настроить ваше приложение или веб-сервер так, чтобы оно могло подключаться к базе данных по имени контейнера mypostgres.

Сетевые алиасы.

Вы можете назначить контейнеру сетевой алиас для удобства.

docker run -d --name mypostgres --network app-network --network-alias db -e POSTGRES_PASSWORD=mysecretpassword postgres

Теперь к контейнеру mypostgres можно обращаться по имени db.

Домашнее задание.

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

1. Создайте пользовательскую сеть mynetwork.

2. Запустите контейнеры redis и alpine в этой сети.

3. Из контейнера myalpine попробуйте подключиться к redis с помощью команды redis-cli.

Задание 2: Использование сетевых алиасов.

1. Перезапустите контейнер redis, назначив ему сетевой алиас cache.

2. Из контейнера myalpine подключитесь к redis по имени cache.

Задание 3*: Исследование сетевых драйверов.

1. Создайте сеть с драйвером host.

2. Запустите контейнер в этой сети и проверьте, что он использует сетевой стек хоста.

3. Попробуйте открыть http://localhost в браузере и убедитесь, что Nginx доступен без указания порта.

4. Объясните, какие преимущества и недостатки имеет такой подход.

Что дальше?

В следующем уроке мы познакомимся с Docker Compose. Вы узнаете, как описывать и запускать многоконтейнерные приложения с помощью YAML-файлов, как управлять ими и масштабировать. Это значительно упростит вашу работу с Docker.