Docker-compor MongoDB

Docker-compor MongoDB

Mantendo o estado do seu contêiner Mongo nas atualizações.

Tl; dr

Para aqueles que estão familiarizados com o funcionamento dos volumes MongoDB e Docker e também para aqueles que querem apenas um rápido trecho de Docker-Comppose.YML para o projeto deles sem muitos detalhes detalhados, aqui está um arquivo de composição que fará o truque. Faça um novo diretório chamado MongoDB e, dentro dele, crie um arquivo chamado Docker-Compose.YML e coloque o seguinte conteúdo dentro dele:

Versão: '3'
Serviços:
My-Mongodb:
Imagem: Mongo: mais recente
volumes:
- DB-Data:/Data/DB
- Mongo-config:/data/configdb
volumes:
DB-Data:
Mongo-config:

Salve o arquivo e execute do mesmo diretório:

$ Docker -Compõe Up -d

Isso iniciará um serviço MongoDB com dois volumes chamados DB-Data e Mongo-Config na próxima vez que uma nova versão do Monogdb aparecer na execução:

$ docker-compor para baixo

Remova a imagem atual Docker RMI Mongo Baixe o novo Docker Pull Mongo: mais recente e Run:

$ Docker -Compõe Up -d

Nenhum de seus dados será perdido desde que você não remova intencionalmente os volumes do Docker para DB-Data e Mongo-Config. Você pode adicionar serviços para o seu servidor da Web front-end e outros serviços diversos, juntamente com apenas o serviço My-MongoDB, é claro.

O que nós fizemos?

Bem, eu posso apenas dizer onde o MongoDB espera que os volumes sejam montados e por que escrevi o serviço desta maneira em particular. No entanto, isso não ajudaria você a escrever seu próprio arquivo de composição para seu próprio aplicativo personalizado. Talvez você não esteja usando o MongoDB, mas Mariaadb ou Postges. Vamos dar um passo atrás e investigar um contêiner MongoDB e entender o processo de pensamento por trás de como o arquivo de composição foi escrito.

Vamos começar com uma instalação limpa de Slate Docker. Sem contêiner em execução, sem redes definidas pelo usuário, sem volumes. Vamos executar um contêiner MongoDB usando CLI:

$ Docker Run -D -Nome MyDB Mongo: mais recente

Agora, se listarmos contêineres, volumes e redes, como mostrado abaixo, veremos alguns novos membros:

$ docker ps
Comando de imagem de identificação de contêiner nomes de portas de status criados
F22758A73BA0 MONGO: mais recente "Docker-EntryPoint.s… "9 segundos atrás de 7 segundos 27017/tcp mydb
$ docker volume ls
Nome do volume do driver
C5F99E7D82894C1A1DEF4C48EDFDF43220EBF6B92FCD49A15C0CAFE0325D369
Local DAA36A6F496075EF30BAF99B6AF9F6B6CFB9C60E96CED88C102E27381C243233
$ Docker Network LS
Nome do ID da rede Escopo do driver
C41B287F67AB Bridge Bridge Local
A49B31643FA9 Host Local Host Local
A69138357C76 Nenhum local nulo

Nada novo foi adicionado à seção de redes (apenas os padrões são mostrados), mas dois novos volumes foram criados com hashes longos como seu nome.

O novo contêiner é chamado MyDB e está expondo a porta 27017. É aqui que um cliente Mongo pode se conectar e ler ou escrever para o banco de dados. Vamos inspecionar ainda mais este contêiner:

$ Docker inspecionar mydb
..
"Mounts": [

"Tipo": "volume",
"Nome": "DAA36A6F496075EF30BAF99B6AF9F6B6CFB9C60E96CED88C102E27381C243233",
"Fonte": "/var/lib/docker/volumes/daa36a6f496075ef30baf99b6af9f6b6cfb9c60e96ced88c102e273
81C243233/_Data ",
"Destino": "Data/ConfigDB",
"Driver": "Local",
"Modo": "",
"RW": verdadeiro,
"Propagação": ""
,

"Tipo": "volume",
"Nome": "C5F99E7D82894C1A1DEF4C48EDFDF43220EBF6B92FCD49A15C0CAFE0325D369",
"Fonte": "/var/lib/docker/volumes/c5f99e7d82894c1a1def4c48edfdf43220eebf6b92fcd49a15c0cafe
0325
d369/_data ",
"Destino": "/dados/db",
"Driver": "Local",
"Modo": "",
"RW": verdadeiro,
"Propagação": ""

],
..

Dentro daquela longa saída JSON que resultaria após a execução do comando Inspect, você notará que existem duas montagens. Estes são os volumes do docker que listamos anteriormente sendo montados dentro do recipiente. Os pontos de montagem são /dados /configdb e /dados /db.
Ao remover o recipiente:

$ docker rm -f mydb

Os volumes ainda estão intactos e você ainda pode vê -los listados (Docker Volumes LS). Portanto, qualquer informação armazenada pelo contêiner do MongoDB é segura conosco. No entanto, se tentarmos executar o contêiner MongoDB mais uma vez.

$ Docker Run -D -Nome MyDB2 Mongo: mais recente

E depois liste os volumes (volume do Docker LS), você notará que dois novos volumes são criados e montados. As informações que podemos ter mantidas nos volumes mais antigas não estão sendo usados. Precisamos contornar esse problema nomeando volumes de nós mesmos e depois montá -los dentro do recipiente em seus respectivos pontos de montagem. Dessa forma, quando um novo recipiente de MongoDB substituto é girado e pede volumes com nomes específicos, o Docker montará graciosamente os volumes mais antigos, em vez de criar novos.

Para conseguir isso, nos referimos à composição do Docker.Arquivo YML mencionado na seção TL; DR e faz um pouco mais de sentido para nós agora.

Conectando -se ao MongoDB

Você pode não ter um aplicativo de front-end pronto para. Se desejar, você ainda pode se conectar ao servidor MongoDB, criar um novo banco de dados dentro dele e adicionar alguns pares de valor -chave. Não é um banco de dados SQL típico, mas uma espécie de loja de valor-chave. Para ver isso em ação, instale o MongoDB Compass, que é um programa de clientes que você pode executar em seu desktop ou laptop para se conectar ao servidor de banco de dados.

Você não precisa fazer isso para fins de produção, os contêineres da mesma rede podem conversar um com o outro, mas, por uma questão de experimentação, vamos expor a porta 27017, que é a porta padrão na qual o servidor MongoDB ouve. Para fazer isso, modifique seu Docker-Compose.arquivo yml como mostrado:

Versão: '3'
Serviços:
My-Mongodb:
Imagem: Mongo: mais recente
Portas:
- 27017: 27017
volumes:
- DB-Data:/Data/DB
- Mongo-config:/data/configdb
volumes:
DB-Data:
Mongo-config:

Traga a implantação novamente em execução, isso recriará a implantação se você já tiver uma em execução:

$ Docker -Compõe Up -d

A próxima coisa que você quer fazer é abrir o MongoDB Compass em sua máquina local e conectar -se ao host do Docker. Talvez este seja o endereço localhost: 27017 se você estiver executando o contêiner Mongo em sua máquina local. Se estiver em execução em outro lugar, use o endereço IP ou o nome de domínio dessa máquina com o mesmo número de porta.

Clique em Conectar -se a partir do canto mais baixo e você estará conectado ao banco de dados.

Vamos criar um novo banco de dados e chamá -lo de mydatabase e dentro dele myCollection.

Dentro MyDatabase> MyCollection Clique em Insira o documento. Aqui podemos adicionar alguns dados fictícios:

Agora você pode tentar derrubar a implantação e se livrar de contêineres efêmeros. Traga -o de volta com recipientes mais novos e você notará que os dados que criamos ainda estão lá.

Conclusão

Aqui vimos como correr e usar o contêiner MongoDB para seu aplicativo. Ainda há muita.

Você pode aprender mais sobre isso aqui ou ler os documentos à sua vontade aqui.