Запускаем 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.