Tl; Dr
Para aquellos que están familiarizados con el funcionamiento de los volúmenes de MongoDB y Docker y también para aquellos que solo quieren un fragmento rápido de Docker-Compose.YML para su proyecto sin muchos detalles en profundidad, aquí hay un archivo de composición que hará el truco. Hacer un nuevo directorio llamado MongoDB y dentro de él crea un archivo llamado Docker-Compose.YML y pon el siguiente contenido dentro de él:
Versión: '3'
servicios:
my-MongoDB:
Imagen: Mongo: Último
Volúmenes:
- DB-Data:/Data/DB
- Mongo-config:/data/configDB
Volúmenes:
DB-Data:
Mongo-Config:
Guarde el archivo y se ejecute desde el mismo directorio:
$ Docker -Compose Up -d
Esto comenzará un servicio MongoDB con dos volúmenes llamados DB-Data y Mongo-Config la próxima vez que viene una nueva versión de MonogDB en ejecución:
$ Docker-Compose Down
Elimine la imagen actual Docker RMI Mongo Descargue el nuevo Docker Pull Mongo: Last and Run:
$ Docker -Compose Up -d
Ninguno de sus datos se perderá siempre que no elimine intencionalmente los volúmenes de Docker para los datos DB y Mongo-Config. Es posible que desee agregar servicios para su servidor web front-end y otros servicios varios junto con el servicio my-MongoDB, por supuesto.
Qué hicimos?
Bueno, puedo decirte dónde MongoDB espera que se monte los volúmenes y por qué escribí el servicio de esta manera particular. Sin embargo, eso no le ayudaría a escribir su propio archivo de composición para su propia aplicación personalizada. Tal vez, no estás usando MongoDB, sino Mariadb o Postgres. Demos un paso atrás e vayamos e investigemos un contenedor de MongoDB y entendamos el proceso de pensamiento detrás de cómo se escribió el archivo de composición.
Comencemos con una instalación de Docker de pizarra limpia. Sin contenedor en ejecución, sin redes definidas por el usuario, sin volúmenes. Ejecutemos un contenedor MongoDB usando CLI:
$ Docker Run -d - -Name MyDB Mongo: Último
Ahora, si enumeramos contenedores, volúmenes y redes como se muestra a continuación, veremos algunos miembros nuevos:
$ Docker PS
Comando de imagen de ID de contenedor Nombres de puertos de estado creados
F22758A73BA0 Mongo: Último "Docker-EntryPoint.S ... "Hace 9 segundos hasta 7 segundos 27017/tcp mydb
$ Docker Volumen LS
Nombre del volumen del conductor
local C5F99E7D82894C1A1DEF4C48EDFDF43220EEBF6B92FCD49A15C0CAFE0325D369
DaA36A6A6F496075F30BAF99B6AF9F6B6B6B6B9C60E96ced88C102E27381C2432333
$ Docker Network LS
Alcance del controlador de nombre de identificación de red
C41B287F67AB Puente Puente local
A49B316433FA9 Host anfitrión local
A69138357C76 Ninguno Null Local
No se ha agregado nada nuevo a la sección Redes (solo se muestran los valores predeterminados), pero se han creado dos nuevos volúmenes con hashes largos como su nombre.
El nuevo contenedor se llama MyDB y está exponiendo el puerto 27017. Aquí es donde un cliente Mongo puede conectarse y leer o escribir en la base de datos. Inspeccionemos más este contenedor:
$ Docker Inspect MyDB
…
"Montes": [
"Tipo": "Volumen",
"Nombre": "daa36a6f496075ef30baf99b6af9f6b6cfb9c60e96ced88c102e27381c243233" ",
"Fuente": "/var/lib/docker/volumes/daa36a6f496075ef30baf99b6af9f6b6cfb9c60e96ced88c102e273
81C243233/_DATA ",
"Destino": "/data/configdb",
"Conductor": "local",
"Modo": "",
"RW": verdadero,
"Propagación": ""
,
"Tipo": "Volumen",
"Nombre": "C5F99E7D82894C1A1DEF4C48EDFDF43220EEBF6B92FCD49A15C0CAFE0325D369",
"Fuente": "/var/lib/docker/volumes/c5f99e7d82894c1a1def4c48edfdf43220eebf6b92fcd49a15c0cafe
0325
D369/_DATA ",
"Destino": "/data/db",
"Conductor": "local",
"Modo": "",
"RW": verdadero,
"Propagación": ""
],
…
Dentro de esa larga salida JSON que resultaría después de ejecutar el comando Inspect, notará que hay dos monturas. Estos son los volúmenes Docker que enumeramos anteriormente que se montaron dentro del contenedor. Los puntos de montaje son /data /configdb y /data /db.
Al quitar el contenedor:
Los volúmenes aún están intactos, y aún puede verlos enumerados (Docker Volumes LS). Entonces, cualquier información almacenada por el contenedor MongoDB es segura con nosotros. Sin embargo, si intentamos ejecutar el contenedor MongoDB una vez más.
$ Docker Run -d - -Name MyDB2 Mongo: Último
Y luego enumere los volúmenes (volumen de Docker), notará que se crean y montan dos nuevos volúmenes. La información que podemos haber conservado en los volúmenes más antiguos no se está utilizando. Necesitamos eludir este problema nombrando volúmenes y luego montándolos dentro del contenedor en sus respectivos puntos de montaje. De esta manera, cuando se gira un nuevo contenedor de MongoDB de reemplazo y pide volúmenes con nombres particulares, Docker montará con gracia los volúmenes más antiguos en lugar de crear nuevos nuevos.
Para lograr esto nos referimos al Docker-Compose.Archivo YML mencionado en la sección TL; DR y ahora tiene un poco más de sentido para nosotros.
Conectándose a MongoDB
Es posible que no tenga una aplicación frontal lista todavía. Si lo desea, aún puede conectarse al servidor MongoDB, crear una nueva base de datos dentro de ella y agregar algunos pares de valor clave. No es una base de datos SQL típica, sino más bien un almacén de valor clave. Para ver esto en acción, instale MongoDB Compass, que es un programa de cliente que puede ejecutar en su escritorio o computadora portátil para conectarse al servidor de la base de datos.
No necesita hacer esto para fines de producción, los contenedores en la misma red pueden hablar entre sí, pero en aras de la experimentación, expongamos el puerto 27017, que es el puerto predeterminado en el que el servidor MongoDB escucha. Para hacer esto, modifique su Docker-Compose.archivo YML como se muestra:
Versión: '3'
servicios:
my-MongoDB:
Imagen: Mongo: Último
Puertos:
- 27017: 27017
Volúmenes:
- DB-Data:/Data/DB
- Mongo-config:/data/configDB
Volúmenes:
DB-Data:
Mongo-Config:
Lleve la implementación nuevamente ejecutándose, esto recreará la implementación si ya tiene uno en ejecución:
$ Docker -Compose Up -d
Lo siguiente que desea hacer es abrir MongoDB Compass en su máquina local y conectarse al host de Docker. Esta tal vez la dirección localhost: 27017 si está ejecutando un contenedor Mongo en su máquina local. Si se está ejecutando en otro lugar, use la dirección IP o el nombre de dominio de esa máquina con el mismo número de puerto.
Haga clic en conectarse desde la esquina inferior más inferior y se conectará a la base de datos.
Creemos una nueva base de datos y llamemos MyDatabase y dentro de ella MyCollection.
Adentro MyDatabase> MyCollection haga clic en Insertar documento. Aquí podemos agregar algunos datos ficticios:
Ahora puede intentar derribar el despliegue y deshacerse de los contenedores efímeros. Volver a traerlo con contenedores más nuevos y notará que los datos que creamos todavía están allí.
Aquí vimos cómo ejecutar y usar contenedor MongoDB para su aplicación. Aún así, hay mucho que no se ha dicho, por ejemplo, asegurando la base de datos con una contraseña, consultar datos y escalar la base de datos.
Puede obtener más información al respecto aquí o leer los documentos a su tiempo libre aquí.