Volúmenes en Docker.¶
- Un contenedor por defecto no tiene persistencia.
PERSISTENCIA
Se entiende por contenedor persistente que aquel contenedor que almacene los datos incluso después de haber sido borrado dicho contenedor.
Es decir, si borramos un contenedor persistente podríamos continuar con todos nuestros datos al recrearlo.
Para que se guarden tenemos 3 opciones:
Montajes “tmpfs”:¶
⚡ Los datos generados por el contendor se almacenan en el sistema operativo. Al detener el contenedor, se borran dichos datos.
⚡Solo funciona en sistemas Linux.
Directorios Enlazados (bind):¶
⚡ La información se guarda fuera del servicio Docker, es decir, en una carpeta enlazada de nuestra máquina anfitriona.
⚡ Ventaja: Podemos modificar los ficheros siendo propietarios de ellos, sin pasar por el servicio de docker y evitando posibles problemas de permisos.
⚡ Desventaja: No se puede hacer uso de los comandos del servicio docker para gestionarlo. Un montaje bind en linux no se puede usar en Windows y viceversa.
Ejemplo.¶
Todo lo que creemos en el /home de nuestro contenedor se guarda en la carpeta actual ($pwd).
docker run -d -it --name volbind --mount type=bind,source=$(pwd),target=/home ubuntu
Volúmenes:¶
⚡ La información se guarda dentro del servicio Docker, lo que nos permite mayor flexibilidad y facilidad a la hora de ser gestionados por el propio servicio (usar comandos del terminal de docker).
⚡ Podemos pasar un volumen entre Linux / Windows.
⚡ Es la forma más habitual de trabajar.
⚡ Podemos hacer uso de los comandos "docker volume XXX" para gestionarlos.
Ejemplo.¶
MOUNT
Podemos hacer uso tanto de -v como de - -mount para crear volúmenes en docker.
Se ha creado un volumen "miVol" que apunta a /home del contenedor.
docker run -d -it --name ejemploVol -v miVol:/home ubuntu
docker run -d -it --name ejemploVol --mount source=miVol,target=/home ubuntu
Si ahora realizo los siguientes pasos:
1. Crear un fichero en el /home del contenedor.
2. Borrar el contenedor.
3. Crear otro contenedor usando el mismo volumen.
⚡ Tras estos pasos el nuevo contenedor seguirá almancenando todos mis ficheros del anterior contenedor.
⚡ Los datos del /home de contenedor se están guardando realmente en la máquina anfitriona.