Administrar datos en Docker Volumenes

Volumenes
  • De forma predeterminada, todos los archivos creados dentro de un contenedor se almacenan en una capa de contenedor en la que se puede escribir. Esto significa que:
  • Los datos no persisten cuando ese contenedor ya no existe, y puede ser difícil sacar los datos del contenedor si otro proceso lo necesita.
  • La capa de escritura de un contenedor está estrechamente acoplada a la máquina host donde se ejecuta el contenedor. No puede mover fácilmente los datos a otro lugar.
  • Escribir en la capa de escritura de un contenedor requiere un controlador de almacenamiento para administrar el sistema de archivos. El controlador de almacenamiento proporciona un sistema de archivos de unión, utilizando el kernel de Linux. Esta abstracción adicional reduce el rendimiento en comparación con el uso de volúmenes de datos , que escriben directamente en el sistema de archivos del host.

Docker tiene dos opciones para que los contenedores almacenen archivos en la máquina host, de modo que los archivos se conserven incluso después de que el contenedor se detenga: volúmenes y montajes de enlace . Si está ejecutando Docker en Linux, también puede usar un montaje tmpfs . Si está ejecutando Docker en Windows, también puede usar una canalización con nombre .

1-.Elija el tipo correcto de soporte

Independientemente del tipo de montaje que elija utilizar, los datos tienen el mismo aspecto dentro del contenedor. Se expone como un directorio o un archivo individual en el sistema de archivos del contenedor.

Una forma sencilla de visualizar la diferencia entre volúmenes, enlazar montajes y tmpfs montajes es pensar en dónde se encuentran los datos en el host de Docker.

  • Los volúmenes: se almacenan en una parte del sistema de archivos del host que es administrado por Docker ( /var/lib/docker/volumes/en Linux). Los procesos que no son de Docker no deben modificar esta parte del sistema de archivos. Los volúmenes son la mejor forma de conservar los datos en Docker.
  • Los montajes de enlace: se pueden almacenar en cualquier lugar del sistema host. Incluso pueden ser archivos o directorios importantes del sistema. Los procesos que no son de Docker en el host de Docker o en un contenedor de Docker pueden modificarlos en cualquier momento.
  • Tmpfs : Los montajes se almacenan únicamente en la memoria del sistema host y nunca se escriben en el sistema de archivos del sistema host.

1.1-.Más detalles sobre los tipos

1.1.1-.Volúmenes (Volumes)

  • Volúmenes : creado y administrado por Docker. Puede crear un volumen de forma explícita mediante el docker volume create comando, o Docker puede crear un volumen durante la creación del contenedor o del servicio.
  • Cuando crea un volumen, se almacena dentro de un directorio en el host de Docker. Cuando monta el volumen en un contenedor, este directorio es lo que se monta en el contenedor. Esto es similar a la forma en que funcionan los montajes de enlace, excepto que los volúmenes son administrados por Docker y están aislados de la funcionalidad principal de la máquina host.
  • Un volumen determinado se puede montar en varios contenedores simultáneamente. Cuando ningún contenedor en ejecución utiliza un volumen, el volumen sigue estando disponible para Docker y no se elimina automáticamente. Puede eliminar los volúmenes no utilizados utilizando docker volume prune .
  • Cuando monta un volumen, puede tener un nombre o ser anónimo . Los volúmenes anónimos no reciben un nombre explícito cuando se montan por primera vez en un contenedor, por lo que Docker les da un nombre aleatorio que se garantiza que es único dentro de un host Docker determinado. Además del nombre, los volúmenes con nombre y anónimos se comportan de la misma manera.
  • Los volúmenes también admiten el uso de controladores de volumen , que le permiten almacenar sus datos en hosts remotos o proveedores en la nube, entre otras posibilidad

1.1.2-.Bind mounts (montajes de enlace):

  • Los montajes de enlace tienen una funcionalidad limitada en comparación con los volúmenes. Cuando usa un montaje de enlace, un archivo o directorio en la máquina host se monta en un contenedor.Se hace referencia al archivo o directorio por su ruta completa en la máquina host. No es necesario que el archivo o directorio exista ya en el host de Docker. Se crea a pedido si aún no existe.
  • Los montajes de enlace son muy eficaces, pero dependen de que el sistema de archivos de la máquina host tenga una estructura de directorios específica disponible. Si está desarrollando nuevas aplicaciones de Docker, considere la posibilidad de utilizar volúmenes con nombre. No puede usar los comandos de la CLI de Docker para administrar directamente los montajes de enlaces.

Los montajes de enlace permiten el acceso a archivos confidenciales

Un efecto secundario del uso de montajes de enlace, para bien o para mal, es que puede cambiar el sistema de archivos del host a través de procesos que se ejecutan en un contenedor , incluida la creación, modificación o eliminación de archivos o directorios importantes del sistema. Esta es una capacidad poderosa que puede tener implicaciones de seguridad, incluido el impacto de los procesos que no son de Docker en el sistema host.

1.1.3-.montajes tmpfs :

  • Montajes tmpfs : un tmpfs montaje no se conserva en el disco, ni en el host de Docker ni dentro de un contenedor. Puede ser utilizado por un contenedor durante la vida útil del contenedor, para almacenar información sensible o de estado no persistente. Por ejemplo, internamente, los servicios de Swarm utilizan tmpfs montajes para montar secretos en los contenedores de un servicio.

1.1.4-.canalizaciones con nombre :

  • Canalizaciones con nombre (named pipes): npipe se puede utilizarunmontaje para la comunicación entre el host de Docker y un contenedor. El caso de uso común es ejecutar una herramienta de terceros dentro de un contenedor y conectarse a la API de Docker Engine mediante una tubería con nombre.
  • Los montajes de enlace y los volúmenes se pueden montar en contenedores utilizando el indicador -vo –volume , pero la sintaxis de cada uno es ligeramente diferente. Para las tmpfs monturas, puedes usar la –tmpfs bandera. Recomendamos usar la –mount bandera tanto para contenedores como para servicios, para enlaces, volúmenes o tmpfs montajes, ya que la sintaxis es más clara.

 

2-.Buenos casos de uso para volúmenes

Los volúmenes son la forma preferida de conservar datos en contenedores y servicios de Docker. Algunos casos de uso de volúmenes incluyen:

  • -. Compartir datos entre varios contenedores en ejecución. Si no lo crea explícitamente, se crea un volumen la primera vez que se monta en un contenedor. Cuando ese contenedor se detiene o se retira, el volumen aún existe. Varios contenedores pueden montar el mismo volumen simultáneamente, ya sea de lectura y escritura o de solo lectura. Los volúmenes solo se eliminan cuando los elimina explícitamente.
  • -. Cuando no se garantiza que el host de Docker tenga un directorio o una estructura de archivo determinados. Los volúmenes lo ayudan a desacoplar la configuración del host de Docker del tiempo de ejecución del contenedor.
  • -. Cuando desee almacenar los datos de su contenedor en un host remoto o en un proveedor en la nube, en lugar de hacerlo localmente.
  • -. Cuando necesite realizar una copia de seguridad, restaurar o migrar datos de un host Docker a otro, los volúmenes son una mejor opción. Puede detener los contenedores que usan el volumen y luego hacer una copia de seguridad del directorio del volumen (como /var/lib/docker/volumes/<volume-name>).
  • -. Cuando su aplicación requiere E / S de alto rendimiento en Docker Desktop. Los volúmenes se almacenan en la máquina virtual de Linux en lugar del host, lo que significa que las lecturas y escrituras tienen una latencia mucho menor y un mayor rendimiento.
  • -. Cuando su aplicación requiere un comportamiento del sistema de archivos completamente nativo en Docker Desktop. Por ejemplo, un motor de base de datos requiere un control preciso sobre el vaciado del disco para garantizar la durabilidad de la transacción. Los volúmenes se almacenan en la máquina virtual de Linux y pueden ofrecer estas garantías, mientras que los montajes de enlace se envían de forma remota a macOS o Windows, donde los sistemas de archivos se comportan de manera ligeramente diferente.

 

3-.Buenos casos de uso para montajes vinculantes

En general, debe utilizar volúmenes siempre que sea posible. Los montajes de enlace son apropiados para los siguientes tipos de casos de uso:

  • -. Compartir archivos de configuración desde la máquina host a los contenedores. Así es como Docker proporciona resolución de DNS a los contenedores de forma predeterminada, mediante el montaje /etc/resolv.conf desde la máquina host en cada contenedor.
  • -. Compartir código fuente o crear artefactos entre un entorno de desarrollo en el host de Docker y un contenedor. Por ejemplo, puede montar un target/ directorio Maven en un contenedor, y cada vez que crea el proyecto Maven en el host de Docker, el contenedor obtiene acceso a los artefactos reconstruidos. Si usa Docker para el desarrollo de esta manera, su Dockerfile de producción copiaría los artefactos listos para producción directamente en la imagen, en lugar de depender de un montaje de enlace.
  • -. Cuando se garantiza que la estructura de archivos o directorios del host de Docker es coherente con los montajes de enlace que requieren los contenedores.

4-.Buenos casos de uso para montajes tmpfs

  • tmpfs Los montajes se utilizan mejor para los casos en los que no desea que los datos persistan ni en la máquina host ni dentro del contenedor. Esto puede deberse a motivos de seguridad o para proteger el rendimiento del contenedor cuando su aplicación necesita escribir un gran volumen de datos de estado no persistentes.

5-.Consejos para usar monturas o volúmenes

Si utiliza monturas o volúmenes de enlace, tenga en cuenta lo siguiente:

  • -. Si monta un volumen vacío en un directorio del contenedor en el que existen archivos o directorios, estos archivos o directorios se propagan (copian) en el volumen. Del mismo modo, si inicia un contenedor y especifica un volumen que aún no existe, se crea un volumen vacío para usted. Esta es una buena forma de rellenar previamente los datos que necesita otro contenedor.
  • -. Si monta un montaje de enlace o un volumen no vacío en un directorio del contenedor en el que existen algunos archivos o directorios, estos archivos o directorios quedan ocultos por el montaje, como si hubiera guardado archivos en /mntun host Linux y luego hubiera montado un Unidad USB en /mnt . El contenido de /mnt quedaría oculto por el contenido de la unidad USB hasta que se desmontara. Los archivos ocultos no se eliminan ni se modifican, pero no se puede acceder a ellos mientras se monta el volumen o el montaje de enlace.

Recopilando:

Los Volúmenes es la administración de datos de Docker, una explicación de los tipos diferentes de uso de los Volúmenes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *