MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Implantando o MongoDB usando o Docker


A principal vantagem de usar o MongoDB é que é fácil de usar. Pode-se instalar facilmente o MongoDB e começar a trabalhar nele em minutos. O Docker torna esse processo ainda mais fácil.

Uma coisa legal sobre o Docker é que, com muito pouco esforço e alguma configuração, podemos criar um contêiner e começar a trabalhar em qualquer tecnologia. Neste artigo, criaremos um contêiner do MongoDB usando o Docker e aprenderemos como anexar o volume de armazenamento de um sistema host a um contêiner.

Pré-requisitos para implantar o MongoDB no Docker


Só precisaremos do Docker instalado no sistema para este tutorial.

Criando uma imagem do MongoDB


Primeiro crie uma pasta e crie um arquivo com o nome Dockerfile dentro dessa pasta:
$ mkdir mongo-with-docker
$ cd mongo-with-docker
$ vi Dockerfile

Cole este conteúdo em seu Dockerfile:
FROM debian:jessie-slim
RUN apt-get update && \
apt-get install -y ca-certificates && \
rm -rf /var/lib/apt/lists/*
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6 && \
gpg --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg
ARG MONGO_PACKAGE=mongodb-org
ARG MONGO_REPO=repo.mongodb.org
ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
ENV MONGO_MAJOR 3.4
ENV MONGO_VERSION 3.4.18
RUN echo "deb http://$MONGO_REPO/apt/debian jessie/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR main" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN echo "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN apt-get update
RUN apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION
VOLUME ["/data/db"]
WORKDIR /data
EXPOSE 27017
CMD ["mongod", "--smallfiles"]

Em seguida, execute este comando para criar sua própria imagem do MongoDB Docker:
docker build -t hello-mongo:latest .

Compreendendo o conteúdo do arquivo do Docker


A estrutura de cada linha no arquivo docker é a seguinte:
INSTRUCTIONS arguments
  • FROM:imagem base a partir da qual começaremos a construir o contêiner
  • RUN:Este comando executa todas as instruções para instalar o MongoDB na imagem base.
  • ARG:armazena alguns valores padrão para a compilação do Docker. Esses valores não estão disponíveis para o contêiner. Pode ser substituído durante o processo de construção da imagem usando o argumento --build-arg.
  • ENV:esses valores estão disponíveis durante a fase de construção e também após o lançamento do contêiner. Pode ser substituído passando o argumento -e para o comando docker run.
  • VOLUME:anexa o volume de dados/db ao contêiner.
  • WORKDIR:define o diretório de trabalho para executar qualquer comando RUN ou CMD.
  • EXPOSE:expõe a porta do contêiner para hospedar o sistema (mundo externo).
  • CMD:inicia a instância do mongod no contêiner.
Vários noves Torne-se um DBA do MongoDB - Trazendo o MongoDB para a produçãoSaiba mais sobre o que você precisa saber para implantar, monitorar, gerenciar e dimensionar o MongoDBBaixe gratuitamente

Iniciando o contêiner MongoDB a partir da imagem


Você pode iniciar o contêiner do MongoDB emitindo o seguinte comando:
docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
  • --name:nome do contêiner.
  • -d:irá iniciar o container como um processo de background (daemon). Não especifique este argumento para executar o contêiner como processo em primeiro plano.
  • -v:anexa o volume /tmp/mongodb do sistema host ao volume /data/db do contêiner.
  • -p:mapeia a porta do host para a porta do contêiner.
  • O último argumento é o nome/id da imagem.

Para verificar se o contêiner está em execução ou não, emita o seguinte comando:
docker ps

A saída deste comando deve se parecer com o seguinte:
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS              PORTS                      NAMES
a7e04bae0c53        hello-mongo         "mongod --smallfiles"   7 seconds ago       Up 6 seconds        0.0.0.0:27017->27017/tcp   my-mongo

Acessando o MongoDB a partir do host


Depois que o contêiner estiver em execução, podemos acessá-lo da mesma maneira que acessamos a instância remota do MongoDB. Você pode usar qualquer utilitário como Compass ou Robomongo para se conectar a esta instância. Por enquanto, usarei o comando mongo para conectar. Execute o seguinte comando no seu terminal:
mongo 27017

Ele abrirá o shell do mongo, onde você poderá executar qualquer comando do mongo. Agora vamos criar um banco de dados e adicionar alguns dados nele.
use mydb
db.myColl.insert({“name”: “severalnines”})
quit()

Agora, para verificar se nosso mapeamento de volume está correto ou não, reiniciaremos o contêiner e verificaremos se ele possui nossos dados ou não.
Docker restart <container_id>

Agora, novamente, conecte-se ao shell do mongo e execute este comando:
db.myColl.find().pretty()

Você deve ver este resultado:
{ "_id" : ObjectId("5be7e05d20aab8d0622adf46"), "name" : "severalnines" }

Isso significa que nosso contêiner está persistindo os dados do banco de dados mesmo após reiniciá-lo. Isso é possível devido ao mapeamento de volume. O contêiner armazenará todos os nossos dados no diretório /tmp/mongodb no sistema host. Portanto, quando você reiniciar o contêiner, todos os dados dentro do contêiner serão apagados e um novo contêiner acessará os dados do diretório tmp/mongodb do host.

Acessando o shell de contêiner do MongoDB

$ docker exec -it <container-name> /bin/bash

Acessando logs de contêiner do MongoDB

$ docker logs <container-name>

Conectando-se ao contêiner MongoDB de outro contêiner


Você pode se conectar ao contêiner do MongoDB de qualquer outro contêiner usando o argumento --link que segue a estrutura a seguir.
--link <Container Name/Id>:<Alias>

Onde Alias ​​é um alias para o nome do link. Execute este comando para vincular nosso contêiner Mongo ao contêiner express-mongo.
docker run --link my-mongo:mongo -p 8081:8081 mongo-express

Este comando extrairá a imagem mongo-express do dockerhub e iniciará um novo contêiner. Mongo-express é uma interface de usuário de administração para MongoDB. Agora vá para http://localhost:8081 para acessar esta interface.
Mongo-express Admin UI

Conclusão


Neste artigo, aprendemos como implantar uma imagem do MongoDB do zero e como criar um contêiner do MongoDB usando o Docker. Também passamos por alguns conceitos importantes, como mapeamento de volume e conexão a um contêiner MongoDB de outro contêiner usando links.

O Docker facilita o processo de implantação de várias instâncias do MongoDB. Podemos usar a mesma imagem do MongoDB para construir qualquer número de contêineres que podem ser usados ​​para criar conjuntos de réplicas. Para tornar esse processo ainda mais fácil, podemos escrever um arquivo YAML (arquivo de configuração) e usar o utilitário docker-compose para implantar todos os contêineres com o único comando.