Запускаем mongodb в docker
Занимаясь очередным домашним проектом, мне вдруг понадобилась mongodb
. Как правило, раньше я всегда ставил mongodb
через brew
. Но захотелось уже научиться поднимать её при помощи докера, чтобы можно было легко разделять инстансы между различными проектами и не засорять основную систему.
В целом, заметка будет небольшой, я лишь рассмотрю несколько простых команд, которые позволят поднять сервер mongodb
в docker
и продолжить работу с ним.
Инициализация
Для инициализации запускаем контейнер из официального образа со следующими параметрами:
docker run -d -p 127.0.0.1:27017:27017 --name mongo-exp-project mongo
-d
выполнить детач от текущего терминала и вывести ID контейнера.-p
публикует порт контейнера для хоста (это нужно, чтобы серверmongodb
, запущенный внутри контейнера, было видно извне, и к нему можно было подключиться, например, из Node.js).--name
просто имя контейнера, чтобы было проще ориентироваться в последствии.
mongo
— это образ, на основе которого будет запускаться контейнер. В данном случае это наиболее свежий официальный образ mongodb
.
Запуск контейнера
Допустим, наш контейнер оказался остановлен. Это могло произойти, например, из-за банальной перезагрузки операционной системы.
Для начала, выясним ID нашего контейнера:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7bec3375bdc mongo:latest "docker-entrypoint..." 7 weeks ago Exited (0) 3 seconds ago 127.0.0.1:27017->27017/tcp mongo-exp-project
Ключ -a
позволяет нам увидеть весь список контейнеров, в том числе и остановленных. Затем просто запускаем наш контейнер при помощи start
, указав ID:
docker start a7bec3375bdc
Запуск команды внутри контейнера
Иногда бывает нужно что-то сделать в рамках контейнера, выполнить какую-то операцию или, к примеру, запустить оболочку mongodb
. Это можно сделать при помощи команды exec
.
docker exec -it a7bec3375bdc mongo
-i
интерактивный режим, оставляет STDIN открытым, таким образом, контейнер остаётся доступным на получение данных.-t
выделяет псевдо-TTY (иными словами, некий инстанс текстового терминала).
Ключи -i
и -t
выглядят несколько непонятными, не находите? Вообще, если говорить человеческим языком, оба эти ключа позволяют обеспечить интерактивность оболочки mongo
. То есть, мы можем писать в ней команды, а она, соответственно, может отдавать нам результат.
Когда -i
и -t
будут лишними? Например, когда нам не нужно «общаться» с командой докера: docker exec a7bec3375bdc ls /var/log
В данном случае нам интересен только ответ в виде списка файлов, мы не планируем что-то делать интерактивно.
Совершенно аналогично можно запустить оболочку bash
внутри контейнера и что-то в нём поделать:
docker exec -it a7bec3375bdc bash
Вроде бы самое полезное я теперь упомянул. Полагаю, этих базовых команд будет достаточно для того, чтобы пользоваться сервером mongodb
. На этом буду завершать свою заметку. Буду рад, если она поможет вам начать использовать docker
.