5.1 Настройка сетей
Давайте еще раз детально рассмотрим, как настроить сети и тома для нашего многоконтейнерного приложения. Это обеспечит правильное взаимодействие между сервисами и долговременное хранение данных.
Docker-сети позволяют контейнерам взаимодействовать друг с другом. В нашем приложении мы будем использовать bridge-сеть для связи между фронтендом, бекендом и базой данных.
Создание сети
Мы уже определили сеть task-network в файле docker-compose.yml:
networks:
task-network:
driver: bridge
Где:
- task-network: имя сети, которая будет использоваться для взаимодействия контейнеров.
- driver:
bridge: тип сети. Сетьbridgeявляется стандартной для связи контейнеров на одном хосте.
Подключение сервисов к сети
Мы подключили все сервисы к этой сети в файле docker-compose.yml. Убедимся, что каждый сервис правильно подключен:
Пример для фронтенда:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
Пример для бекенда:
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
Пример для базы данных:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
5.2 Настройка томов
Docker-тома позволяют сохранять данные контейнеров на хостовой системе, обеспечивая их долговременное хранение. В нашем приложении мы будем использовать том для хранения данных базы данных PostgreSQL.
Создание тома
Мы уже определили том db-data в файле compose.yaml:
volumes:
db-data:
Где:
-
db-data: имя тома, который будет использоваться для хранения данных базы данных PostgreSQL.
Подключение тома к сервису базы данных
Мы подключили том db-data к сервису базы данных в файле docker-compose.yml. Убедимся, что это сделано правильно:
Пример для базы данных:
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
Где:
-
volumes: определяет, какие тома будут подключены к контейнеру. -
db-data:/var/lib/postgresql/data: связывает томdb-dataс директорией/var/lib/postgresql/dataвнутри контейнера. Эта директория используется PostgreSQL для хранения данных.
5.3 Полный файл compose.yaml
Для ясности и завершенности приведем полный файл compose.yaml, включающий настройки сетей и томов:
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
networks:
task-network:
driver: bridge
volumes:
db-data:
Проверка настроек сетей и томов
После настройки сетей и томов, убедитесь, что все правильно настроено и работает корректно:
- 1. Запуск контейнеров:
Terminal
docker compose up - 2. Проверка сети:
- Используйте команду
docker network ls, чтобы убедиться, что сетьtask-networkбыла создана. - Используйте команду
docker network inspect task-network, чтобы проверить, что все контейнеры подключены к этой сети.
- Используйте команду
- 3. Проверка томов:
- Используйте команду
docker volume ls, чтобы убедиться, что томdb-dataбыл создан. - Используйте команду
docker volume inspect db-data, чтобы проверить детали тома.
- Используйте команду
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ