Crear volúmenes de Docker en Windows sin esfuerzo

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.

Multiple text files in the C:\data folder

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.

docker run -it -v c:\Data:c:\shareddata microsoft/windowsservercore powershell

Ahora que estoy dentro del nuevo contenedor, si listo los contenidos de C:\, puedes ver que tengo una carpeta shareddata.

Listing directory contents in a Docker container

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.

Files on the host

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.

Creating a file on the container host

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.

Looking for running containers

Enumerando Datos en Volúmenes de Docker

Ahora vamos a listar nuevamente los contenidos de la carpeta de datos desde mi host de contenedores.

Listing files on the container host

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.

Listing files

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.

Listing Docker volumes

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

Listing running containers

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

Stopping a Docker container

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.

Listing Docker volumes

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.

Creating a new Docker volume

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.

> docker run -it -v logdata:c:\logdata microsoft/windowsservercore powershell

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.

PS> New-Item -Name Log1.txt -ItemType File
PS> New-Item -Name Log2.txt -ItemType File

Ahora tengo dos archivos de registro en este directorio.

Two files in C:\logdata

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.

> docker run -it -v logdata:c:\logdata microsoft/windowsservercore powershell

Si ejecutamos una lista en el directorio logdata en el nuevo contenedor, podemos ver los dos archivos de registro compartidos.

Two log files being shared with containers

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

Two containers still running

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

Removing Docker containers

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

Volume still available

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

Docker volume syntax

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.

Inspecting Docker volumes

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.

Files created earlier

Eliminación de Volúmenes de Docker

Para eliminar un volumen, podemos ejecutar docker volume rm, seguido del nombre del volumen que desea eliminar.

> docker volume rm logdata

Ahora, si listo los volúmenes, logdata ya no está ahí.

Listing Docker volumes

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.

Inspecting the prune parameter

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.

No Docker volumes exist

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!

Source:
https://adamtheautomator.com/create-docker-volume/