Volumenes
Los volúmenes o volumes son directorios del sistema anfitrión a los cuales los contenedores pueden acceder para leer o escribir archivos de datos. Estos datos pueden ser registros del funcionamiento del contenedor, bases de datos creadas en la ejecución, rutinas de lenguajes interpretados por el contenedor que se requiere poder actualizar desde fuera, etc. El uso de volúmenes permite mantener los datos afuera del contenedor, previniendo su borrado cuando se eliminan los contenedores.
Tipos de volúmenes
Hay varios tipos de volumenes en base a su creación:
- Anónimos: en éstos solo se indica la ruta de origen a montar. No son referenciables desde otros contenedores. El gestor de contenedores elige la ubicación automáticamente.
- Nombrados: son similares a los volúmenes anónimos pero pueden ser referenciados por múltiples contenedores gracias a su nombre, permitiendo su compartimento y reutilización.
- De anfitrión o host: en estos volúmenes se indica qué carpeta montar y adónde montarla.
Gestionar volumenes
Crear
Listar
La lista de los volúmenes de usuario se obtiene con el comando list
:
Inspeccionar
La información del volumen elegido se obtiene con el comando inspect
:
El punto de montaje es la ruta donde el volumen almacenará los datos. Éste se consulta con la opción --format {{.Mountpoint}}
:
En el ejemplo, el punto de montaje queda:
/home/USUARIO/.local/share/containers/storage/volumes/nombre_volumen/_data
Volumenes en Linux
En sistemas Linux, la ruta habitual de almacenamiento de los volúmenes es:
/home/USUARIO/.local/share/containers/storage/volumes/
Más información sobre el comando inspect.
Borrar voluemn
Los volumenes se pueden eliminar uno a uno con ayuda del comando rm
:
Volumenes del sistema en Linux
Los volúmenes del sistema son invisibles para el usuario a menos que se recurra a la orden sudo
para ejecutar los comandos:
sudo podman volume create nombre_volumen # crear
sudo podman volume inspect nombre_volumen # inspeccionar
sudo podman volume list # listar
sudo podman volume rm nombre_volumen # borrar
Los volumenes del sistema en Linux se guardan en la ruta:
/var/lib/containers/storage/volumes/
Borrar (no utilizados)
Con el comando prune
se puede eliminar aquellos contenedores que no están siendo usados por ningun contenedor:
Este comando lista los volumenes susceptibles de ser borrados y pide confirmación antes de eliminarlos.
Crear contenedores con volumenes
La forma de configurar el agregado de volumenes es mediante la opción -v
.
Con ella se especifican:
- el nombre del volumen o la ruta del directorio del anfitrión;
- la ruta interna del contenedor sobre la que se debe montar el volumen.
Se permite la asignación de múltiples volumenes al mismo contenedor usando repetidas veces la opcíón -v
.
Volumenes con nombre
El nuevo contenedor puede acceder a un volumen preexistente en base a su nombre:
Ruta de host
Otra manera de implementar el volumen es indicando directamente la ruta del sistema anfitrión al que el contenedor tendrá acceso:
Sólo lectura
Los volumenes se pueden agregar a los contenedores con la opción ro
(read only)
podman create -v nombre_volumen:ruta_montaje_interna:ro nombre_imagen
Ejemplo aplicado: base de datos
En este ejemplo se crea una base de datos SQL con la imagen oficial de MariaDB. Se agregan las siguientes configuraciones:
- la conexion se mantiene en el puerto
3306
(predefinido); - acceso con usuario
root
(administrador) y contraseña1234
; - una base de datos vacía llamada
mi-db
; - un volumen pesistente para la base de datos interna.
Primero se exportan los valores de las variables de entorno:
# variables de entorno
export MARIADB_ROOT_PASSWORD=1234
export MARIADB_DATABASE=mi-db
Luego se crea un volumen nombrado mariadb-persistente
:
Y por último se crea el contenedor, con el nombre mariadb-test
:
Para poder verificar que el contenedor está bien configurado sólo hay que cargar los datos en un conector o programa front compatible con bases MariaDB y verificar que la conexión es exitosa. Y para corroborar la persistencia de datos hay que:
- crear cambios (tablas, otras bases de datos, etc);
- borrar el contenedor
- crear el contenedor de nuevo.
Los datos agregados o modificados deben seguir allí.
TIP: rutas para bases de datos
Los gestores de bases de datos tienen ciertas rutas predefinidas para guardar la información. En los sistemas Linux estas rutas son:
Base de datos | ruta de montaje |
---|---|
MySQL / MariaDB | /var/lib/mysql |
PostgreSQL | /var/lib/postgresql/data |
MongodB | /data/db |
Dado que las imágenes de Docker y Podman son basadas en distribuciones Linux, estas mismas rutas son las usadas adentro del contenedor.
Rutinas en volumenes
Una posibilidad que permiten los volumenes es pasar las rutinas a ejecutar por adentro de ellos. Esto evita tener que reconstruir los containers cada vez que se hagan cambios en las rutinas.