Занимаясь очередным домашним проектом, мне вдруг понадобилась 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.

Ссылки

  1. Официальная документация Docker
  2. Сайт mongodb