Saltar al contenido

docker componer tipo de volumen – enlazar vs volumen

Ten en cuenta que en la informática cualquier problema casi siempre tiene más de una soluciones, por lo tanto nosotros aquí te enseñaremos lo más óptimo y eficiente.

Solución:

Cuando los montajes de enlace son archivos que provienen de su máquina host, los volúmenes son algo más como el nas de la ventana acoplable.

  • Los montajes de enlace son archivos montados desde su máquina host (la que ejecuta su daemon docker) en su contenedor.
  • Los volúmenes son como espacios de almacenamiento totalmente administrados por Docker.
    Encontrarás, en la literatura, dos tipos de volúmenes:

    • volúmenes con nombre (proporcione el nombre)
    • volúmenes anónimos (nombres UUID habituales de la ventana acoplable, como si pudiera encontrarlos en contenedores o imágenes sin etiquetar)

Esos volúmenes vienen con su propio conjunto de comandos de la ventana acoplable; también puedes consultar esta lista a través de

docker volume --help

Puede ver sus volúmenes existentes a través de

docker volume ls

Puede crear un volumen con nombre a través de

docker volume create my_named_volume

Pero también puede crear un volumen a través de un docker-compose expediente

version: "3.3"

services:
  mysql:
    image: mysql
    volumes:
      - type: volume
          source: db-data
          target: /var/lib/mysql/data

volumes:
  db-data:

Donde esta es la parte que dice por favor, acoplador, mónteme el volumen llamado datos-db en la parte superior del directorio del contenedor / var / lib / mysql / data

- type: volume
    source: db-data
    target: /var/lib/mysql/data

Y esta es la parte que le dice a Docker por favor creame un volumen llamado datos-db

volumes:
  db-data:

Documentación de Docker sobre los tres tipos de montaje:

  • https://docs.docker.com/storage/bind-mounts/
  • https://docs.docker.com/storage/volumes/
  • https://docs.docker.com/storage/tmpfs/

Si te entendí correctamente, estás preguntando en otras palabras: ¿Cuál es la diferencia entre volúmenes y montajes vinculantes?

Diferencias en la gestión y el aislamiento en el host

Enlazar monturas existen en el sistema de archivos del host y son administrados por el encargado del mantenimiento del host.
Las aplicaciones / procesos fuera de Docker también pueden modificarlo.

Volúmenes también se pueden implementar en el host, pero Docker los administrará por nosotros y no se puede acceder a ellos fuera de Docker.

Los volúmenes son una solución mucho más amplia

Aunque ambas soluciones nos ayudan a separar el ciclo de vida de los datos de los contenedores, al usar Volúmenes gana mucho más poder y flexibilidad sobre su sistema.

Con Volúmenes podemos diseñar nuestros datos de manera efectiva y desacoplarlos del host y otras partes del sistema almacenándolos en ubicaciones remotas dedicadas (en la nube, por ejemplo) e integrarlos con servicios externos como copias de seguridad, monitoreo, cifrado y administración de hardware.

Más ventajas de Volumes sobre los montajes de enlace:

  1. Sin preocupaciones de anfitrión.
  2. Se puede administrar mediante la CLI de Docker.
  3. Los volúmenes pueden ahorrarle algunos permisos relacionados con problemas de uid / gid que ocurren en casos como cuando el uid de un usuario del contenedor no coincide con el host gid.
  4. Un contenedor puede rellenar previamente el contenido de un nuevo volumen.

Ejemplos de

Tomemos 2 escenarios.

Caso 1: servidor web.

Queremos proporcionar a nuestro servidor web un archivo de configuración que puede cambiar con frecuencia.
Por ejemplo: exponer puertos según el entorno actual.
Podemos reconstruir la imagen cada vez con la configuración correspondiente o crear 2 imágenes diferentes para cada entorno. Ambas soluciones no son muy eficientes.

Con Enlazar monturas Docker monta el directorio de origen proporcionado en una ubicación dentro del contenedor.
(El directorio / archivo original en la capa de solo lectura dentro del sistema de archivos de unión simplemente se anulará).

Por ejemplo, vinculando un puerto dinámico a nginx:

version: "3.7"
services:
  web:
    image: nginx:alpine
    volumes:
     - type: bind #<-----Notice the type
       source: ./mysite.template
       target: /etc/nginx/conf.d/mysite.template
    ports:
     - "9090:8080"
    environment:
     - PORT=8080
    command: /bin/sh -c "envsubst < /etc/nginx/conf.d/mysite.template > 
        /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

Tenga en cuenta que este ejemplo también podría resolverse utilizando Volumes.

Caso 2: Bases de datos.

Los contenedores Docker no almacenan datos persistentes: cualquier dato que se escribirá en la capa de escritura en el sistema de archivos de unión del contenedor se perderá una vez que el contenedor deje de ejecutarse.

Pero, ¿qué pasa si tenemos una base de datos ejecutándose en un contenedor y el contenedor se detiene, eso significa que todos los datos se perderán? Volúmenes
al rescate.

Esos son árboles del sistema de archivos con nombre que Docker administra por nosotros.

services:    
  db:
    image: postgres:latest
    volumes:
      - "dbdata:/var/lib/postgresql/data"
    volumes:
     - type: volume #<-----Notice the type
       source: dbdata
       target: /var/lib/postgresql/data
volumes:
  dbdata:

Por ejemplo, datos SQL de Postgres persistentes:

Tenga en cuenta que en este caso, para volúmenes con nombre, la fuente es el nombre del volumen (para volúmenes anónimos, este campo se omite).

Recuerda que tienes autorización de explicar si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

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