MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Inicializar dados no mongo dockerizado


Uma abordagem mais independente:
  • crie arquivos javascript que inicializem seu banco de dados
  • crie uma imagem de encaixe do MongoDB derivada que contenha esses arquivos

Existem muitas respostas que usam recipientes descartáveis ​​ou criam volumes e os vinculam, mas isso parece muito complicado. Se você der uma olhada no docker-entrypoint.sh da imagem do docker mongo, verá que a linha 206 executa /docker-entrypoint-initdb.d/*.js arquivos na inicialização usando uma sintaxe:mongo <db> <js-file> . Se você criar uma imagem de encaixe do MongoDB derivada que contenha seus dados de semente, você poderá:
  • tenha um único comando de execução do docker que levanta um mongo com dados de semente
  • os dados são persistidos por meio de paradas e inícios de contêiner
  • redefina esses dados com os comandos docker stop, rm e run
  • implante facilmente com agendadores de tempo de execução como k8s, mesos, swarm, rancher

Esta abordagem é especialmente adequada para:
  • POCs que precisam apenas de alguns dados realistas para exibição
  • pipelines CI/CD que precisam de dados consistentes para testes de caixa preta
  • exemplos de implantações para demonstrações de produtos (engenheiros de vendas, proprietários de produtos)

Como:
  1. Crie e teste seus scripts de inicialização (limpando os dados conforme apropriado)

  2. Crie um Dockerfile para sua imagem derivada que copia seus scripts de inicialização
    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    

  3. Crie sua imagem docker
    docker build -t mongo-sample-data:3.4 .
    

  4. Opcionalmente, envie sua imagem para um registro docker para que outras pessoas usem

  5. Execute sua imagem do docker
    docker run                               \
        --name mongo-sample-data             \
        -p 27017:27017                       \
        --restart=always                     \
        -e MONGO_INITDB_DATABASE=application \
        -d mongo-sample-data:3.4
    

Por padrão, docker-entrypoint.sh aplicará seus scripts ao test banco de dados; o comando de execução acima env var MONGO_INITDB_DATABASE=application irá aplicar estes scripts à application db em vez disso. Como alternativa, você pode criar e alternar para diferentes dbs no arquivo js.

Eu tenho um repositório do github que faz exatamente isso - aqui estão os arquivos relevantes.