Los volúmenes de Docker son la forma preferida de manejar datos persistentes creados por y utilizados por contenedores de Docker. Veamos cómo funciona esto cubriendo cómo crear volúmenes de Docker en Windows. ¡También aprenderás cómo gestionarlos!
Esta publicación de blog tiene un video complementario creado por Matt McElreath, colaborador de TechSnips. Si prefieres ver el video, siéntete libre de hacerlo, de lo contrario, sigue leyendo.
Almacenamiento de datos persistentes
Si deseas almacenar datos persistentes para contenedores, tienes un par de opciones. Primero, te mostraré cómo usar un montaje de enlace. Actualmente, estoy en una carpeta llamada data en mi C:\. Si listo el contenido de esta carpeta, puedes ver que tengo cinco archivos de texto.

Si quiero hacer que esta carpeta esté disponible para un contenedor, puedo montarla al iniciar el contenedor.
Vamos a ejecutar un contenedor usando docker run
. Voy a ejecutar este contenedor en modo interactivo, luego especificaré -V
. Aquí, voy a poner la ruta a mi carpeta de datos, seguida de dos puntos, luego especificaré la ruta dentro del contenedor donde me gustaría que se monte esta carpeta.
Para esto, voy a especificar la carpeta C:\shareddata. Luego especificaré la imagen de núcleo de servidor Windows image y finalmente, especificaré que quiero ejecutar PowerShell una vez que esté dentro del contenedor.
Ahora que estoy dentro del nuevo contenedor, si listo los contenidos de C:\, puedes ver que tengo una carpeta shareddata.

Vamos a entrar en esa carpeta y listar los contenidos. Aquí están mis cinco archivos de prueba que están ubicados en mi host de contenedores.

I can also create files in this folder, which will be available to other containers or my container host. Let’s go ahead and run a new item to create a file called containertest.

Podemos ver arriba que se ha creado un nuevo archivo desde dentro del contenedor. Ahora saldré de este contenedor, lo cual lo cerrará ejecutando exit
.
Si ejecuto docker ps
, puedes ver que actualmente no hay contenedores en ejecución.

Enumerando Datos en Volúmenes de Docker
Ahora vamos a listar nuevamente los contenidos de la carpeta de datos desde mi host de contenedores.

Podemos ver el nuevo archivo que fue creado desde dentro del contenedor llamado containertest. Sin embargo, los montajes de enlace tienen una funcionalidad limitada, por lo tanto, los volúmenes son la forma preferida de lograr lo que estamos intentando hacer. Para comenzar con los volúmenes, podemos ejecutar el mismo comando para iniciar un contenedor, pero esta vez con un par de pequeñas diferencias. Donde especificamos el volumen, en lugar de usar la ruta en el sistema de archivos del host de contenedores, voy a usar la palabra hostdata como el nombre de un volumen que quiero crear y usar.
Desde dentro del nuevo contenedor, si listo los contenidos de C:\, puedes ver nuevamente que tengo una carpeta llamada shareddata.

Si enumero el contenido de esa carpeta, actualmente está vacía porque creamos un volumen en blanco. Ahora ejecutemos Ctrl-P-Q, lo que nos sacará del contenedor en ejecución, pero lo mantendrá en segundo plano.
Desde el host del contenedor, ejecuta docker volume ls
. Esto mostrará los volúmenes actuales en este host de contenedor. Tengo un volumen llamado hostdata, que se creó cuando lo especifiqué en el comando docker run
.

Si ejecuto docker ps
, podemos ver nuestro contenedor en ejecución.

Detén ese contenedor usando docker stop
. Ahora no tenemos contenedores en ejecución.

Elimina los contenedores detenidos ejecutando docker rm
. Si vuelvo a enumerar los volúmenes, puedes ver que el volumen hostdata aún está disponible y se puede montar en nuevos contenedores.

Creación de volúmenes de Docker
Otra forma de crear un volumen es usar el comando docker volume create
. Si no especificas un nombre, Docker le dará un nombre que es una larga lista de caracteres aleatorios. De lo contrario, puedes especificar un nombre aquí. Voy a llamar a este volumen logdata. Ahora podemos ver que está en la lista cuando enumeramos los volúmenes nuevamente.

Ahora montarás eso en un nuevo contenedor. Usa docker run
nuevamente y para el volumen especifica el volumen que acabas de crear y montalo en c:\logdata.
Desde dentro del contenedor, ingresa al directorio logdata y crea un par de archivos. En este momento, no hay archivos en este directorio, así que sigue adelante y créalos.
Ahora tengo dos archivos de registro en este directorio.

Ejecuta Ctrl-P-Q nuevamente para salir de este contenedor mientras aún está en ejecución. Mientras ese contenedor está en ejecución, inicia un nuevo contenedor con el mismo volumen montado.
Si ejecutamos una lista en el directorio logdata en el nuevo contenedor, podemos ver los dos archivos de registro compartidos.

Ahora, sal de este contenedor. Deberías tener todavía un contenedor en ejecución y dos contenedores detenidos.

Ahora detén todos los contenedores en ejecución, luego ejecuta docker rm
para eliminar todos los contenedores detenidos.

Lista los volúmenes nuevamente. El volumen logdata todavía está disponible para ser montado en futuros contenedores.

Si ejecutas docker volume
, obtendrás algo de ayuda de uso para el comando.

Inspección de Volúmenes de Docker
Ya vimos create
, así que pasemos a inspect
. Si ejecuto docker volume inspect
contra el volumen logdata, devolverá las propiedades de ese volumen, incluido el punto de montaje que es la ruta física al volumen en el host del contenedor.

Abramos esa carpeta usando Invoke-Item
y echemos un vistazo. En el directorio logdata, hay una carpeta llamada data. Si la abrimos, podemos ver los archivos que se crearon desde el contenedor anterior.

Eliminación de Volúmenes de Docker
Para eliminar un volumen, podemos ejecutar docker volume rm
, seguido del nombre del volumen que desea eliminar.
Ahora, si listo los volúmenes, logdata ya no está ahí.

Finalmente, podemos usar prune
para eliminar todos los volúmenes locales no utilizados. Esto eliminará todos los volúmenes que no estén montados en un contenedor en ejecución o detenido.

Debe tener cuidado con este comando, por lo que hay una advertencia y una solicitud para asegurarse de que esté seguro de que desea hacer esto. Si escribo Y
y presiono enter, me mostrará qué volúmenes fueron eliminados.
Y si vuelvo a listar mis volúmenes, verá que todos han sido eliminados.

Resumen
En esta publicación de blog, debería haber obtenido una buena visión general de cómo administrar los volúmenes de Docker en Windows. Docker es una excelente plataforma de contenedores. Con su soporte para Windows y sus nuevas habilidades para administrar los volúmenes de Docker, ¡será imparable!