Как запустить MongoDB в контейнере Docker — CloudSavvy IT

Иллюстрация, показывающая логотип MongoDB

MongoDB — это Документно-ориентированный механизм базы данных NoSQL, завоевавший популярность среди разработчиков благодаря своей модели хранения, подобной JSON. MongoDB часто обеспечивает более прямое сопоставление кода и постоянных данных, облегчая быструю итерацию и помогая устранить значительное несоответствие импеданса традиционных баз данных SQL.

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

В этом руководстве мы покажем вам, как начать работу с MongoDB в Docker. Ключевым моментом является хранение данных: контейнеры Docker по умолчанию недолговечны и теряют свои данные при остановке. Вам нужно будет смонтировать том в свой контейнер MongoDB, чтобы обеспечить постоянство.

Запуск контейнера MongoDB

Вы можете запустить одноразовый контейнер MongoDB с помощью docker run:

docker run -d -p 27017: 27017 —name example-mongo mongo: latest

Это даст вам работающий сервер с последней версией MongoDB. Он использует официальное изображение, доступное на Docker Hub. Флаг -d (отсоединить) означает, что контейнер будет работать в фоновом режиме отдельно от вашего процесса оболочки.

Порт контейнера 27017, по умолчанию MongoDB, привязан к порту 27017 на вашем хосте. Вы сможете подключиться к своему экземпляру Mongo на localhost: 27017. Если вы хотите изменить номер порта, измените первую часть флага -p, например 9000: 27017, чтобы использовать localhost: 9000.

Образ MongoDB также включает оболочку mongo. Команда docker exec предоставляет способ доступа к нему в работающем контейнере:

docker exec -it пример-монго монго

Это запустит интерактивный Сессия оболочки Mongo в вашем терминале. Он идеально подходит для быстрого взаимодействия с вашим экземпляром базы данных без добавления каких-либо внешних зависимостей.

Вы можете проверить журналы Mongo с помощью команды docker logs:

журналы докеров example-mongo —follow

Флаг —follow означает, что журналы будут постоянно передаваться на ваш терминал.

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

Если вы развертываете Mongo в Docker, скорее всего, вы захотите подключиться из другого контейнера, такого как сервер API. Лучше всего присоединиться к общей сети Docker. Это означает, что вам не нужно публиковать порты Mongo на вашем хосте, уменьшая поверхность атаки.

docker network создать mongo-network docker run -d —network mongo-network —name example-mongo mongo: latest

Ваш «клиентский» контейнер тоже должен присоединиться к монго-сети. Он сможет ссылаться на контейнер по имени в строках подключения MongoDB. В этом примере он может получить доступ к базе данных, связавшись с example-mongo: 27017.

Сохранение данных с томами

Вы должны использовать тома Docker, если вы будете размещать настоящую базу данных в своем контейнере Mongo. Использование тома сохраняет ваши данные, поэтому они не будут потеряны при остановке контейнера или перезапуске демона Docker.

Образ MongoDB настроен для хранения всех своих данных в каталоге / data / db файловой системы контейнера. Подключение тома к этому месту гарантирует, что данные будут сохраняться вне контейнера.

docker run -d -p 27017: 27017 —name example-mongo -v mongo-data: / data / db mongo: latest

Эта версия команды docker run создает новый том Docker с именем mongo-data и монтирует его в контейнер. Том будет управлять Docker; вы можете увидеть это, запустив docker volume ls.

Добавьте данные в Mongo:

используйте test-db db.demos.save ({foo: «bar»})

Затем перезапустите контейнер:

докер перезапуск пример-монго

Ранее добавленные данные останутся нетронутыми, поскольку Docker повторно подключит том после перезапуска. Вы можете проверить это, повторно подключившись к Mongo и запросив коллекцию демонстраций:

используйте test-db db.demos.find ({foo: «bar»})

Вы можете удалить контейнер и запустить совершенно новый с тем же объемом mongo-data. Поскольку файлы тома по-прежнему будут существовать на вашем хосте, Docker смонтирует их обратно в контейнер для замены. Mongo автоматически пропускает обычную процедуру инициализации базы данных, если каталог данных уже заполнен при запуске контейнера.

Тома сохраняются до тех пор, пока вы не удалите их с помощью команды docker volume rm или не используете флаг —volumes при уничтожении контейнера с помощью докер rm.

Добавление аутентификации

В свежих контейнерах MongoDB отсутствует аутентификация, поэтому любой может подключиться к вашему серверу. Не раскрывайте порты контейнера в сетевой системе, к которой может получить доступ злоумышленник. Для надлежащей защиты вашей базы данных следует использовать систему аутентификации Mongo.

Образ Mongo Docker обеспечивает удобный быстрый старт для относительно сложных Mongo система аутентификации. Вы можете добавить начальную учетную запись пользователя, установив переменные среды MONGO_INITDB_ROOT_USERNAME и MONGODB_INITDB_ROOT_PASSWORD при создании контейнера:

docker run -d -p 27017: 27017 —name example-mongo -v mongo-data: / data / db -e MONGODB_INITDB_ROOT_USERNAME = example-user -e MONGODB_INITDB_ROOT_PASSWORD = example-pass mongo: latest

Это запустит базу данных с новой учетной записью пользователя с именем example-user. Пользователю будет назначена роль root в базе данных аутентификации администратора с предоставлением привилегий суперпользователя.

Учитывая полномочия, связанные с этой учетной записью, предоставление ее пароля в виде текстовой переменной среды может быть проблематичным. Более безопасный подход — ввести пароль в виде файла:

docker run -d -p 27017: 27017 —name example-mongo -v mongo-data: / data / db -e MONGODB_INITDB_ROOT_USERNAME = example-user -e MONGODB_INITDB_ROOT_PASSWORD_FILE = / run / secrets / mongo-root- pw mongo: последний

Добавление суффикса к переменным среды изображения с помощью _FILE указывает Mongo на чтение содержимого указанного файла вместо использования значения как есть. Фактический путь к файлу произвольный — либо смонтируйте файл с вашего хост-компьютера, либо используйте Docker Secrets. В любом случае ваш пароль не будет виден при использовании docker inspect для просмотра переменных контейнера.

Настройка вашего сервера

Самый простой способ предоставить пользовательские значения конфигурации Mongo — использовать флаги, предлагаемые двоичный файл mongod. Образ Docker предварительно настроен для передачи своих флагов запуска докера в mongod.

Вот пример, где Монго установить, чтобы слушать порт 9000 вместо 27017 по умолчанию:

docker run -d —name example-mongo -v mongo-data: / data / db mongo: latest —port 9000

Вы можете добавить файл конфигурации Mongo, установив его в свой контейнер, а затем используя флаг —config, чтобы указать Mongo, где искать:

docker run -d —name example-mongo -v mongo-data: / data / db -v ./mongo.conf:/etc/mongo/mongo.conf mongo: latest —config / etc / mongo / mongo.conf

Необходимо использовать флаг —config — по умолчанию Mongo не загружает настройки ни по одному пути к файлу.

Образ Docker предоставляет механизм для заполнения вашей базы данных и запуска сценариев начальной загрузки при первом запуске. Любые файлы .sh или .js, помещенные в каталог /docker-entrypoint-initdb.d, будут выполняться в алфавитном порядке. Файлы .js будут обрабатываться как сценарии Mongo и запускаться в тестовой базе данных. Вы можете изменить эту базу данных по умолчанию, установив для переменной среды MONGODB_INITDB_DATABASE имя пользовательской схемы.

Заключение

Запуск MongoDB в Docker обеспечивает изоляцию и переносимость вашей базы данных. Вы можете быстро запускать новые экземпляры, не устанавливая сервер Mongo вручную. Контейнеры ваших приложений могут напрямую связываться с Mongo через общую сеть Docker.

Образ Mongo на Docker Hub имеет теги для все активно поддерживаемые версии, включая 4.4 и 5.0. Последний тег всегда указывает на новейший выпуск, в настоящее время 5.0, поэтому его использование подвергает вас риску получения нежелательных ударов основной версии. При запуске контейнеров безопаснее указывать конкретную версию.

Официальный образ также можно использовать в качестве основы для предварительно настроенных пользовательских образов. Создание файла Dockerfile, который добавляет ваш файл конфигурации, переопределяет КОМАНДУ для ее включения и копий в ваши сценарии заполнения, даст вам возможность вызвать новый экземпляр базы данных с меньшим количеством флагов запуска докера.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *