Posterior a consultar expertos en este tema, programadores de varias áreas y maestros hemos dado con la solución al dilema y la dejamos plasmada en esta publicación.
Solución:
Hago esto usando otro contenedor docker cuyo único propósito es sembrar mongo y luego salir. Sospecho que esta es la misma idea que la de ebaxt, pero cuando estaba buscando una respuesta a esto, solo quería ver un ejemplo rápido y sucio, pero directo. Así que aquí está el mío:
docker-compose.yml
mongodb:
image: mongo
ports:
- "27017:27017"
mongo-seed:
build: ./mongo-seed
links:
- mongodb
# my webserver which uses mongo (not shown in example)
webserver:
build: ./webserver
ports:
- "80:80"
links:
- mongodb
mongo-seed/Dockerfile
FROM mongo
COPY init.json /init.json
CMD mongoimport --host mongodb --db reach-engine --collection MyDummyCollection --type json --file /init.json --jsonArray
mongo-seed/init.json
[
"name": "Joe Smith",
"email": "[email protected]",
"age": 40,
"admin": false
,
"name": "Jen Ford",
"email": "[email protected]",
"age": 45,
"admin": true
]
He encontrado útil usar imágenes personalizadas de Docker y usar volúmenes, en lugar de crear otro contenedor para sembrar.
Estructura de archivos
.
├── docker-compose.yml
├── mongo
│ ├── data
│ ├── Dockerfile
│ └── init-db.d
│ └── seed.js
Cada ubicación de archivo mencionada en
Dockerfile
/docker-compose.yml
es relativo a la ubicación dedocker-compose.yml
DOCKERFILE
FROM mongo:3.6
COPY ./init-db.d/seed.js /docker-entrypoint-initdb.d
docker-compose.yml
version: '3'
services:
db:
build: ./mongo
restart: always
volumes:
- ./mongo/data:/data/db #Helps to store MongoDB data in `./mongo/data`
environment:
MONGO_INITDB_ROOT_USERNAME: USERNAME
MONGO_INITDB_ROOT_PASSWORD: PWD
MONGO_INITDB_DATABASE: DBNAME
semilla.js
// Since Seeding in Mongo is done in alphabetical order... It's is important to keep
// file names alphabetically ordered, if multiple files are to be run.
db.test.drop();
db.test.insertMany([
_id: 1,
name: 'Tensor',
age: 6
,
_id: 2,
name: 'Flow',
age: 10
])
docker-entrypoint-initdb.d
se puede usar para crear diferentes usuarios y cosas relacionadas con la administración de mongodb, solo cree un js-script ordenado alfabéticamente paracreateUser
etc…
Para obtener más detalles sobre cómo personalizar el servicio MongoDB Docker, lea esto
Además, es bueno mantener sus contraseñas y nombres de usuario seguros de Public, NO presione credenciales en git público, en su lugar, use Docker Secrets. Lea también este Tutorial sobre Secretos
Tenga en cuenta que no es necesario entrar en modo docker-swarm usar secretos. Compose Files también admite secretos. Mira esto
Los secretos también se pueden usar en MongoDB Docker Services
Respuesta actual basada en la respuesta de @Jeff Fairley y actualizada de acuerdo con los nuevos documentos de Docker
docker-compose.yml
version: "3.5"
services:
mongo:
container_name: mongo_dev
image: mongo:latest
ports:
- 27017:27017
networks:
- dev
mongo_seed:
container_name: mongo_seed
build: .
networks:
- dev
depends_on:
- mongo
networks:
dev:
name: dev
driver: bridge
Dockerfile
FROM mongo:latest
COPY elements.json /elements.json
CMD mongoimport --host mongo --db mendeleev --collection elements --drop --file /elements.json --jsonArray
Probablemente necesite reconstruir las imágenes actuales.
Comentarios y calificaciones del tutorial
Si para ti ha sido útil este artículo, sería de mucha ayuda si lo compartieras con otros desarrolladores y nos ayudes a extender nuestro contenido.