El uso de volúmenes en Docker es la forma recomendada para garantizar la persistencia de la información, incluso tras eliminar los contenedores. Los volúmenes son enteramente manejados por Docker, y tienen varias ventajas sobre los bind mount (que dependen de la estructura de directorios y sistema operativo de la máquina host).
Algunas de las ventajas principales con las que cuentan son:
- Administración a través de la línea de comandos
- Incluyen soporte para cifrado y pueden ser compartidos entre distintos contenedores
- Simplicidad para hacer copias de respaldo o migraciones
- Posibilidad de utilizar hosts remotos o proveedores en la nube
Crear un volumen con nombre y agregar contenido
Para comenzar, veamos las opciones disponibles para la manipulación de volúmenes con la ayuda de Docker:
docker volume --help
docker volume create --help
Como observamos arriba, para crear un nuevo volumen utilizamos docker volume create
seguido del nombre que deseamos darle. Usaremos el comando que aparece abajo para crear un volumen con el nombre webvol. Por el momento no agregaremos opciones adicionales.
docker volume create webvol
Ver el listado de volúmenes en Docker
En cualquier momento es posible visualizar la lista completa de volúmenes con un comando:
docker volume ls
En el listado de la imagen anterior podemos ver no sólo el volumen que acabamos de crear, sino también otros volúmenes que se generaron al crear contenedores.
Para obtener más detalles e información sobre un volumen en particular, podemos emplear el comando docker volume inspect NOMBREVOLUMEN
. Por ejemplo, si inspeccionamos el volumen webvol que acabamos de encontrar nos encontraremos con la siguiente información:
El dato de mayor interés por el momento es Mountpoint, que representa el directorio del host que está dedicado a este volumen en particular. La ruta al directorio resalta una de las características de los volúmenes: son administrados por Docker y se encuentran fuera de las áreas personales de los usuarios.
A continuación agregaremos una línea de contenido a un archivo index.html en esa ubicación. Por simplicidad y a fines demostrativos no seguimos la estructura formal de una página web:
sh -c "echo 'Hola desde un volumen' > /var/lib/docker/volumes/webvol/_data/index.html"
Ahora que dispones de un volumen y contenido en el mismo, en el próximo paso lo usarás durante la creación de un contenedor desde cero.
Creación de un contenedor y uso del volumen
A pesar de que es posible crear un volumen y un contenedor de manera conjunta, en este tutorial decidimos realizarlas de forma separada. El motivo detrás de esta elección es resaltar la independencia entre ambos recursos. Por esto, al eliminar un contenedor no se elimina el volumen asociado a este.
A continuación, crearemos un nuevo contenedor llamado webserver agregando la opción --mount source=webvol,destination=/usr/share/nginx/html
. Esto montará el volumen webvol en el directorio /usr/share/nginx/html, que es la raíz del sitio web por defecto.
docker container run --name=webserver --publish 8080:80 --detach --restart=always --mount source=webvol,destination=/usr/share/nginx/html nginx
Tras haber creado el contenedor, podemos utilizar el comando docker container ls
para verificar que esté corriendo. Si funciona, podemos entrar a un navegador e ingresar la IP de nuestro servidor y el puerto 8080 para ver la página que creamos anteriormente, como se puede apreciar en la imagen que acompaña a este párrafo. Nota: si no puedes ingresar a la página, debes configurar el firewall de tu servidor para permitir el tráfico entrante al servidor 8080.
Como explicamos más arriba, el volumen es independiente del contenedor y hasta puede usarse en otro. Para ilustrar, detendremos (docker container stop webserver
) y eliminaremos (docker rm webserver
) el contenedor webserver para luego confirmar que el volumen está intacto listando los volúmenes (docker volume ls
):
Si empleamos el comando cat
y la ubicación del archivo que creamos en el volumen, nos encontraremos con que aún está disponible:
A continuación, agregaremos una nueva línea a ese archivo:
sh -c "echo '<br>Esta es una nueva linea' >> /var/lib/docker/volumes/webvol/_data/index.html"
Luego, crearemos un nuevo contenedor, que, al igual que el anterior, estará montando el volumen webvol:
docker container run --name=webserver2 --publish 8080:80 --detach --restart=always --mount source=webvol,destination=/usr/share/nginx/html nginx
Si volvemos a ingresar a la dirección de IP de nuestro servidor en el puerto 8080 a través de un navegador, nos encontraremos con el archivo modificado:
Cómo eliminar un volumen en Docker
Para eliminar un volumen, primero es necesario detener y eliminar los contenedores que lo estén empleando. Luego hay que emplear el comando docker volume rm NOMBREVOLUMEN
. Por ejemplo, si quisiéramos eliminar el volumen webvol que creamos anteriormente, deberíamos detener el contenedor que lo emplea (docker container
stop webserver2
), eliminar ese contenedor (docker rm webserver2
) y por último eliminar el volumen (docker volume rm webvol
). Si intentamos eliminarlo directamente, nos dará un mensaje de error:
En la imagen anterior también podemos ver el uso del comando docker volume prune
, que elimina todos los contenedores que no están siendo empleados por ningún contenedor.
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.