Learning Docker Parte 6: Trabajar con datos

En la entrega de hoy de la serie Docker, hablaremos sobre trabajar con datos. En particular, los volúmenes de Docker. En estos materiales, comparamos constantemente los mecanismos de software de Docker con varias analogías comestibles. No nos apartaremos de esta tradición aquí. Los datos de Docker deben ser especiados. Hay muchos tipos de especias en el mundo, y en Docker hay muchas formas de trabajar con datos.

→ Parte 1: lo básico
→ Parte 2: términos y conceptos
→ Parte 3: archivos Dockerfile
→ Parte 4: reducir el tamaño de las imágenes y acelerar su ensamblaje
→ Parte 5: equipos
→ Parte 6: trabajar con datos



Tenga en cuenta que este material se preparó con el motor Docker versión 18.09.1 ​​y la versión API 1.39 .

Los datos de Docker se pueden almacenar de forma temporal o permanente. Comencemos con los datos de tiempo.

Almacenamiento temporal de datos


Hay dos formas de organizar el trabajo con datos temporales en contenedores Docker.

De manera predeterminada, los archivos creados por una aplicación que se ejecuta en un contenedor se guardan en una capa de contenedor habilitada para grabación. Para que este mecanismo funcione, no necesita configurar nada específicamente. Resulta barato y enojado. Una aplicación solo necesita guardar datos y continuar haciendo lo suyo. Sin embargo, una vez que el contenedor deje de existir, los datos almacenados de forma tan simple desaparecerán.

Para almacenar archivos temporales en Docker, puede usar otra solución adecuada para aquellos casos en los que se requiere un mayor nivel de rendimiento en comparación con lo que se puede lograr utilizando el mecanismo estándar para el almacenamiento temporal de datos. Si no necesita que sus datos se almacenen más tiempo del que existe el contenedor, puede conectar tmpfs al contenedor, un almacenamiento temporal de información que utiliza la RAM del host. Esto acelerará el rendimiento de la escritura y lectura de datos.

A menudo sucede que los datos deben almacenarse incluso después de que el contenedor deje de existir. Para hacer esto, necesitamos mecanismos útiles para el almacenamiento permanente de datos.

Almacenamiento permanente de datos


Hay dos formas de hacer que la vida de los datos sea más larga que la vida del contenedor. Una forma es usar la tecnología de montaje de unión. Con este enfoque, puede montar, por ejemplo, una carpeta realmente existente en el contenedor. Los procesos ubicados fuera de Docker podrán trabajar con datos almacenados en dicha carpeta. Así es como se ve la tecnología tmpfs mount y bind mount.


Monte tmpfs y monte de enlace

Las desventajas de usar la tecnología Bind Mount son que su uso complica la copia de seguridad de los datos, la migración de datos y el intercambio de datos entre varios contenedores. Es mucho mejor usar volúmenes Docker para el almacenamiento persistente de datos.

Tom Docker


Un volumen es un sistema de archivos que reside en una máquina host fuera de los contenedores. La creación y gestión de volúmenes la realiza Docker. Estas son las propiedades básicas de los volúmenes de Docker:

  • Representan un medio para el almacenamiento permanente de información.
  • Son independientes y están separados de los contenedores.
  • Se pueden compartir entre diferentes contenedores.
  • Le permiten organizar la lectura y escritura efectiva de datos.
  • Los volúmenes se pueden alojar en el proveedor de la nube remota.
  • Pueden ser encriptados.
  • Se les pueden dar nombres.
  • El contenedor puede organizar el volumen para que se complete con datos por adelantado.
  • Son convenientes para la prueba.

Como puede ver, los volúmenes de Docker tienen excelentes características. Hablemos sobre cómo crearlos.

Creación de volumen


Los volúmenes se pueden crear con Docker o mediante solicitudes de API.

Aquí están las instrucciones en el Dockerfile que le permite crear un volumen cuando se inicia el contenedor.

VOLUME /my_volume 

Al usar una instrucción Docker similar, después de crear el contenedor, creará un volumen que contiene datos que ya existen en la ubicación especificada. Tenga en cuenta que si crea un volumen utilizando el Dockerfile, esto no le libera de la necesidad de especificar un punto de montaje para el volumen.

También puede crear volúmenes en Dockerfile utilizando el formato JSON.

Además, los volúmenes se pueden crear utilizando la línea de comando mientras el contenedor se está ejecutando.

Trabajando con volúmenes desde la línea de comando


▍ Crear un volumen


Puede crear un volumen independiente con el siguiente comando:

 docker volume create —-name my_volume 

▍ Información de volumen plegable


Para ver la lista de volúmenes de Docker, use el siguiente comando:

 docker volume ls 

Puede explorar un volumen específico como este:

 docker volume inspect my_volume 

▍Eliminar volumen


Puede eliminar un volumen como este:

 docker volume rm my_volume 

Para eliminar todos los volúmenes que no utilizan los contenedores, puede recurrir al siguiente comando:

 docker volume prune 

Antes de eliminar volúmenes, Docker le pedirá que confirme esta operación.

Si el volumen está asociado con un contenedor, dicho volumen no se puede eliminar hasta que se elimine el contenedor correspondiente. En este caso, incluso si se retira el contenedor, Docker no siempre comprende esto. Si esto sucede, puede usar el siguiente comando:

 docker system prune 

Está diseñado para limpiar los recursos de Docker. Después de ejecutar este comando, debería poder eliminar los volúmenes cuyo estado se determinó previamente de forma incorrecta.

Banderas --mount y --volumen


Para trabajar con volúmenes, cuando llama al docker , a menudo tiene que usar banderas. Por ejemplo, para crear un volumen durante la creación de un contenedor, puede usar la siguiente construcción:

 docker container run --mount source=my_volume, target=/container/path/for/volume my_image 

En la antigüedad (hasta 2017), la bandera --volume era --volume . Inicialmente, esta bandera (también se puede usar en forma abreviada, luego parece que -v ) se usó para contenedores independientes, y la bandera --mount se --mount en el entorno Docker Swarm. Sin embargo, comenzando con Docker 17.06, el indicador --mount se puede usar en cualquier escenario.

Cabe señalar que cuando se usa el indicador --mount , --mount la cantidad de datos adicionales que se deben especificar en el comando, pero, por varias razones, es mejor usar este indicador en lugar de --volume . El indicador --mount es el único mecanismo que le permite trabajar con servicios o especificar la configuración del controlador de volumen. Además, trabajar con esta bandera es más fácil.

En los ejemplos existentes de comandos destinados a trabajar con datos en Docker, puede encontrar muchos ejemplos del uso del indicador -v . Cuando intente adaptar estos comandos por sí mismo, tenga en cuenta que los --mount y --volume utilizan diferentes formatos de parámetros. Es decir, no puede simplemente reemplazar -v con --mount y obtener un comando de trabajo.

La principal diferencia entre --mount y --volume es que cuando se usa el indicador --volume todos los parámetros se recopilan juntos en un campo, y cuando se usa --mount parámetros se separan.

Cuando se trabaja con --mount parámetros se representan como pares clave-valor, es decir, parece key=value . Estos pares están separados por comas. Estas son las opciones de --mount utilizadas:

  • type - type montaje. El valor de la clave correspondiente puede ser bind , volume o tmpfs . Estamos hablando de volúmenes aquí, es decir, estamos interesados ​​en el valor del volume .
  • source - source montaje. Para volúmenes con nombre, este es el nombre del volumen. Para volúmenes sin nombre, esta clave no se especifica. Se puede acortar a src .
  • destination : la ruta a la que se monta el archivo o la carpeta en el contenedor. Esta clave se puede acortar a dst o target .
  • readonly : monta un volumen de solo lectura . El uso de esta clave es opcional; no se le asigna ningún valor.

Aquí hay un ejemplo de uso de --mount con muchas opciones:

 docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image 

Resumen


Estos son algunos comandos útiles que puede usar al trabajar con volúmenes de Docker:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

Aquí hay una lista de opciones de uso común para --mount , aplicable a un comando como docker run --mount my_options my_image :

  • type=volume
  • source=volume_name
  • destination=/path/in/container
  • readonly

Ahora que hemos terminado esta serie de Docker, es hora de decir algunas palabras sobre dónde pueden seguir quienes estudian Docker. Aquí hay un gran buen artículo sobre Docker. Aquí hay un libro sobre Docker (cuando compre este libro, intente obtener la última edición del mismo). Aquí hay otro libro que se adaptará a aquellos que creen que la práctica es la mejor manera de aprender tecnología.

Estimados lectores! ¿Qué materiales sobre Docker recomendarías a los principiantes para estudiar?

Source: https://habr.com/ru/post/441574/


All Articles