Развёртывания MongoDB в Docker

  • Михаил
  • 8 мин. на прочтение
  • 30
  • 25 Sep 2025
  • 25 Sep 2025

Инструкция и примеры файлов для развёртывания MongoDB в Docker с выносом всех рабочих данных в /mnt/disk_sdb/. Это позволит сохранять данные между перезапусками контейнера и на физическом диске.


1. Подготовка директории на хосте

Создайте директорию для данных MongoDB на вашем хосте (если её ещё нет):

sudo mkdir -p /mnt/disk_sdb/mongodb/data
sudo chown -R 999:999 /mnt/disk_sdb/mongodb/data
  • 999:999 — стандартный UID:GID пользователя mongodb внутри контейнера.

2. Docker Compose файл

Создайте файл docker-compose.yml в удобном месте (например, /opt/mongodb/docker-compose.yml):

version: '3.8'
services:
 mongodb:
   image: mongo:6.0
   container_name: mongodb
   restart: unless-stopped
   environment:
     MONGO_INITDB_ROOT_USERNAME: root
     MONGO_INITDB_ROOT_PASSWORD: your_secure_password
   volumes:
     - /mnt/disk_sdb/mongodb/data:/data/db
   ports:
     - "27017:27017"
   networks:
     - mongodb_network
networks:
 mongodb_network:
   driver: bridge

Пояснения:

  • image: mongo:6.0 — версия MongoDB (можно использовать latest или другую).
  • MONGO_INITDB_ROOT_USERNAME и MONGO_INITDB_ROOT_PASSWORD — учётные данные суперпользователя (обязательно измените пароль!).
  • volumes: - /mnt/disk_sdb/mongodb/data:/data/db — монтирование директории с хоста в контейнер.
  • ports: - "27017:27017" — проброс порта для подключения извне.
  • networks — изоляция сети (опционально, но рекомендуется).

3. Запуск MongoDB

Перейдите в директорию с docker-compose.yml и выполните:

docker-compose up -d

Проверьте статус контейнера:

docker ps

Вывод должен содержать строку с mongodb.


4. Подключение к MongoDB из вашего .NET Core приложения

Обновите appsettings.json в вашем проекте:

{
 "MongoDB": {
   "ConnectionString": "mongodb://root:your_secure_password@localhost:27017",
   "DatabaseName": "SchoolManagementSystem"
 }
}

Пояснения:

  • mongodb://root:your_secure_password@localhost:27017 — строка подключения с учётными данными.
  • SchoolManagementSystem — имя вашей базы данных (можно изменить).

5. Проверка работы

Подключение к MongoDB изнутри контейнера:

docker exec -it mongodb mongosh -u root -p your_secure_password

Если подключение прошло успешно — MongoDB работает корректно.

Проверка данных на диске:

 ls -lh /mnt/disk_sdb/mongodb/data/

Вы должны увидеть файлы базы данных (например, WiredTiger*, collection-*, index-*).


6. Остановка и обновление

Остановка:

docker-compose down

Обновление версии MongoDB:

  1. Остановите контейнер (docker-compose down).
  2. Измените версию в docker-compose.yml (например, на mongo:7.0).
  3. Запустите заново (docker-compose up -d).

7. Резервное копирование

Для резервного копирования данных MongoDB:

docker exec mongodb mongodump --username=root --password=your_secure_password --out=/backup
docker cp mongodb:/backup /mnt/disk_sdb/mongodb/backup_$(date +%Y-%m-%d)

8. Восстановление из резервной копии

docker cp /mnt/disk_sdb/mongodb/backup_2025-09-25 mongodb:/restore
docker exec mongodb mongorestore --username=root --password=your_secure_password /restore

Важно!

  • Безопасность: Всегда используйте сложные пароли и ограничивайте доступ к порту 27017 (например, с помощью ufw или iptables).
  • Права доступа: Убедитесь, что у пользователя mongodb в контейнере есть права на запись в /mnt/disk_sdb/mongodb/data.
  • Мониторинг: Настройте мониторинг дискового пространства на /mnt/disk_sdb.