Home » Comprensión de la instrucción VOLUME de Dockerfile

Comprensión de la instrucción VOLUME de Dockerfile

by admin
Comprensión de la instrucción VOLUME de Dockerfile

Los volúmenes de Docker se utilizan para almacenar datos persistentes fuera de sus contenedores. Permiten que los archivos de configuración, las bases de datos y los cachés utilizados por su aplicación sobrevivan a las instancias de contenedores individuales.

Los volúmenes se pueden montar cuando inicia contenedores con el docker run de comando -v bandera. Esto puede hacer referencia a un volumen con nombre o montar un directorio host en el sistema de archivos del contenedor.

También es posible definir volúmenes en el momento de la construcción de la imagen usando el VOLUME instrucción en sus Dockerfiles. Este mecanismo garantiza que los contenedores iniciados desde la imagen tendrán almacenamiento persistente disponible. En este artículo, aprenderá cómo usar esta instrucción y los casos de uso en los que tiene sentido.

Definición de volúmenes en Dockerfiles

El Dockerfile VOLUME La instrucción crea un punto de montaje de volumen en una ruta de contenedor especificada. Se montará un volumen desde el sistema de archivos de su host Docker cada vez que se inicie un contenedor.

El Dockerfile del siguiente ejemplo define un volumen en el /opt/app/data camino del contenedor. Los nuevos contenedores montarán automáticamente un volumen en el directorio.

FROM ubuntu:22.04
VOLUME /opt/app/data

Cree su imagen para que pueda probar el montaje de volumen:

$ docker build -t volumes-test:latest .

Recupere la lista de volúmenes existentes como referencia:

$ docker volume ls
DRIVER   VOLUME NAME
local    demo-volume

Ahora inicie un contenedor usando su imagen de prueba:

$ docker run -it volume-test:latest
root@07be7bde68c2:/#

Repite el docker volume ls comando para confirmar que se ha creado un nuevo volumen:

$ docker volume ls
DRIVER   VOLUME NAME
local    3198bf857fdcbb8758c5ec7049f2e31a40b79e329f756a68725d83e46976b7a8
local    demo-volume

Salga del caparazón de su contenedor de prueba para que el contenedor se detenga:

root@07be7bde68c2:/# exit
exit

El volumen y sus datos seguirán persistiendo:

$ docker volume ls
DRIVER   VOLUME NAME
local    3198bf857fdcbb8758c5ec7049f2e31a40b79e329f756a68725d83e46976b7a8
local    demo-volume

Puede definir varios volúmenes en una instrucción como una cadena delimitada por espacios o una matriz JSON. Los dos formularios siguientes crean y montan dos volúmenes únicos cuando se inician los contenedores:

VOLUME /opt/app/data /opt/app/config
# OR
VOLUME ["/opt/app/data", "/opt/app/config"]

Llenar el contenido del volumen inicial

Los volúmenes se rellenan automáticamente con el contenido colocado en el directorio de montaje mediante los pasos de creación de imágenes anteriores:

FROM ubuntu:22.04
COPY default-config.yaml /opt/app/config/default-config.yaml
VOLUME /opt/app/config

Este Dockerfile define un volumen que se inicializará con el existente default-config.yaml expediente. El contenedor podrá leer /opt/app/config/default-config.yaml sin tener que comprobar si el archivo existe.

Cambios en el contenido de un volumen realizados después la VOLUME la instrucción será descartada. En este ejemplo, el default-config.yaml el archivo aún está disponible después de que se inician los contenedores porque el rm el comando viene despues /opt/app/config está marcado como un volumen.

FROM ubuntu:22.04
COPY default-config.yaml /opt/app/config/default-config.yaml
VOLUME /opt/app/config
RUN rm /opt/app/config/default-config.yaml

Anulación de las instrucciones de VOLUMEN al iniciar un contenedor

Volúmenes creados por el VOLUME instrucción se nombran automáticamente con un hash único largo. No es posible cambiar sus nombres, por lo que puede ser difícil identificar qué volúmenes utilizan activamente sus contenedores.

Puede evitar que estos volúmenes aparezcan definiendo manualmente los volúmenes en sus contenedores con docker run -v como siempre. El siguiente comando monta explícitamente un volumen con nombre en el contenedor /opt/app/config directorio, haciendo que el Dockerfile VOLUME instrucción redundante.

$ docker run -it -v config:/opt/app/config volumes-test:latest

¿Cuándo debe usar las instrucciones VOLUME?

VOLUME Las instrucciones pueden ser útiles en situaciones en las que desea imponer que se utilice la persistencia, como en las imágenes que empaquetan un servidor de base de datos o un almacén de archivos. Usando VOLUME instrucciones hace que sea más fácil iniciar contenedores sin recordar el -v banderas a aplicar.

VOLUME también sirve como documentación de las rutas del contenedor que almacenan datos persistentes. Incluir estas instrucciones en su Dockerfile le permite a cualquier persona determinar dónde guarda su contenedor sus datos, incluso si no están familiarizados con su aplicación.

Trampas de VOLUMEN

VOLUME no está exento de inconvenientes. Su mayor problema es cómo interactúa con las construcciones de imágenes. Usar una imagen con un VOLUME instrucción como la imagen base de su compilación se comportará de manera inesperada si cambia el contenido dentro del punto de montaje del volumen.

El gotcha de antes todavía se aplica: los efectos de los comandos después del VOLUME la instrucción será descartada. Como VOLUME residirá en la imagen base, todo en su propio Dockerfile viene después de la instrucción y no puede modificar el contenido predeterminado del directorio. Detrás de escena, iniciar el contenedor temporal para la compilación creará un nuevo volumen en su host que se destruirá al final de la compilación. Los cambios no se volverán a copiar en la imagen de salida.

El montaje automático de volumen también puede ser problemático en otras situaciones. A veces, los usuarios pueden preferir iniciar un contenedor temporal sin ningún volumen, quizás con fines de evaluación o depuración. VOLUME elimina esta posibilidad ya que no es posible deshabilitar los montajes automáticos. Esto hace que se acumulen muchos volúmenes redundantes en el host si los contenedores que usan la instrucción se inician regularmente.

Resumen

Dockerfile VOLUME Las instrucciones permiten que los montajes de volumen se definan en el momento de la creación de la imagen. Garantizan que los contenedores iniciados desde la imagen tendrán almacenamiento de datos persistente disponible, incluso si el usuario omite el docker run de comando -v bandera.

Este comportamiento puede ser útil para imágenes donde la persistencia es crítica o se necesitan muchos volúmenes. Sin embargo, el VOLUME La instrucción también rompe algunas expectativas del usuario e introduce comportamientos únicos, por lo que debe escribirse con cuidado. Proporcionar un archivo Docker Compose que crea automáticamente los volúmenes requeridos suele ser una mejor solución.

You may also like

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More

Privacy & Cookies Policy