Criando uma Imagem Docker Personalizada com Dados do MongoDB

Este post também está disponível em: English

Quando trabalhamos com containers, muitas vezes precisamos de um ambiente de desenvolvimento ou testes que reflita a produção. No meu caso, precisei criar uma imagem Docker personalizada contendo bancos de dados e collections de uma instância MongoDB em produção.

Para isso, utilizei um shell script para exportar e importar os dados. Primeiro, apresento o script e, em seguida, explico como incorporá-lo em uma imagem Docker.

Exportação e Importação de Dados do MongoDB com Shell Script

Como a importação ocorre dentro de um container Docker, não foi necessário autenticação (usuário/senha) no processo de import. Além disso, para evitar um volume excessivo de dados no ambiente de testes, limitei a exportação a 100 documentos por collection – esse valor pode ser ajustado conforme a necessidade.

A seguir, o script utilizado para exportar os dados de uma instância MongoDB e posteriormente importá-los em um container Docker:

### MONGOEXPORT
candidates=$(echo "show databases" | mongo -u <usuario> --host <hostname>:27017 --authenticationDatabase admin  -p <senha> | grep -Ev "^(MongoDB|connecting|admin|local|test|bye)" | awk '{print $1}')
for candidate in $candidates; do
    collections=`echo "show collections" | mongo -u <usuario> --host <hostname>:27017 --authenticationDatabase admin  -p <senha> $candidate --quiet`
    var=0
    for collection in $collections; do
        var=$((var + 1))
        mongoexport -u <usuario> --host <hostname>:27017 --authenticationDatabase admin  -p <senha> --db $candidate -c $collection --limit=100 --out json/$var"_"$candidate"_"$collection"_export.json"
    done
done
ShellScript
### MONGOIMPORT
for i in `ls json`;
do
    database=`echo $i | awk -F "__" '{print $2}'`
    collection=`echo $i | awk -F "__" '{print $3}'`
    mongoimport -d $database -c $collection --file json/$i
done
ShellScript

Artigo anterior

Utilizando o Vagrant com o Oracle Database

Escreva um comentário

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *