Создание сетей – один из основополагающих аспектов работы с контейнерами в Docker.
Используя Docker Compose, вы можете легко соединить несколько контейнеров и управлять сложными приложениями, состоящими из нескольких сервисов.
В этой статье мы рассмотрим, как эффективно соединить два контейнера с помощью Docker Compose.
К концу статьи вы получите четкое представление о том, как определять сети в конфигурации и обеспечивать бесперебойную связь между сервисами.
Как соединить два контейнера с помощью Docker-Compose
ПОНИМАНИЕ СЕТЕВОГО ВЗАИМОДЕЙСТВИЯ В DOCKER
Правильное определение сетей в Docker Compose имеет решающее значение для взаимодействия контейнеров. Контейнеры в одной сети могут взаимодействовать, используя только имена своих служб.
Подключение контейнеров с Docker Compose предполагает создание файла docker-compose.yml, в котором указываются сервисы и сеть, через которую они будут взаимодействовать.
Давайте погрузимся в настройку.
Пошаговые инструкции
Создайте файл docker-compose.yml
Начните с создания нового каталога и файла docker-compose.yml в нем.
В этом файле определяются службы и сети для вашего приложения.
Определите сервисы
Откройте файл docker-compose.yml и определите сервисы, которые вы хотите подключить.
У вас есть два варианта сетевого взаимодействия: использовать явную сеть или позволить Docker создать сеть по умолчанию.
Вариант 1: Явная сеть
Этот метод дает вам больше контроля над сетевым взаимодействием за счет явного определения пользовательской сети с именем my_network.
version: '3'
services:
web:
image: nginx
networks:
- my_network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
networks:
- my_network
networks:
my_network:
В этой настройке:
- Явно создается пользовательская сеть my_network.
- Службы web и db прикреплены к my_network.
- Это изолирует службы от других контейнеров, если только они не добавлены в ту же сеть вручную.
🐳 Как лучше всего управлять правами для общих томов Docker?
Вариант 2: Сеть по умолчанию (создается автоматически)
Если вы не определили сеть, Docker Compose автоматически создаст сеть с именем your_project_default.
Контейнеры по-прежнему могут взаимодействовать, используя имена служб.
version: '3'
services:
web:
image: nginx
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
В этой установке:
- Docker Compose автоматически создает сеть с именем your_project_default.
- К этой сети по умолчанию подключены web и db.
- Контейнеры по-прежнему могут взаимодействовать, используя имена служб (например, db).
Основные различия между явными сетями и сетями по умолчанию
Характеристика | Явная сеть | Сеть по умолчанию |
---|---|---|
Имя сети | Определяется пользователем (например, my_network) | Автоматически создается |
Разрешение имени службы | Да | Да |
Множественные сети | Да (можно назначать службы для нескольких сетей) | Нет (все службы находятся в одной сети по умолчанию) |
Изоляция | Да (только контейнеры в одной пользовательской сети могут взаимодействовать) | Да (взаимодействуют только контейнеры в одном проекте) |
Требуется ручная очистка? | Да (сеть удаляется при остановке контейнеров) | Да (сеть по умолчанию удаляется при остановке контейнеров) |
Какой вариант выбрать?
- Используйте явную сеть, если вам нужно более эффективное управление сетью, несколько сетей или изоляция служб.
- Используйте сеть по умолчанию, если все службы должны автоматически взаимодействовать в рамках одного проекта без дополнительной настройки.
Запустите установку Docker Compose
Запустив файл docker-compose.yml, запустите свои сервисы с помощью следующей команды.
Эта команда запустит ваши службы в отсоединенном режиме, позволяя им работать в фоновом режиме.
Проверка связи контейнеров: Чтобы проверить, могут ли контейнеры взаимодействовать, вы можете войти в веб-контейнер и выполнить ping контейнера базы данных, используя имя его службы.
Затем запустите контейнер docker Inside:
root@container:/# apt update && apt install -y iputils-ping root@container:/# ping db
Всегда используйте конкретные имена служб, чтобы обеспечить ясность в конфигурациях и избежать потенциальных конфликтов.
Заключение
Соединение контейнеров с помощью Docker Compose – это простой процесс, который улучшает взаимодействие между службами в ваших приложениях.
Используя сети Docker, вы можете гарантировать, что ваши сервисы логически сгруппированы и могут эффективно взаимодействовать друг с другом.
В этом руководстве приведен практический пример настройки базового соединения веб-службы и службы базы данных.
По мере создания более сложных приложений понимание этих концепций сетевого взаимодействия станет жизненно важным.
см. также: