MongoDB – популярная, открытая база данных документов, обеспечивающая высокую производительность и большую гибкость. Но вы пробовали контейниризовать базу данных MongoDB для ваших проектов? Если нет, то вас ожидает приятный сюрприз!
В этом руководстве вы узнаете, как эффективно развертывать, защищать и управлять MongoDB с помощью Docker. Так что читайте дальше и станьте своим собственным мастером в развертывании контейнеров Docker MongoDB!
Предварительные требования
Это руководство включает практические демонстрации. Чтобы следовать за ним, убедитесь, что у вас есть следующее:
- Машина Ubuntu – в этом руководстве используется Ubuntu 20.04 LTS
- A user with
sudo
permission - Docker – в этом руководстве используется Docker 20.10.9
Загрузка образа Docker MongoDB
Прежде чем вы сможете развернуть и управлять контейнером Docker MongoDB, вам сначала нужно скачать образ MongoDB из Docker Hub, чтобы вы могли запустить контейнер MongoDB локально.
Запустите команду docker
ниже, чтобы загрузить образ MongoDB Community Edition (CE) (pull mongo
), который размещается на Docker Hub. Последняя версия этого образа на момент написания – 4.2.
Как видно ниже, команда автоматически загружает последнюю версию образа и помечает его как latest.

Теперь выполните команду docker images
ниже, чтобы перечислить все доступные образы на вашем сервере.
Ниже вы можете увидеть образ MongoDB, помеченный как latest.

Развертывание контейнера Docker MongoDB
Из загруженного вами образа MongoDB вы можете развернуть контейнер MongoDB. Вы инициализируете контейнер MongoDB исполняемым файлом mongo, создадите каталог данных. Затем вы определите сопоставление между областью данных контейнера Docker и хост-машиной.
1. Выполните команду mkdir
ниже, чтобы создать каталог данных с именем mongodata
для хранения базы данных MongoDB и журналов.
2. Затем выполните команду docker run
ниже, чтобы создать контейнер с именем mymongo
. Кроме того, контейнер запускается с интерактивным псевдо-TTY (-it
), на случай, если при запуске контейнера требуется отображение вывода.
Наконец, вновь созданная директория mongodata привязывается (-v
) к внутренней директории, /data/db. Опция -d
запускает контейнер в режиме отключения, поэтому он работает как фоновый процесс и возвращает вывод консоли после создания.
Система автоматически создает директорию /data/db, когда вы запускаете контейнер, чтобы хранить данные изменений, внесенных в контейнер. Эта директория работает в режиме только для чтения и обеспечивает постоянное хранение данных на хост-системе.
После успешного выполнения команды вы увидите вывод, подобный приведенному ниже.

3. Наконец, выполните команду docker ps
ниже, чтобы определить идентификатор контейнера и проверить его статус. Команда docker ps
отображает всю информацию о текущем запущенном контейнере.
Команда
docker ps
аналогична обычной командеps
в Linux.
В выводе, показанном ниже, вы можете увидеть раздел Порты, в котором перечислены все порты, назначенные контейнеру для прослушивания входящих подключений.
В этом примере порт 27017 сопоставлен с хостом. Ниже приведенный вывод указывает на то, что вы можете получить доступ к экземпляру MongoDB на этом контейнере через localhost:27017 с хоста.

Возможно, вы хотите просмотреть файл журнала контейнера
mymongo
, чтобы определить, что произошло с вашей базой данных/экземпляром mongo, когда что-то пошло не так. Если это так, выполните командуdocker logs
, например, так:sudo docker logs docker-container
. Заменитеdocker-container
на имя вашего контейнера Docker.

Прикрепление контейнера Docker MongoDB к оболочке Bash
Вы только что развернули контейнер Docker MongoDB, но как его управлять? Сделайте это, присоединив контейнер Docker к оболочке Bash с помощью команды docker exec
сначала.
Присоединение вашего контейнера к оболочке Bash крайне важно, поскольку контейнер в настоящее время работает в режиме отсоединения (запущен в фоновом режиме). И если контейнер работает в фоновом режиме, он не будет получать ввод или выводить вывод.
Запустите команду docker exec
ниже, чтобы присоединить ваш контейнер (mymongo
) к оболочке Bash.
Когда команда завершится, ваш приглашение изменится на что-то подобное приведенному ниже. Уникальный буквенно-цифровой номер (77782fa95314) – это идентификатор контейнера.
Идентификаторы контейнеров необходимы для избежания конфликтов имен и эффективной идентификации контейнеров между хостами, поэтому старайтесь их не изменять.

Теперь запустите команду mongo
без каких-либо аргументов, чтобы войти в оболочку MongoDB в контейнере (mymongo). Оболочка MongoDB – это место, где вы выполняете ваши запросы/команды mongo.
Как только вы находитесь в контейнере, вы можете выполнять любые команды без префикса
sudo
, так как вы теперь корневой пользователь внутри контейнера. Любые изменения, внесенные в контейнер, не повлияют на вашу систему хоста.
По приведенному ниже приглашению вы можете определить, что вы находитесь в оболочке MongoDB.

Если вы предпочитаете увидеть все доступные команды в оболочке MongoDB, выполните команду
help
, как показано ниже.

Создание административного пользователя MongoDB
После развертывания сервера MongoDB внутри контейнера Docker вы теперь создадите административного пользователя MongoDB. Административный пользователь позволяет вам подключаться к серверу MongoDB и управлять базами данных.
1. Войдите снова в оболочку MongoDB и выполните команду use
ниже, чтобы сначала переключиться на базу данных admin
. Это предоставляет административному пользователю права на управление базами данных.

Скопируйте и вставьте следующий код в командную строку MongoDB, чтобы создать административного пользователя.
Нижеприведенный код использует метод db.createUser()
для создания пользователя с административными правами. Имя пользователя (user
) и пароль (pwd
), указанные ниже, жестко заданы и могут быть изменены по вашему усмотрению.
Если код работает корректно, вы получите сообщение, аналогичное приведенному ниже, в командной строке MongoDB.

3. Запустите запрос quit()
ниже, чтобы выйти из оболочки MongoDB.
4. Наконец, выполните следующую команду mongo
, чтобы протестировать созданного вами административного пользователя (ata
), подключившись к серверу MongoDB. Введите пароль административного пользователя при запросе.
Как видите ниже, сервер MongoDB выводит версию сервера, если подключение прошло успешно.

Возможно, вы хотите дополнительно протестировать административного пользователя. Если это так, выполните следующие команды, чтобы показать всех пользователей в базе данных.
Ниже вы можете видеть, что созданный вами административный пользователь есть в списке.

Создание базы данных MongoDB
Управление контейнером Docker MongoDB не будет завершено без создания базы данных. Вы создадите новую базу данных MongoDB, в которую вы будете сохранять данные через оболочку MongoDB.
1. Из интерактивной сессии в контейнере Docker выполните команду show dbs
ниже, чтобы перечислить все базы данных на вашем сервере.
Ниже вы видите административную базу данных, базу данных конфигурации и локальную базу данных. Оболочка MongoDB создает эти базы данных по умолчанию в каждом сервере MongoDB.

2. Затем выполните команду use
ниже , чтобы создать новую базу данных. Замените <database_name>
именем вашей выбора. Но для этого примера база данных названа linux
.
Запрос
use
переключает текущую базу данных на ту, которую вы указываете, если она существует. В противном случае запросuse
создает новую базу данных и автоматически переключается на нее.

3. Повторно выполните команду show dbs
, как вы делали ранее (шаг один), чтобы увидеть, существует ли созданная вами база данных.
Все еще не видите новую созданную базу данных (linux) в списке? MongoDB создает базу данных только при первом сохранении данных в ней. Данные могут быть в форме коллекции или даже документа.

4. Теперь скопируйте/вставьте код ниже в оболочку MongoDB и нажмите Enter.
Код ниже создает новую коллекцию с именем linux_version
, которое вы можете изменить на то, которое вам нравится. Коллекция содержит данные в формате пар ключ:значение.
На выходе ниже вы можете видеть, что коллекция linux_version
создана и имеет ObjectID.

5. Запустите команду show collections
, чтобы увидеть список коллекций и проверить, существует ли новая коллекция linux_version
.
Ниже вы можете видеть, что вы успешно создали коллекцию linux_version.

6. Наконец, выполните нижеуказанную команду, чтобы просмотреть и подтвердить, что данные, которые вы вставили в коллекцию linux_version
, верны. Метод pretty() позволяет просматривать данные в удобочитаемом формате.
Если вы когда-либо изменяете данные в базе данных, используйте метод
Update()
.
Вы можете видеть, что вывод ниже представлен в более читабельном формате.

Перезапуск контейнера Docker MongoDB
На данный момент у вас успешно работает контейнер Docker MongoDB. Но что, если у вас больше нет нужды в этом контейнере, или что, если он не работает? Несколько команд Docker могут помочь остановить, перезапустить и даже удалить контейнер MongoDB.
1. Выполните команду docker ps
ниже, чтобы перечислить все запущенные контейнеры.
Запишите имя и идентификатор контейнера, который вы хотите остановить, перезапустить или удалить, как показано ниже.

2. Затем выполните одну из команд docker stop
ниже, чтобы остановить запущенный контейнер MongoDB.
3. Повторно выполните команду docker ps
, как вы делали ранее (шаг один), чтобы проверить, остановился ли контейнер.
Как видите ниже, контейнер отсутствует в списке запущенных контейнеров, что указывает на успешное его остановление.

4. Теперь выполните одну из команд docker start
ниже, если решите перезапустить контейнер.
5. Наконец, повторно выполните команду docker ps
, чтобы убедиться, что контейнер запущен.
Возможно, у вас больше нет необходимости в контейнере. Если это так, сначала остановите контейнер и выполните команду
rm
для его удаления, например:sudo docker container rm mongodb
. Аналогично предыдущим примерам, заменитеmongodb
на имя контейнера или его идентификатор.
Заключение
В этом уроке вы узнали, как развернуть и управлять контейнером Docker MongoDB, создав администратора для создания базы данных и хранения данных в ней. Вы поняли, что можете остановить, перезапустить и удалить контейнеры, которые вам больше не нужны, чтобы поддерживать ваши образы Docker в чистоте.
Развертывание и управление MongoDB с помощью Docker – это первый шаг к использованию технологии контейнеризации и снижению издержек. Почему бы не воспользоваться этим первым шагом, чтобы изучить MongoDB более детально и увидеть, как контейнер Docker MongoDB может помочь в ваших проектах?