Как развернуть и управлять контейнером Docker MongoDB

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.

sudo docker pull mongo

Как видно ниже, команда автоматически загружает последнюю версию образа и помечает его как latest.

Pulling mongo image

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

sudo docker images

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

Listing all Docker images

Развертывание контейнера Docker MongoDB

Из загруженного вами образа MongoDB вы можете развернуть контейнер MongoDB. Вы инициализируете контейнер MongoDB исполняемым файлом mongo, создадите каталог данных. Затем вы определите сопоставление между областью данных контейнера Docker и хост-машиной.

1. Выполните команду mkdir ниже, чтобы создать каталог данных с именем mongodata для хранения базы данных MongoDB и журналов.

sudo mkdir -p /mongodata

2. Затем выполните команду docker run ниже, чтобы создать контейнер с именем mymongo. Кроме того, контейнер запускается с интерактивным псевдо-TTY (-it), на случай, если при запуске контейнера требуется отображение вывода.

Наконец, вновь созданная директория mongodata привязывается (-v) к внутренней директории, /data/db. Опция -d запускает контейнер в режиме отключения, поэтому он работает как фоновый процесс и возвращает вывод консоли после создания.

Система автоматически создает директорию /data/db, когда вы запускаете контейнер, чтобы хранить данные изменений, внесенных в контейнер. Эта директория работает в режиме только для чтения и обеспечивает постоянное хранение данных на хост-системе.

sudo docker run -it -v mongodata:/data/db --name mymongo -d mongo

После успешного выполнения команды вы увидите вывод, подобный приведенному ниже.

Deploying MongoDB Container

3. Наконец, выполните команду docker ps ниже, чтобы определить идентификатор контейнера и проверить его статус. Команда docker ps отображает всю информацию о текущем запущенном контейнере.

Команда docker ps аналогична обычной команде ps в Linux.

sudo docker ps

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

В этом примере порт 27017 сопоставлен с хостом. Ниже приведенный вывод указывает на то, что вы можете получить доступ к экземпляру MongoDB на этом контейнере через localhost:27017 с хоста.

Checking Docker MongoDB Container Status

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

Reading Docker Container Log File

Прикрепление контейнера Docker MongoDB к оболочке Bash

Вы только что развернули контейнер Docker MongoDB, но как его управлять? Сделайте это, присоединив контейнер Docker к оболочке Bash с помощью команды docker exec сначала.

Присоединение вашего контейнера к оболочке Bash крайне важно, поскольку контейнер в настоящее время работает в режиме отсоединения (запущен в фоновом режиме). И если контейнер работает в фоновом режиме, он не будет получать ввод или выводить вывод.

Запустите команду docker exec ниже, чтобы присоединить ваш контейнер (mymongo) к оболочке Bash.

sudo docker exec -it mymongo bash

Когда команда завершится, ваш приглашение изменится на что-то подобное приведенному ниже. Уникальный буквенно-цифровой номер (77782fa95314) – это идентификатор контейнера.

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

Attaching Docker MongoDB Container to Bash Shell

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

Как только вы находитесь в контейнере, вы можете выполнять любые команды без префикса sudo, так как вы теперь корневой пользователь внутри контейнера. Любые изменения, внесенные в контейнер, не повлияют на вашу систему хоста.

mongo

По приведенному ниже приглашению вы можете определить, что вы находитесь в оболочке MongoDB.

Logging in to the MongoDB shell

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

Listing Available Commands in MongoDB Shell

Создание административного пользователя MongoDB

После развертывания сервера MongoDB внутри контейнера Docker вы теперь создадите административного пользователя MongoDB. Административный пользователь позволяет вам подключаться к серверу MongoDB и управлять базами данных.

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

use admin
Switching to the Admin Database

Скопируйте и вставьте следующий код в командную строку MongoDB, чтобы создать административного пользователя.

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

# Создание административного пользователя
db.createUser(
{
	# Задает имя пользователя для административного пользователя
	user: "ata",
	# Задает пароль для административного пользователя
	pwd: "password123",
	# Задает роли для административного пользователя
	roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

Если код работает корректно, вы получите сообщение, аналогичное приведенному ниже, в командной строке MongoDB.

Creating an Administrative New User

3. Запустите запрос quit() ниже, чтобы выйти из оболочки MongoDB.

quit()

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

mongo -u ata -p --authenticationDatabase admin

Как видите ниже, сервер MongoDB выводит версию сервера, если подключение прошло успешно.

Connecting to the MongoDB Server

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

use admin
show users

Ниже вы можете видеть, что созданный вами административный пользователь есть в списке.

Listing Users in Database

Создание базы данных MongoDB

Управление контейнером Docker MongoDB не будет завершено без создания базы данных. Вы создадите новую базу данных MongoDB, в которую вы будете сохранять данные через оболочку MongoDB.

1. Из интерактивной сессии в контейнере Docker выполните команду show dbs ниже, чтобы перечислить все базы данных на вашем сервере.

show dbs

Ниже вы видите административную базу данных, базу данных конфигурации и локальную базу данных. Оболочка MongoDB создает эти базы данных по умолчанию в каждом сервере MongoDB.

Listing all MongoDB Databases

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

Запрос use переключает текущую базу данных на ту, которую вы указываете, если она существует. В противном случае запрос use создает новую базу данных и автоматически переключается на нее.

use <database_name>
Creating a new MongoDB Database

3. Повторно выполните команду show dbs, как вы делали ранее (шаг один), чтобы увидеть, существует ли созданная вами база данных.

show dbs

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

Listing all MongoDB Databases

4. Теперь скопируйте/вставьте код ниже в оболочку MongoDB и нажмите Enter.

Код ниже создает новую коллекцию с именем linux_version, которое вы можете изменить на то, которое вам нравится. Коллекция содержит данные в формате пар ключ:значение.

# Использование метода insertOne для вставки данных
db.linux_version.insertOne(
	# Пары ключ:значение для вставки в базу данных
	{ "debian" : "11",
	"ubuntu" : "20.04",
	"rocky linux" : "8.4",
	"alma linux" : "8"
	}
)

На выходе ниже вы можете видеть, что коллекция linux_version создана и имеет ObjectID.

Showing collection with its ID

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

show collections

Ниже вы можете видеть, что вы успешно создали коллекцию linux_version.

Showing List of Collections

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

db.linux_version.find().pretty()

Если вы когда-либо изменяете данные в базе данных, используйте метод Update().

Вы можете видеть, что вывод ниже представлен в более читабельном формате.

Viewing Data from MongoDB Database

Перезапуск контейнера Docker MongoDB

На данный момент у вас успешно работает контейнер Docker MongoDB. Но что, если у вас больше нет нужды в этом контейнере, или что, если он не работает? Несколько команд Docker могут помочь остановить, перезапустить и даже удалить контейнер MongoDB.

1. Выполните команду docker ps ниже, чтобы перечислить все запущенные контейнеры.

sudo docker ps

Запишите имя и идентификатор контейнера, который вы хотите остановить, перезапустить или удалить, как показано ниже.

Showing all running docker containers

2. Затем выполните одну из команд docker stop ниже, чтобы остановить запущенный контейнер MongoDB.

sudo docker stop mymongo
sudo docker stop container-ID

3. Повторно выполните команду docker ps, как вы делали ранее (шаг один), чтобы проверить, остановился ли контейнер.

sudo docker ps

Как видите ниже, контейнер отсутствует в списке запущенных контейнеров, что указывает на успешное его остановление.

Listing all Containers

4. Теперь выполните одну из команд docker start ниже, если решите перезапустить контейнер.

sudo docker start mymongo
sudo docker start container-ID

5. Наконец, повторно выполните команду docker ps, чтобы убедиться, что контейнер запущен.

sudo docker ps

Возможно, у вас больше нет необходимости в контейнере. Если это так, сначала остановите контейнер и выполните команду rm для его удаления, например: sudo docker container rm mongodb. Аналогично предыдущим примерам, замените mongodb на имя контейнера или его идентификатор.

Заключение

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

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

Source:
https://adamtheautomator.com/docker-mongodb/