"La geometría es genial" no se puede decir que esté en la lista caliente, dije que era el volumen del contenedor que no aprendiste de mí.


Uno, ¿qué es?

背景

  • Docker empaqueta la aplicación y el entorno en ejecución para formar una operación de contenedor, y la operación puede ir acompañada del contenedor, pero nuestros requisitos de datos esperan ser persistentes.
  • Se espera que sea posible compartir datos entre contenedores.

Si los datos generados por el contenedor de Docker no generan una nueva imagen a través de la confirmación de Docker, de modo que los datos se guarden como parte de la imagen, cuando se elimine el contenedor, los datos desaparecerán naturalmente. en la ventana acoplable, lo usamos .

Un poco similar a los archivos rdb y aof en nuestro Redis; o el centro de configuración; o el volumen de datos en k8s

Segundo, ¿de qué sirve?

  • Persistencia de contenedores
  • Herencia + datos compartidos entre contenedores

Un volumen es un directorio o archivo que existe en uno o más contenedores y Docker lo monta en el contenedor, pero no pertenece al Sistema de archivos de la Unión, por lo que puede pasar por alto el Sistema de archivos de la Unión para proporcionar algunas características para el almacenamiento persistente o el uso compartido. de datos:

El propósito del diseño del volumen es la persistencia de los datos, que es completamente independiente del ciclo de vida del contenedor, por lo que Docker no eliminará el volumen de datos montado cuando se elimine el contenedor.

特点:

  1. Volúmenes de datos para compartir o reutilizar datos entre contenedores
  2. Los cambios en el volumen pueden tener efecto directamente
  3. Los cambios en los volúmenes de datos no se incluirán en las actualizaciones duplicadas
  4. El ciclo de vida de un volumen de datos dura hasta que ningún contenedor lo usa

3. Volumen de datos

3.1 Adición de comando directo

El capítulo anterior "[Guía de Docker・Ⓓ³]Análisis profundo de las imágenes de Docker" explicó cómo crear su propia imagen issa/myubuntu, así que esta vez, todavía comenzamos el ejercicio de volumen de datos con esto.

inserte la descripción de la imagen aquí

3.1.1 Montar volumen de datos

Pedido: docker run -it -v /宿主机绝对路径目录:/容器内目录:[权限] 镜像名

[permiso]: ro/rw (solo lectura/lectura-escritura)
Cambie los permisos de lectura y escritura agregando ro y rw a la ruta en el contenedor
ro solo lectura # solo lectura
rw readwrite # leer y escribir
El rw predeterminado, si es ro, esta ruta solo puede ser operada por el host y no puede operarse dentro del contenedor

  1. Nuevo comando:dockder run -it -v /tmp:/tmp/test issa/myubuntu:1.14 bash
  2. En el directorio host/tmp, cree un nuevo comando:touch hello.txt
  3. Compruebe si el archivo hello.txt se actualiza sincrónicamente en el directorio de prueba del contenedor
  4. Cree un nuevo comando en el directorio actual del contenedor: tail -f hello.txt, observando
  5. En el directorio host/tmp, cree un nuevo comando: echo i love u CSDN 步尔斯特 >> hello.txt, observe si hay salida en el contenedor

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3.1.2 Comprobar si el volumen de datos se ha montado correctamente

docker inspect 容器ID

inserte la descripción de la imagen aquí

3.1.3 Intercambio de datos entre contenedores y hosts

3.1.4 Después de que el contenedor se detiene y sale, si los datos se sincronizan después de modificar el host

3.1.5 Comandos (con permisos)

docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

3.2 Agregar DockerFile

  1. Cree una nueva carpeta mydocker en el directorio raíz e ingrese

  2. Puede usar el comando VOLUME en el Dockerfile para agregar uno o más volúmenes de datos a la
    imagen.VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
    说明:
    Por consideraciones de portabilidad y uso compartido, use -v host directory:container El método de directorio no se puede implementar directamente en el Dockerfile.
    Dado que el directorio de host depende de un host específico, no hay garantía de que dicho directorio específico exista en todos los hosts.

  3. compilación de archivos

    # volume test 
    FROM issa/ubuntu:1.14 
    VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] 
    CMD echo "finished,--------success!" 
    CMD /bin/bash 
    
  4. Genere una imagen después de la compilación para
    obtener una nueva imagen issa/ubuntu:1.14

  5. ejecutar contenedor

  6. A través de los pasos anteriores, ya se conoce la dirección del directorio de volumen en el contenedor

  7. El host corresponde a la dirección por defecto

3.3 Tres formas de montaje

所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxxx/_data

3.3.1 Especificar la ruta de montaje

-v /主机路径:容器内路径
Este es el método utilizado anteriormente.

3.3.2 Montaje anónimo

-v 容器内路径

3.3.3 Montaje con nombre

-v 卷名:容器内路径

3.4 Comentarios

Docker monta el directorio host El acceso a Docker parece que no puede abrir el directorio.: Permiso denegado
Solución: agregue un --privileged=trueparámetro más después del directorio de montaje

3.5 Comandos relacionados

  1. Ver todos los volúmenes
    docker volume ls
  2. Ver un volumen
    docker volume inspect 卷名

5.4 Contenedor de volumen de datos

5.4.1 Introducción

El contenedor nombrado monta el volumen de datos, y otros contenedores realizan el intercambio de datos montando este (contenedor principal), y el contenedor que monta el volumen de datos se denomina contenedor de volumen de datos.

La imagen creada en el paso anterior se usa como plantilla y ejecuta el contenedor dc01/dc02/dc03

Ya tienen volúmenes de contenedor
/dataVolumeContainer1
/dataVolumeContainer2

5.4.2 Transferencia compartida entre contenedores (--volumes-from)

  1. Primero inicie un contenedor principal dc01
    para agregar contenido en dataVolumeContainer2
  2. dc02/dc03 heredado de dc01
    --volumes-from
    docker run -it --name dc02 --volumes-from dc01 issa/ubuntu:1.14
    dc02/dc03 agregó contenido a dataVolumeContainer2 respectivamente
  3. Regrese a dc01 y podrá ver que todo lo agregado por el 03/02 se puede compartir.
  4. Eliminar dc01, si se puede acceder a dc03 después de modificar dc02
  5. ¿Se puede acceder a dc03 después de eliminar dc02?
  6. un paso mas alla
  7. Cree un nuevo dc04 para heredar dc03 y luego elimine dc03
  8. Conclusión: La transferencia de información de configuración entre contenedores, el ciclo de vida del volumen de datos continúa hasta que ningún contenedor lo utiliza

Supongo que te gusta

Origin blog.csdn.net/CSDN_SAVIOR/article/details/124427057
Recomendado
Clasificación