Como Implantar e Gerenciar um Contêiner Docker MongoDB

O 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 você está prestes a se surpreender!

Neste tutorial, você aprenderá como implantar, proteger e gerenciar o MongoDB de forma eficaz com o Docker. Portanto, continue lendo e torne-se o mestre de 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 usa Ubuntu 20.04 LTS
  • A user with sudo permission
  • Docker – Este tutorial usa Docker 20.10.9

Baixando a Imagem do Docker MongoDB

Antes de poder implantar e gerenciar um contêiner Docker MongoDB, você primeiro precisa 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á sendo hospedada pelo Docker Hub. A versão mais recente desta imagem no momento da escrita é 4.2.

sudo docker pull mongo

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

Pulling mongo image

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

sudo docker images

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

Listing all Docker images

Implantando um Contêiner MongoDB Docker

A partir da imagem do MongoDB que você baixou, agora você pode implantar um contêiner MongoDB. Você inicializará seu contêiner MongoDB com o executável mongo, criará um diretório de dados. Em seguida, 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 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 é executado 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

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

Deploying MongoDB Container

3. Por fim, 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 resultado mostrado abaixo, você pode ver uma seção Portas que lista todas as portas atribuídas ao contêiner para escutar conexões de entrada.

Neste 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 do host.

Checking Docker MongoDB Container Status

Talvez você queira ver o arquivo de log do contêiner mymongo para determinar o que aconteceu no seu banco de dados/instância do mongo quando algo deu errado com ele. Se for o caso, execute o comando docker logs, como este: 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 você o gerencia? 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 parecido com o abaixo. O número alfanumérico único (77782fa95314) é o ID do contêiner.

IDs de contêiner são essenciais para evitar conflitos de nomes e identificar efetivamente os contêineres entre os hosts, portanto, tente não alterá-los.

Attaching Docker MongoDB Container to Bash Shell

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

Uma vez dentro do contêiner, você pode executar qualquer comando sem o prefixo sudo, pois agora é um usuário root dentro do contêiner. Toda alteração que você fizer no contêiner não afetará seu sistema host.

mongo

Ao observar o prompt mostrado abaixo, você pode perceber que agora está no shell do MongoDB.

Logging in to the MongoDB shell

Se preferir 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 implantar um servidor MongoDB dentro de um contêiner Docker, você agora criará um usuário administrativo MongoDB. Um usuário administrativo permite que você se conecte ao servidor MongoDB e gerencie bancos de dados.

1. Faça login novamente no shell do MongoDB e execute o comando use abaixo para primeiro alternar para o banco de dados admin. Fazê-lo 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 código a seguir 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 senha (pwd) abaixo estão codificados, mas você pode alterá-los conforme preferir.

# Criar 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 à 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 do MongoDB. Insira a senha do usuário administrativo quando solicitado.

mongo -u ata -p --authenticationDatabase admin

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

Connecting to the MongoDB Server

Talvez você queira testar ainda mais o usuário administrativo. Se for o caso, 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ê vai criar um novo banco de dados MongoDB no qual irá armazenar dados através do shell do MongoDB.

1. Dentro de uma sessão interativa dentro do 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 <nome_do_banco_de_dados> pelo nome do banco de dados de sua escolha. Mas para este exemplo, o banco de dados é chamado de linux.

A consulta use altera o banco de dados atual para o especificado se ele 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 você 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 até 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. Por fim, execute o comando abaixo para visualizar e confirmar os dados que você inseriu 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

Reiniciando o Contêiner Docker MongoDB

Neste ponto, você tem um contêiner Docker 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é mesmo remover um contêiner Docker 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 você 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ê o parou 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 ver se o contêiner está em execução.

sudo docker ps

Talvez você não tenha mais uso para um contêiner. Se for o caso, você deve primeiro parar o contêiner e depois executar o comando rm para removê-lo, assim: sudo docker container rm mongodb. Similar 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 Docker MongoDB, 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 Docker limpas.

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

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