MongoDB — это бесплатная кроссплатформенная база данных, ориентированная на документы, с открытым исходным кодом. MongoDB, классифицируемая как программа для работы с базами данных NoSQL, использует документы, похожие на JSON, с схемами. MongoDB разработан MongoDB Inc. и публикуется под комбинацией серверной публичной лицензии и лицензии Apache.
Сейчас вы увидите, насколько легко и быстро можно настроить рабочую среду Docker для проектов разработки MongoDB. В работе мы будем использовать только последние официальные репозитории MongoDB на DockerHub.
Загрузка Docker образа MongoDB
Прежде чем загрузить Docker образ, стоит заглянуть на DockerHub. Официальный Docker image MongoDB для docker можно найти на DockerHub здесь.
Последняя версия mongoDB, доступная в образе Docker, — это версия 6.0.2, несмотря на то, что на официальной странице MongoDB указана версия 6.0.1 (на дату написания инструкции):
Прежде чем продолжить, я думаю, стоит посетить официальную страницу Docker и MongoDB, на которой представлена довольно подробная, но вводная информация.
Получение Docker образа mongoDB
docker pull mongo
👉 Примечание: если вы получаете образ без указания тега, Docker попытается извлечь образ с тегом latest. в нашем случае это версия 6.0.2.
$
$ docker pull mongo
Using default tag: latest latest:
Pulling from library/mongo
675920708c8b: Pull complete
6f9c8c301e0f: Pull complete
73738965c4ce: Pull complete
7fd6635b9ddf: Pull complete
73a471eaa4ad: Pull complete
bcf274af89b0: Pull complete
04fc489f2a3b: Pull complete
e1abc36251b9: Pull complete
396db6f4d800: Pull complete
Digest: sha256:c57e511ce78d6847e2605db8e374611492f588e24f93c80e0c6baba9d6c029c3
Status: Downloaded newer image for mongo:latest
docker.io/library/mongo:latest
$
Проверим, что образ создан в локальном репозитории Docker
docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest a70885e78ca8 43 hours ago 695MB <-----------
mariadb latest 11aee66fdc31 7 days ago 384MB
oracle19.3.0 or19c 2af00a8fe26b 8 days ago 6.53GB
oraclelinux 7-slim 60807cf6683b 8 days ago 135MB
postgres latest 75993dd36176 2 weeks ago 376MB
lamp2_webapachephp latest 4893d32d34e0 2 years ago 619MB
mariadb 10.5 22851c7fe916 2 years ago 407MB
oracledb12_2_0_1_ee latest e47327e9bd79 2 years ago 6.37GB
adminer latest d3d18514e50a 2 years ago 89.8MB
php 7.4-apache 77c1bf5b4475 2 years ago 414MB
phpmyadmin/phpmyadmin latest 6f9550cff175 2 years ago 469MB
img_with_dbs_of_mssql_s1 latest 0a84c7333c05 2 years ago 2.21GB
hello-world latest bf756fb1ae65 2 years ago 13.3kB
$
Создаем Docker контейнер MongoDB
Введите следующую команду:
$ docker run -d --name mongodb602 -p 27417:27017 -e
MONGO_INITDB_ROOT_USERNAME=ruser1 -e
MONGO_INITDB_ROOT_PASSWORD=rpassw1 -v
$HOME/DOCKER/dockerMongoDB/datafiles602:/data/db mongo:latest
Используемые здесь параметры приведены в следующей таблице:
После создания контейнера вы увидите его идентификатор, а также сможете проверить его с помощью команды docker ps:
$
$ docker run -d --name mongodb602 -p 27417:27017 -e MONGO_INITDB_ROOT_USERNAME=ruser1 -e MONGO_INITDB_ROOT_PASSWORD=rpassw1 -v $HOME/DOCKER/dockerMongoDB/datafiles602:/data/db mongo:latest
b511d4d1e4999601367ca3fab52f8eab31100e15b7a273273c5c260a8c0e597d
$
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b511d4d1e499 mongo:latest "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 0.0.0.0:27417->27017/tcp, :::27417->27017/tcp mongodb602
$
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b511d4d1e499 mongo:latest "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:27417->27017/tcp, :::27417->27017/tcp mongodb602 <--------
b3d392e5067f mariadb:latest "docker-entrypoint.s…" 7 hours ago Exited (0) 33 minutes ago mariadb1093
bdee5d7a5fca postgres "docker-entrypoint.s…" 2 days ago Exited (0) 7 hours ago postgres145
b3c1b4d1c8b0 oracle19.3.0:or19c "/bin/sh -c 'exec $O…" 7 days ago Exited (137) 2 days ago oracle19c
ceaf25d4ba5f phpmyadmin/phpmyadmin "/docker-entrypoint.…" 19 months ago Exited (0) 17 months ago phpmyadmin2
fd02339e77b9 adminer "entrypoint.sh docke…" 19 months ago Exited (0) 17 months ago adminer2
ada1e9bc9927 lamp2_webapachephp "docker-php-entrypoi…" 19 months ago Exited (0) 17 months ago webphpapache2
81ae82d0b350 mariadb:10.5 "docker-entrypoint.s…" 19 months ago Exited (0) 17 months ago mariadb2
7845e93dd45c oracledb12_2_0_1_ee "/bin/sh -c 'exec $O…" 2 years ago Exited (137) 2 years ago pzoracle122
016fe8e05960 img_with_dbs_of_mssql_s1 "/opt/mssql/bin/perm…" 2 years ago Exited (0) 2 years ago mssql_s1a
421fdbfa10a1 hello-world "/hello" 2 years ago Exited (0) 2 years ago amazing_nash
$
Вы можете остановить контейнер и запустить его снова, используя стандартные команды docker, т.е.:
docker stop mongodb602
docker start mongodb602
Доступ к оболочке контейнера
Получите доступ к оболочке контейнера, выполнив:
$ docker exec - это mongodb602 bash
Получите некоторую информацию об используемом дистрибутиве Linux (это версия на базе Debian / Ubuntu):
$ docker exec -it mongodb601 bash
root@b511d4d1e499:/#
root@b511d4d1e499:/#
root@b511d4d1e499:/# uname -a
Linux b511d4d1e499 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
root@b511d4d1e499:/# cat /proc/version
Linux version 5.4.0-91-generic (buildd@lcy01-amd64-017) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021
root@b511d4d1e499:/#
root@b511d4d1e499:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
root@b511d4d1e499:/#
root@b511d4d1e499:/#
Запуск mongosh из контейнера
MongoDB предлагает нам удобный инструмент командной строки — оболочку MongoDB (mongosh). mongosh заменила устаревшую оболочку mongo, она включена в реализации Docker-контейнеров и готова к использованию. Согласно официальной документации:
«Оболочка MongoDB, mongosh, — это полнофункциональная среда REPL на JavaScript и Node.js 16.x для взаимодействия с развёртыванием MongoDB. Вы можете использовать оболочку MongoDB для тестирования запросов и операций непосредственно с вашей базой данных».
👉 Обратите внимание, что mongosh также доступен как отдельный продукт, который можно скачать и установить в вашей системе (например, в системе хоста). Вы можете скачать его здесь, а дополнительную информацию здесь о том, как использовать его для подключения к экземпляру MongoDB.
Подключитесь через mongosh от имени пользователя “ruser1” и введите пароль root “rpassw1”.:
root@b3d392e5067f:/# mongosh --имя пользователя ruser1 --пароль rpassw1
Подключение через mongosh с локального компьютера
Если вы установили mongosh на свой локальный компьютер, вы можете использовать его для прямого подключения к экземпляру docker, запущенному на удаленном хостинге. Предположим, что у вашего хостинга IP: 192.168.0.19, затем используйте следующую команду:
$ mongosh "mongodb: //192.168.0.19:27417" --имя пользователя ruser1 --пароль rpassw1
Основная информация
Ниже я привожу лишь несколько примеров того, как начать использовать его из контейнера. Обратите внимание, что по умолчанию mongosh изначально подключается к “тестовой” базе данных:
root@b511d4d1e499:/# mongosh --username ruser1 --password rpassw1
Current Mongosh Log ID: 633931c0f509f90e8fc06455
Connecting to: mongodb://<credentials>@127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0
Using MongoDB: 6.0.2
Using Mongosh: 1.6.0
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
------
The server generated these startup warnings when booting
2022-10-01T16:42:03.364+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2022-10-01T16:42:04.008+00:00: vm.max_map_count is too low
------
------
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
------
test> help
Shell Help:
use Set current database
show 'show databases'/'show dbs': Print a list of all available databases.
'show collections'/'show tables': Print a list of all collections for current database.
'show profile': Prints system.profile information.
'show users': Print a list of all users for current database.
'show roles': Print a list of all roles for current database.
'show log <type>': log for current connection, if type is not set uses 'global'
'show logs': Print all logs.
exit Quit the MongoDB shell with exit/exit()/.exit
quit Quit the MongoDB shell with quit/quit()
Mongo Create a new connection and return the Mongo object. Usage: new Mongo(URI, options [optional])
connect Create a new connection and return the Database object. Usage: connect(URI, username [optional], password [optional])
it result of the last line evaluated; use to further iterate
version Shell version
load Loads and runs a JavaScript file into the current shell environment
enableTelemetry Enables collection of anonymous usage data to improve the mongosh CLI
disableTelemetry Disables collection of anonymous usage data to improve the mongosh CLI
passwordPrompt Prompts the user for a password
sleep Sleep for the specified number of milliseconds
print Prints the contents of an object to the output
printjson Alias for print()
cls Clears the screen like console.clear()
isInteractive Returns whether the shell will enter or has entered interactive mode
For more information on usage: https://docs.mongodb.com/manual/reference/method
test> show dbs
admin 100.00 KiB
config 92.00 KiB
local 72.00 KiB
test> show collections
test> use admin
switched to db admin
admin> show collections
system.users
system.version
admin> show users
[
{
_id: 'admin.ruser1',
userId: new UUID("afc3b7a9-b61c-47ef-90f4-62651b994c53"),
user: 'ruser1',
db: 'admin',
roles: [ { role: 'root', db: 'admin' } ],
mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
}
]
admin> version
[Function (anonymous)] { help: [Function (anonymous)] Help }
admin> exit
root@b511d4d1e499:/#
На этом пока всё! У вас есть работающий контейнер Docker с MongoDB!