Como executar o MongoDB em um contêiner do Docker

O MongoDB é um mecanismo de banco de dados NoSQL orientado a documentos que ganhou popularidade entre os desenvolvedores por seu modelo de armazenamento semelhante ao JSON. O MongoDB geralmente fornece um mapeamento mais direto entre código e dados persistentes, o que facilita a iteração rápida e ajuda a resolver a considerável incompatibilidade de impedância dos bancos de dados SQL tradicionais.

O Docker é uma plataforma que empacota componentes de aplicativos como contêineres isolados. A conteinerização do banco de dados MongoDB o torna portátil entre ambientes, permitindo que você inicie uma instância sempre que o Docker estiver disponível.

Neste guia, mostraremos como começar a usar o MongoDB no Docker. A principal consideração é o armazenamento de dados: os contêineres do Docker são efêmeros por padrão e perdem dados quando parados. Você deve montar um volume em seu contêiner MongoDB para habilitar a persistência.

índice

  1. Iniciar um contêiner MongoDB
  2. Conexão de outro contêiner
  3. Dados persistentes com volumes
  4. autenticação adicionada
  5. Configurando seu servidor
  6. Conclusão

Iniciar um contêiner MongoDB

Você pode iniciar um contêiner MongoDB descartável com docker run :

 docker run -d -p 27017:27017 --name example-mongo mongo:latest

Isso lhe dará um servidor ativo executando a versão mais recente do MongoDB. Use a imagem oficial disponível no Docker Hub. O sinalizador -d (separado) indica que o contêiner será executado em segundo plano, separado do processo do shell.

A porta do contêiner 27017 , o padrão do MongoDB, está vinculada à porta 27017 em seu host. Você poderá se conectar à sua instância do Mongo em localhost:27017 . Se você quiser alterar o número da porta, altere a primeira parte do sinalizador -p , como 9000:27017 para usar localhost:9000 .

A imagem do MongoDB também inclui o shell do mongo . O comando docker exec fornece uma maneira de acessar o docker em um contêiner em execução:

 docker exec -it example-mongo mongo

Isso iniciará uma sessão interativa do shell Mongo em seu terminal. É ideal para interagir rapidamente com sua instância de banco de dados sem adicionar dependências externas.

Você pode inspecionar os logs do Mongo com o comando docker logs :

 logs docker example-mongo --follow

O sinalizador --follow significa que os logs serão continuamente transmitidos para o seu terminal.

Conexão de outro contêiner

Se você estiver implantando o Mongo no Docker, provavelmente desejará se conectar de outro contêiner, como seu servidor de API. É melhor juntá-los a uma rede compartilhada do Docker. Isso significa que você não precisará anunciar as portas do Mongo em seu host, o que reduz a superfície de ataque.

 docker network criar mongo-network docker run -d --network mongo-network --name example-mongo mongo:latest

Seu contêiner "cliente" deve se juntar ao purê de batatas mongo-network . Você poderá fazer referência ao contêiner pelo nome nas cadeias de conexão do MongoDB. Neste exemplo, você pode acessar o banco de dados entrando em contato com example-mongo:27017 .

Dados persistentes com volumes

Você deve usar volumes do Docker se for hospedar um banco de dados real em seu contêiner Mongo. O uso de um volume mantém os dados para que não sejam perdidos quando você encerra o contêiner ou reinicia o daemon do Docker.

A imagem do MongoDB é configurada para armazenar todos os seus dados no diretório /data/db no sistema de arquivos do contêiner. A montagem de um volume nesse local garantirá que os dados sejam mantidos fora do contêiner.

 docker run -d -p 27017:27017 --name example-mongo -v mongo-data:/data/db mongo:latest

Essa versão do comando docker run cria um novo volume do Docker chamado mongo-data e o monta no contêiner. O volume será gerenciado pelo Docker; você pode vê-lo executando docker volumes ls .

Adicione alguns dados ao Mongo:

 use test-db db.demos.save({foo: "bar"})

Em seguida, reinicie seu contêiner:

 docker restart example-mongo

Os dados adicionados anteriormente permanecerão intactos enquanto o Docker reconecta o volume após a reinicialização. Você pode verificar isso reconectando-se ao Mongo e observando a coleção de demos :

 use test-db db.demos.find({foo: "bar"})

Você pode remover o contêiner e executar um completamente novo com o mesmo volume mongo-data . Como os arquivos de volume ainda existirão em seu host, o Docker os colocará de volta no contêiner de substituição. O Mongo pula automaticamente sua rotina usual de inicialização do banco de dados quando o diretório de dados já está preenchido quando o contêiner é iniciado.

Os volumes persistem até que você os remova com o comando docker volumes rm ou use o sinalizador --volumes ao destruir um contêiner com docker rm .

autenticação adicionada

Os novos contêineres do MongoDB não possuem autenticação, então qualquer pessoa pode se conectar ao seu servidor. Não exponha portas de contêiner em um sistema em rede que um invasor possa acessar. O sistema de autenticação do Mongo deve ser usado para proteger adequadamente seu banco de dados.

A imagem do Mongo Docker fornece um início rápido e conveniente para o sistema de autenticação relativamente complexo do Mongo. Você pode adicionar uma conta de usuário inicial definindo as variáveis ​​de ambiente MONGO_INITDB_ROOT_USERNAME E MONGODB_INITDB_ROOT_PASSWORD ao criar seu contêiner:

 docker run -d -p 27017:27017 --name example-mongo -v mongo-data:/data/db -e MONGODB_INITDB_ROOT_USERNAME=example-user -e MONGODB_INITDB_ROOT_PASSWORD=example-pass mongo:latest

Isso iniciará o banco de dados com uma nova conta de usuário chamada example-user . O usuário receberá a função root no banco de dados de autenticação de admin , concedendo privilégios de superusuário.

Considerando os poderes associados a essa conta, fornecer sua senha como uma variável de ambiente de texto simples pode ser problemático. Uma abordagem mais segura é injetar a senha como um arquivo:

 docker run -d -p 27017:27017 --name example-mongo -v mongo-data:/data/db -e MONGODB_INITDB_ROOT_USERNAME=example-user -e MONGODB_INITDB_ROOT_PASSWORD_FILE=/run/secrets/mongo-root-pw mongo:latest

Sufixar as variáveis ​​de ambiente da imagem com _FILE diz ao Mongo para ler o conteúdo do arquivo referenciado, em vez de usar o valor como está. O caminho real do arquivo é arbitrário: monte um arquivo do seu computador host ou use o Docker Secrets. De qualquer forma, sua senha não ficará visível durante o uso. docker inspect para ver as variáveis ​​do contêiner.

Configurando seu servidor

A maneira mais fácil de fornecer valores de configuração personalizados do Mongo é usar os sinalizadores fornecidos mongod . A imagem do Docker é pré-configurada para passar seus sinalizadores de docker run para mongod .

Aqui está um exemplo em que o Mongo está configurado para escutar na porta 9000 em vez do padrão 27017:

 docker run -d --name example-mongo -v mongo-data:/data/db mongo:latest --port 9000

Você pode adicionar um arquivo de configuração do Mongo montando um em seu contêiner e, em seguida, usando o sinalizador --config para informar ao Mongo onde procurar:

 docker run -d --name example-mongo -v mongo-data:/data/db -v ./mongo.conf:/etc/mongo/mongo.conf mongo:latest --config /etc/mongo/mongo.conf

O sinalizador --config deve ser usado: o Mongo não carrega a configuração de nenhum caminho de arquivo por padrão.

A imagem do Docker fornece um mecanismo para inicializar o banco de dados e executar scripts de inicialização na primeira execução. Quaisquer arquivos .sh ou .js inseridos no diretório /docker-entrypoint-initdb.d serão executados em ordem alfabética. Os arquivos .js serão tratados como scripts do Mongo e serão executados no banco de dados de test . Você pode alterar esse banco de dados padrão definindo a variável de ambiente MONGODB_INITDB_DATABASE para um nome de esquema personalizado.

Conclusão

A execução do MongoDB no Docker oferece isolamento e portabilidade para seu banco de dados. Você pode iniciar rapidamente novas instâncias sem instalar manualmente o servidor Mongo. Seus contêineres de aplicativos podem ser conectados diretamente ao Mongo em uma rede compartilhada do Docker.

A imagem do Mongo no Docker Hub tem tags para todas as versões com suporte ativo, incluindo 4.4 e 5.0. A tag latest sempre aponta para a versão mais recente, atualmente 5.0 , portanto, usá-la coloca você em risco de receber quebras de versão principal indesejadas. É mais seguro indicar uma versão específica ao iniciar os contêineres.

A imagem oficial também pode ser usada como base para presets personalizados. Construir um Dockerfile que adiciona seu arquivo de configuração, substitui o COMMAND incluí-lo e copia-o em seus scripts de inicialização forneceria uma maneira de abrir uma nova instância de banco de dados com menos sinalizadores de docker run .

  • O que é um chanfro?
  • Como configurar o Flutter com o Android Studio no Linux

descubra mais conteúdo

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão Geek

O que é uma carga fantasma?

Como usar o Mongo no Docker?

Instale o mongo usando o docker

A primeira coisa é saber o nome da imagem gerada por um container baseado em mongo db, para isso podemos ir ao docker hub e procurar por mongodb no buscador e pronto, já temos a página oficial da imagem mongodb em estivador .

O que é MongoExpress?

MongoDB é um sistema orientado a documentos entre bancos de dados relacionais e não relacionais, MongoExpress é uma ferramenta gráfica de gerenciamento de clientes web MongoDB , escrita usando Node. js, Express e Bootstrap3.

Ir arriba