Перейти к содержимому
Главная страница » Запуск MongoDB в Docker

Запуск MongoDB в Docker

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!

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

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