comparación de montaje de almacenamiento de Docker

descripción general del almacenamiento de la ventana acoplable

Los amigos que están familiarizados con Docker saben que las imágenes de Docker existen según el concepto de capas, que se superponen capa por capa y eventualmente se convierten en la imagen que necesitamos. Pero cada capa de la imagen es de sólo lectura. Las capas de lectura y escritura solo se crean cuando ejecutamos el contenedor. El aislamiento del sistema de archivos permite:

  • Cuando el contenedor ya no se está ejecutando, los datos no persisten y es difícil salir del contenedor.
  • La migración de datos no se puede realizar bien entre diferentes hosts.
  • Escribir datos en la capa de lectura y escritura del contenedor requiere que el kernel proporcione un sistema de archivos federado, lo que además reduce el rendimiento.

Docker proporciona tres formas diferentes de montar datos en el contenedor, volumen, montaje vinculado (mapeo -v), tmpfs

modo de volumen

El método de volumen es la mejor manera de conservar datos en la ventana acoplable

  • De forma predeterminada, Docker tendrá un área específica en el host (sistema Linux: /var/lib/docker/volumes/), que se utiliza para almacenar volúmenes.
  • Los procesos que no son de Docker no deben modificar los archivos en este directorio.
  • El volumen se puede administrar a través del volumen de Docker, como creación, eliminación y otras operaciones.
  • El volumen se generará aleatoriamente si no especifica un nombre al generarlo.
[root@localhost ~]# ls /var/lib/docker/volumes/
ea73bac7843b4d05c08dc758ef15a5b3fc1070f3de8b3361dd40c3c58247c98f 
ffa4846b581c1a50a01e7a12a6342ad2aaa442701a35ae56ef2f0e5d7888b22c
  • El volumen seguirá existiendo cuando el contenedor se detenga o elimine. Si desea eliminarlo, debe mostrar una declaración.
Casos de uso relacionados
  • Los datos se comparten entre varios contenedores. El volumen aún existe cuando el contenedor se detiene o se elimina. El mismo volumen se puede cargar entre varios contenedores.
  • Cuando el host no puede garantizar un directorio o estructura de archivos específicos
  • Cuando se requiere realizar una copia de seguridad, restauración o migración de datos entre hosts, detenga el contenedor y haga una copia de seguridad del directorio del volumen.
Uso

Se recomienda el volumen como método preferido en Docker. En comparación con el montaje vinculado (-v), tiene las siguientes ventajas:

  • En comparación con el montaje vinculado, es más fácil realizar copias de seguridad o migrar el volumen
  • Se puede administrar mediante comandos Docker CLI (Command Line Interface) o Docker API (Interfaz)
  • El volumen funciona tanto en contenedores de Linux como de Windows.
  • Los volúmenes se pueden compartir de forma más segura entre varios contenedores.
  • El controlador de volumen le permite proporcionar almacenamiento, cifrado u otras funciones en un host remoto o en la nube.
  • El contenedor puede rellenar previamente el contenido del nuevo volumen.
Crear un volumen de gestión
[root@localhost ~]# docker volume create my-vol   创建卷
my-vol
[root@localhost ~]# docker volume ls   查看卷列表
DRIVER              VOLUME NAME
local               1ad4af809485ff974988b79fdc3ada634c0b14b1324d9581369fd3b161632115
local               my-vol
local               portainer_data
[root@localhost ~]# docker volume inspect my-vol     查看卷信息
[
    {
        "CreatedAt": "2019-03-01T19:40:26+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]
[root@localhost ~]# docker volume rm my-vol       删除卷
my-vol
[root@localhost ~]# docker volume ls
DRIVER              VOLUME NAME
local               1ad4af809485ff974988b79fdc3ada634c0b14b1324d9581369fd3b161632115
local               portainer_data
Iniciar un contenedor usando un volumen

como sigue:

[root@localhost ~]# docker volume create my-vol2
my-vol2


方法一:
[root@localhost ~]# docker run -d -it --name storage-test -p 80:80 --mount source=my-vol2,target=/app nginx:latest
77d559ebcdb47e9b54b7023bbb6b7bf0a7135dc7458bb68c49311e1140251901


方法二   
[root@localhost ~]# docker run -d -it --name storage-test -p 80:80 -v myvol2:/app nginx:latest


[root@localhost ~]# docker inspect storage-test
 "Mounts": [
            {
                "Type": "volume",      
                "Name": "my-vol2",     
                "Source": "/var/lib/docker/volumes/my-vol2/_data",
                "Destination": "/app",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }

Nota: El volumen tiene el origen y el destino correctos y se puede leer y escribir.

Detener contenedores y limpiar volúmenes
[root@localhost ~]# docker stop storage-test  #停止容器
storage-test
[root@localhost ~]# docker rm storage-test  #删除容器
storage-test
[root@localhost ~]# docker volume rm my-vol2   #删除卷
my-vol2

Enlace de aprendizaje
Al iniciar el servicio, si el Driver es local, ningún contenedor puede compartir estos datos. Además, el servicio solo puede utilizar el indicador --mount.

Uso del controlador de volumen
Cuando utilice Docker Volume Create para crear un volumen o iniciar un contenedor que aún no ha creado un volumen, puede especificar el controlador de volumen.
En el siguiente ejemplo, el controlador de volumen se usa primero al crear un volumen independiente y luego se usa al iniciar el contenedor que crea el nuevo volumen.
Configuración inicial
Este ejemplo supone que tiene 2 nodos, el primero es un host acoplable y puede conectarse al segundo nodo mediante SSH.
Instale el complemento vieux/sshfx en el host de la ventana acoplable:

$ docker plugin install --grant-all-permissions vieux/sshfs

Creación de volúmenes utilizando el controlador de volumen
A continuación se especifica una contraseña SSH, pero la contraseña se puede omitir si se configura la clave compartida de 2 hosts. Cada controlador de volumen puede tener múltiples opciones de configuración, especificadas mediante el indicador -o.

$ docker volume create --driver vieux/sshfs \
  -o sshcmd=test@node2:/home/test \
  -o password=testpassword \
  sshvolume

Utilice el controlador de volumen al crear un contenedor.
Cabe señalar aquí que si necesita utilizar opciones en el comando, debe utilizar --mount en lugar de -v.

$ docker run -d \
  -it \
  --name sshfs-container \
  --volume-driver vieux/sshfs \
  --mount src=sshvolume,target=/app,volume-opt=sshcmd=test@node2:/home/test,volume-opt=password=testpassword \
  nginx:latest

enlazar método de montaje

A través del método de montaje de enlace, puede montar cualquier archivo o directorio (ruta absoluta) en su host en el contenedor.

  • Los archivos o directorios montados pueden ser modificados por cualquier proceso, por lo que a veces las modificaciones al archivo o directorio en el contenedor afectarán a otros procesos.

  • Si el archivo o directorio en el que está montado el host no existe, se creará automáticamente.

  • Este método no se puede administrar mediante el comando: volumen acoplable

Casos de uso relacionados:

Los montajes enlazados se utilizan generalmente de las siguientes maneras:

  • Lo que se monta es un archivo, porque solo el método de montaje vinculado puede montar archivos.

  • Comparta archivos de configuración desde el host al contenedor. De forma predeterminada, Docker vinculará archivos similares a /etc/resolv.conf para la resolución DNS.

  • El host comparte código fuente o herramientas de compilación con el contenedor. Por ejemplo, puede montar el destino Maven/ en el contenedor, y cada vez que el proyecto Maven se cree en el host, el contenedor tendrá acceso a los artefactos reconstruidos.

  • Cuando la estructura de archivos o directorios del host es consistente con la requerida por el contenedor.

Si un archivo o directorio vacío está montado en un contenedor y hay archivos en el directorio del contenedor, estos archivos se copiarán al directorio en el host. Si monta un archivo o directorio que no está vacío en un contenedor y hay archivos en el directorio del contenedor, los archivos del contenedor se ocultarán.

Comparación entre los métodos de volumen y -V

volumen significa volumen de montaje de volumen, -v significa montaje de enlace

tipo -v volumen
posición de volumen Se puede especificar arbitrariamente /var/lib/docker/volumen/…
Impacto en los puntos de montaje existentes Ocultar y reemplazar con volumen Copiar datos originales al volumen.
Ya sea para admitir un solo archivo apoyo No soportado, solo puede ser un directorio
control de permisos Se puede configurar como de solo lectura, el valor predeterminado son permisos de lectura y escritura. Sin control, todos tienen permisos de lectura y escritura.
Portabilidad Portabilidad débil, vinculada a la ruta del host Gran portabilidad, no es necesario especificar el directorio del host

modo tmpfs

tmpfs, solo se almacena en la memoria del sistema host y no escribe en el sistema de archivos del host.

Casos de uso relacionados:

tmpfs se usa generalmente cuando la seguridad es importante y no es necesario conservar los datos.

Cómo utilizar:

No hace falta decir que la relación entre –tmpfs y --mount es la misma que la de los dos métodos anteriores. La diferencia entre ellos es:

  • –tmpfs no permite especificar ninguna opción configurable
  • –tmpfs no se puede usar con el servicio swarm, debes usar --mount

Usando tmps en el contenedor

Supongo que te gusta

Origin blog.csdn.net/cljdsc/article/details/132866545
Recomendado
Clasificación