Como Implementar e Gerenciar um Contêiner Docker MongoDB

MongoDB é um banco de dados de documentos popular e de código aberto que oferece alto desempenho e grande flexibilidade. Mas você já tentou containerizar um banco de dados MongoDB para seus projetos? Se não, então prepare-se para uma experiência incrível!

Neste tutorial, você aprenderá como implantar, proteger e gerenciar o MongoDB de maneira eficaz com o Docker. Portanto, continue lendo e torne-se o mestre em implantar contêineres Docker MongoDB!

Pré-requisitos

Este tutorial inclui demonstrações práticas. Para acompanhar, certifique-se de ter o seguinte:

  • Uma máquina Ubuntu – Este tutorial utiliza Ubuntu 20.04 LTS
  • A user with sudo permission
  • Docker – Este tutorial utiliza o Docker 20.10.9

Download da Imagem do Docker MongoDB

Antes de poder implantar e gerenciar um contêiner Docker MongoDB, você precisa primeiro baixar uma imagem do MongoDB do Docker Hub para poder executar o contêiner MongoDB localmente.

Execute o comando docker abaixo para baixar a imagem da Edição Comunitária (CE) do MongoDB (pull mongo), que está hospedada no Docker Hub. A versão mais recente desta imagem no momento da redação é 4.2.

sudo docker pull mongo

Como você pode ver abaixo, o comando automaticamente baixa a versão mais recente da imagem e a marca como latest.

Pulling mongo image

Agora execute o comando docker images abaixo para listar todas as imagens disponíveis em seu servidor.

sudo docker images

Abaixo, você pode ver a imagem do MongoDB marcada como latest.

Listing all Docker images

Implantando um Contêiner Docker MongoDB

A partir da imagem MongoDB que você baixou, você pode agora implantar um contêiner MongoDB. Você inicializará seu contêiner MongoDB com o executável mongo, criará um diretório de dados. Em seguida, você definirá o mapeamento entre a área de dados do contêiner Docker e a máquina host.

1. Execute o comando mkdir abaixo para criar um diretório de dados chamado mongodata para armazenar o banco de dados e os logs do MongoDB.

sudo mkdir -p /mongodata

2. Em seguida, execute o comando docker run abaixo para criar um contêiner com o nome mymongo. Além disso, o contêiner é iniciado com um pseudo-TTY interativo (-it), caso a saída deva ser mostrada ao iniciar o contêiner.

Finalmente, o diretório recém-criado mongodata está vinculado (-v) ao diretório interno, /data/db. A opção -d inicia o contêiner no modo destacado, então ele é executado como um processo em segundo plano e retorna a saída do console após a criação.

O sistema cria automaticamente o diretório /data/db quando você executa o contêiner para armazenar os dados das alterações que você faz no contêiner. Este diretório funciona de forma semelhante ao modo somente leitura e permite o armazenamento persistente de dados no sistema hospedeiro.

sudo docker run -it -v mongodata:/data/db --name mymongo -d mongo

Depois que o comando for concluído com êxito, você verá uma saída como a abaixo.

Deploying MongoDB Container

3. Finalmente, execute o comando docker ps abaixo para identificar o ID do contêiner e verificar seu status. O comando docker ps exibe todas as informações sobre o contêiner atualmente em execução.

O comando docker ps é comparável ao comando regular ps no Linux.

sudo docker ps

No output mostrado abaixo, você pode ver uma seção Portas que lista todas as portas atribuídas ao contêiner para ouvir conexões de entrada.

Português“`
No exemplo, a porta 27017 está mapeada para o host. A saída abaixo indica que você pode acessar a instância do MongoDB neste contêiner através de localhost:27017 a partir do host.

Checking Docker MongoDB Container Status

Talvez você queira ver o arquivo de log do contêiner mymongo para determinar o que aconteceu com seu banco de dados/instância do MongoDB quando algo deu errado. Se sim, execute o comando docker logs, assim: sudo docker logs docker-container. Substitua docker-container pelo nome do seu contêiner Docker.

Reading Docker Container Log File

Anexando o Contêiner Docker MongoDB ao Shell Bash

Você acabou de implantar um contêiner Docker MongoDB, mas como gerenciá-lo? Faça isso anexando o contêiner Docker ao shell Bash com o comando docker exec primeiro.

Anexar seu contêiner ao shell Bash é crucial, pois o contêiner está atualmente em modo destacado (executando em segundo plano). E se o contêiner estiver em segundo plano, ele não receberá entrada nem exibirá saída.

Execute o comando docker exec abaixo para anexar seu contêiner (mymongo) ao shell Bash.

sudo docker exec -it mymongo bash

Quando o comando for concluído, seu prompt mudará para algo semelhante ao mostrado abaixo. O número alfanumérico exclusivo (77782fa95314) é o ID do contêiner.

Os IDs de container são essenciais para evitar conflitos de nomes e identificar efetivamente os containers entre hosts, então tente não alterá-los.

Attaching Docker MongoDB Container to Bash Shell

Agora execute o comando mongo sem nenhum argumento para entrar no shell do MongoDB no container (mymongo). O shell do MongoDB é onde você executa suas consultas/comandos mongo.

Uma vez que você está no container, você pode executar qualquer comando sem o prefixo sudo, pois agora você é um usuário root dentro do container. Qualquer alteração que você faça no container não afetará seu sistema host.

mongo

Ao olhar para o prompt mostrado abaixo, você pode dizer que agora está no shell do MongoDB.

Logging in to the MongoDB shell

Se você prefere ver todos os comandos disponíveis no shell do MongoDB, execute o comando help, conforme mostrado abaixo.

Listing Available Commands in MongoDB Shell

Criando um Usuário Administrativo MongoDB

Depois de ter implantado um servidor MongoDB dentro de um container Docker, você agora criará um usuário administrativo MongoDB. Um usuário administrativo permite que você se conecte ao servidor MongoDB e gerencie os bancos de dados.

1. Faça login no shell do MongoDB novamente e execute o comando use abaixo para primeiro mudar para o banco de dados admin. Fazer isso fornece ao usuário administrativo as permissões corretas para gerenciar os bancos de dados.

use admin
Switching to the Admin Database

Copie e cole o seguinte código no prompt do MongoDB para criar um usuário administrativo.

O código abaixo utiliza o método db.createUser() para criar um usuário com funções administrativas. O nome de usuário (user) e a senha (pwd) abaixo estão codificados, e você pode alterá-los conforme preferir.

# Crie um usuário administrativo
db.createUser(
{
	# Define o nome de usuário para o usuário administrativo
	user: "ata",
	# Define a senha para o usuário administrativo
	pwd: "password123",
	# Define as funções para o usuário administrativo
	roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

Se o código funcionar, você receberá uma mensagem semelhante à mostrada abaixo no prompt do MongoDB.

Creating an Administrative New User

3. Execute a consulta quit() abaixo para sair do shell do MongoDB.

quit()

4. Por fim, execute o seguinte comando mongo para testar o usuário administrativo que você criou (ata) conectando-se ao servidor MongoDB. Insira a senha do usuário administrativo quando solicitado.

mongo -u ata -p --authenticationDatabase admin

Como você vê abaixo, o servidor MongoDB imprime a versão do servidor MongoDB se você se conectar com sucesso.

Connecting to the MongoDB Server

Talvez queira testar ainda mais o usuário administrativo. Se sim, execute os comandos abaixo para mostrar todos os usuários no banco de dados.

use admin
show users

Abaixo, você pode ver que o usuário administrativo que você criou está na lista.

Listing Users in Database

Criando um Banco de Dados MongoDB

Gerenciar um contêiner Docker MongoDB não estaria completo sem criar um banco de dados. Você criará um novo banco de dados MongoDB no qual armazenará dados via shell do MongoDB.

1. Dentro de uma sessão interativa no contêiner Docker, execute o comando show dbs abaixo para listar todos os bancos de dados em seu servidor.

show dbs

Abaixo, você pode ver um banco de dados admin, um banco de dados config e um banco de dados local. O shell do MongoDB cria esses bancos de dados por padrão em cada servidor MongoDB.

Listing all MongoDB Databases

2. Em seguida, execute o comando use abaixo para criar um novo banco de dados. Substitua <database_name> pelo nome do banco de dados de sua escolha. Mas, para este exemplo, o banco de dados é chamado linux.

A consulta use altera o banco de dados atual para o especificado, se existir. Caso contrário, a consulta use cria um novo banco de dados e muda automaticamente para ele.

use <database_name>
Creating a new MongoDB Database

3. Execute novamente o comando show dbs como fez anteriormente (passo um) para ver se o banco de dados que você criou existe.

show dbs

Ainda não vê o banco de dados recém-criado (linux) na lista? O MongoDB constrói o banco de dados apenas quando você armazena dados nele pela primeira vez. Os dados podem estar na forma de uma coleção ou mesmo de um documento.

Listing all MongoDB Databases

4. Agora, copie/cole o código abaixo no shell do MongoDB e pressione Enter.

O código abaixo cria uma nova coleção chamada linux_version, que você pode alterar para o nome que preferir. A coleção contém dados no formato de pares chave:valor.

# Usando o método insertOne para inserir dados
db.linux_version.insertOne(
	# Pares chave:valor para inserir no banco de dados
	{ "debian" : "11",
	"ubuntu" : "20.04",
	"rocky linux" : "8.4",
	"alma linux" : "8"
	}
)

No resultado abaixo, você pode ver que a coleção linux_version foi criada e vem com um ObjectID.

Showing collection with its ID

5. Execute o comando show collections para ver uma lista de coleções e verificar se a nova coleção linux_version existe.

show collections

Você pode ver abaixo que você criou com sucesso a coleção linux_version.

Showing List of Collections

6. Finalmente, execute o comando abaixo para visualizar e confirmar que os dados inseridos na coleção linux_version estão corretos. O método pretty() permite visualizar os dados em um formato legível para humanos.

db.linux_version.find().pretty()

Se você modificar os dados no banco de dados, utilize o método Update().

Você pode ver que a saída abaixo está em um formato muito mais legível.

Viewing Data from MongoDB Database

Reiniciar o Contêiner Docker do MongoDB

Neste momento, você tem um contêiner Docker do MongoDB em execução com sucesso. Mas e se você não precisar mais do contêiner, ou se ele não estiver funcionando? Alguns comandos do Docker podem ajudar a parar, reiniciar e até remover um contêiner Docker do MongoDB.

1. Execute o comando docker ps abaixo para listar todos os contêineres em execução.

sudo docker ps

Observe o nome e o ID do contêiner que deseja parar, reiniciar ou remover, conforme mostrado abaixo.

Showing all running docker containers

2. Em seguida, execute um dos comandos docker stop abaixo para parar um contêiner MongoDB em execução.

sudo docker stop mymongo
sudo docker stop container-ID

3. Execute novamente o comando docker ps, como fez anteriormente (passo um), para verificar se o contêiner foi desligado.

sudo docker ps

Como você pode ver abaixo, o contêiner não está na lista de contêineres em execução, o que indica que você parou o contêiner com sucesso.

Listing all Containers

4. Agora execute um dos comandos docker start abaixo se decidir reiniciar um contêiner.

sudo docker start mymongo
sudo docker start container-ID

5. Por fim, execute novamente o comando docker ps para verificar se o contêiner está em execução.

sudo docker ps

Talvez você não tenha mais utilidade para um contêiner. Se for o caso, você deve primeiro parar o contêiner e executar o comando rm para removê-lo, assim: sudo docker container rm mongodb. Semelhante aos exemplos anteriores, substitua mongodb pelo nome ou ID do contêiner.

Conclusão

Neste tutorial, você aprendeu como implantar e gerenciar um contêiner MongoDB do Docker, criando um usuário administrador para criar um banco de dados e armazenar dados nele. Você percebeu que pode parar, reiniciar e remover contêineres que não precisa mais para manter suas imagens do Docker limpas.

Implantar e gerenciar o MongoDB com Docker é o primeiro passo para aproveitar a tecnologia de containerização e reduzir a sobrecarga. Por que não usar este primeiro passo para explorar MongoDB mais e ver como um contêiner MongoDB do Docker pode ajudar em seus projetos?

Source:
https://adamtheautomator.com/docker-mongodb/