volumen de datos de docker vs directorio de host montado


Podemos tener un volumen de datos en docker:

$ docker run -v /path/to/data/in/container --name test_container debian
$ docker inspect test_container
...
Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "/var/lib/docker/volumes/fac362...80535/_data",
        "Destination": "/path/to/data/in/container",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
]
...

Pero si el volumen de datos vive en /var/lib/docker/volumes/fac362...80535/_data, ¿es diferente de tener los datos en una carpeta montada usando -v /path/to/data/in/container:/home/user/a_good_place_to_have_data?

 28
Author: koddo, 2015-12-18

3 answers

¿Es diferente de tener los datos en una carpeta montados usando-v /path/to/data/in/container:/home/user/a_good_place_to_have_data?

Es porque, como se menciona en "Montar un directorio host como un volumen de datos "

El directorio host es, por su naturaleza, dependiente del host. Por esta razón, no puede montar un directorio host desde Dockerfile porque las imágenes compiladas deben ser portátiles. Un directorio host no estaría disponible en todo el potencial hosts.

Si tiene algunos datos persistentes que desea compartir entre contenedores, o desea usar desde contenedores no persistentes, es mejor crear un contenedor de volumen de datos con nombre y luego montar los datos desde él.

Puedes combinar ambos enfoques:

 docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

Aquí hemos lanzado un nuevo contenedor y montado el volumen desde el contenedor dbdata.
Luego hemos montado un directorio de host local como /backup.
Finalmente, hemos pasado una orden que usa tar para respaldar el contenido del volumen dbdata en un archivo backup.tar dentro de nuestro directorio /backup. Cuando el comando se complete y el contenedor se detenga, nos quedará una copia de seguridad de nuestro volumen dbdata.

 23
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-18 14:30:10

Aunque al usarlos se siente lo mismo, con el único cambio de la ubicación del directorio, hay una diferente.

Volúmenes vs Monturas Bind

  • Con Bind Mount, un archivo o directorio en la máquina host se monta en un contenedor. El archivo o directorio es referenciado por su ruta completa o relativa en la máquina host.
  • Con Volume, se crea un nuevo directorio dentro del directorio de almacenamiento de Docker en la máquina host, y Docker administra el contenido de ese directorio.

Volúmenes ventajas sobre los montajes de unión:

  • Los volúmenes son más fáciles de respaldar o migrar que los montajes de enlace.
  • Puede administrar volúmenes mediante comandos de la CLI de Docker o la API de Docker.
  • Los volúmenes funcionan tanto en contenedores Linux como Windows.
  • Los volúmenes se pueden compartir de forma más segura entre varios contenedores.
  • Los controladores de volumen le permiten almacenar volúmenes en hosts remotos o proveedores de nube, para cifrar el contenido de los volúmenes, o para añadir otra funcionalidad.
  • El contenido de un nuevo volumen puede ser rellenado previamente por un contenedor.

Volúmenes

Creado y administrado por Docker. Puede crear un volumen explícitamente mediante el comando docker volume create, o Docker puede crear un volumen durante la creación de contenedores o servicios.

Cuando se crea un volumen, se almacena dentro de un directorio en el Anfitrión Docker. Cuando se monta el volumen en un contenedor, este el directorio es lo que está montado en el contenedor. Esto es similar a la forma en que funciona bind mounts, excepto que los volúmenes son administrados por Docker y están aislados de la funcionalidad principal del host equipo.

Un volumen dado puede montarse en múltiples contenedores simultáneamente. Cuando ningún contenedor en ejecución está utilizando un volumen, el volumen sigue disponible para Docker y no se elimina automáticamente. Puede eliminar volúmenes no utilizados utilizando docker volumen ciruela pasa.

Cuando se monta un volumen, puede ser nombrado o anónimo. Anónimo los volúmenes 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 es garantizado para ser único dentro de un host Docker dado. Además del nombre, los volúmenes nombrados y anónimos se comportan de la misma manera.

Los volúmenes también admiten el uso de controladores de volumen, que le permiten almacene sus datos en hosts remotos o proveedores de nube, entre otro posibilidad.

introduzca la descripción de la imagen aquí

Monturas de unión

Disponible desde los primeros días de Docker. Las monturas Bind tienen limitaciones funcionalidad en comparación con los volúmenes. Cuando se utiliza un montaje bind, un archivo o el directorio en la máquina host está montado en un contenedor. Archivo o el directorio es referenciado por su ruta completa en la máquina host. El no es necesario que el archivo o el directorio ya existan en el host de Docker. Se crea bajo demanda si aún no existe. Los montajes de unión son muy performant, pero se basan en el sistema de archivos de la máquina host que tiene un estructura de directorios específica disponible. Si usted está desarrollando nuevos Aplicaciones Docker, considere usar volúmenes con nombre en su lugar. No puedes utilice los comandos de la CLI de Docker para administrar directamente los montajes de enlace.

introduzca la descripción de la imagen aquí

También Hay tmpfs mounts.
montajes tmpfs

Un montaje tmpfs no se conserva en el disco, ya sea en el host de Docker o dentro de un contenedor. Puede ser utilizado por un contenedor durante la vida útil del contenedor, para almacenar estado no persistente o sensible información. Por ejemplo, internamente, los servicios swarm usan montajes tmpfs para montar secretos en los contenedores de un servicio.
introduzca la descripción de la imagen aquí

Referencia:
https://docs.docker.com/storage/

 14
Author: E235,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-08 13:52:17

La diferencia entre el directorio host y un volumen de datos radica en que Docker gestiona este último colocándolo en el directorio $DOCKER-DATA-DIR/volumes y adjuntándole una referencia (nombres o ID generados aleatoriamente). Eso es obtener un poco de comodidad.

Tanto los directorios de host como los volúmenes de datos son directorios en el host. Ambos dependen del anfitrión. No puede hacer referencia a ninguno de ellos en un Dockerfile; la directiva VOLUME crea un nuevo volumen sin nombre (con id generado aleatoriamente) cada vez inicia un contenedor nuevo y no puede hacer referencia a un volumen existente.

* $DOCKER-DATA-DIR está /var/lib/docker aquí a menos que haya cambiado los valores predeterminados.

 2
Author: golem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-02 03:26:34