Docker-Volumen-Create -v

Volumenes

Recapitulemos :

Qué son los volúmenes de Docker

  • -. Los volúmenes de Docker son sistemas de archivos montados en contenedores de Docker para conservar los datos generados por el contenedor en ejecución.
  • -. Los volúmenes se almacenan en el host, independientemente del ciclo de vida del contenedor. Esto permite a los usuarios realizar copias de seguridad de datos y compartir sistemas de archivos entre contenedores fácilmente
  • -. Hay diferentes formas de montar un volumen de Docker mientras se lanza un contenedor. Los usuarios pueden decidir entre las banderas -v y las –mount que se agregan al docker run comando.

Primero eliminamos y creamos un volumen , en nuestro hots lo llamaremos my_datos. Lo haremos con opción -v . La opción -v contiene tres componentes, separados por dos puntos :

  1. -. Nombre de volumen o directorio de origen
  2. -. Punto de montaje dentro del contenedor
  3. -. (Opcional) ro si la montura es de solo lectura

Listamos los volumens :

  1. In: root@juan-Aspire-ES1-512:/# docker volume ls

Eliminamos todos los Volumes :

  1. In: root@juan-Aspire-ES1-512:/# docker volume prune

Creamos un volumen:

  1. In: root@juan-Aspire-ES1-512:/# docker volume create my_datos
  2. Out: my_datos

Creamos un volumen sin nombre :

  1. In: root@juan-Aspire-ES1-512:/# docker volume create
  2. Out: 305d346b28f4e6b42e63a4be5c0c066acc23233219d11c85eac9ad12c720b363

Nota: En este punto podemos crear el volume en el host o crearlo cuando creemos el contenedor. Hemos creado my_datos y luego configurare el contenedor para usarlo.

Listamos los volume :

  1. In: root@juan-Aspire-ES1-512:/# docker volume ls
  2. Out: local 305d346b28f4e6b42e63a4be5c0c066acc23233219d11c85eac9ad12c720b363
  3. Out: local my_datos

Eliminamos el volume :

  1. In: root@juan-Aspire-ES1-512:/# docker volume rm
  2. Out: 305d346b28f4e6b42e63a4be5c0c066acc23233219d11c85eac9ad12c720b363

Inspeccionar el volume :

  1. In: root@juan-Aspire-ES1-512:/# docker volume inspect my_datos
  2. Out: «CreatedAt»: «2021-10-29T19:03:21+02:00»,
  3. Out: «Driver»: «local»,
  4. Out: «Labels»: {},
  5. Out: «Mountpoint»: «/var/lib/docker/volumes/my_datos/_data»,
  6. Out: «Name»: «my_datos»,
  7. Out: «Options»: {},
  8. Out: «Scope»: «local»

Creamos el contenedor (base-spark-volume) de la images (base-spark-hadoop:latest) :

  1. In: root@juan-Aspire-ES1-512:/# docker run -d -it –name base-spark-volume -v my_datos:/opt/app base-spark-hadoop:latest
  2. Out: e7cda957577fd8aa2c16ead90eab0af8f0756d0374df7e58f65d5bc1c2a0c5f7

inspeccionamos el contenedor :

  1. In: root@juan-Aspire-ES1-512:/# docker inspect e7cda957577f
  2. Out: «Mounts»: [
  3. Out: {
  4. Out: «Type»: «volume»,
  5. Out: «Name»: «my_datos»,
  6. Out: «Source»: «/var/lib/docker/volumes/my_datos/_data«,
  7. Out: «Destination»: «/opt/app»,
  8. Out: «Driver»: «local»,
  9. Out: «Mode»: «z»,
  10. Out: «RW»: true,
  11. Out: «Propagation»: «»

Creamos con nano un fichero test en la carpeta _data :

  1. In: root@juan-Aspire-ES1-512:/var/lib/docker/volumes/my_datos/_data# nano test
  2. In: root@juan-Aspire-ES1-512:/var/lib/docker/volumes/my_datos/_data# ls
  3. Out: test

Entramos en el contenedor :

  1. In: root@juan-Aspire-ES1-512:/# docker exec -it e7cda957577f /bin/bash

Listamos los archivos :

  1. In: root@e7cda957577f:/opt/app# ls
  2. Out: test

Nota: Hemos creado con nano el fichero test el la carpeta del host «Source»: «/var/lib/docker/volumes/my_datos/_data». Etamos en el contenedor con exec y tenemos en «Destination»: «/opt/app» test

Definir un volúmen “solo lectura” agregando el modificador :ro ” :

  1. In: root@juan-Aspire-ES1-512:/# docker run -d -it –name base-spark-volume -v my_datos:/opt/app :ro base-spark-hadoop:latest
  2. Out: 7d659849cd62b15761f5e546aec9ec4b737c066cd6dc08a391d0b64c0be6fc1b

Listamos el contenedor recién creado :

  1. In: root@juan-Aspire-ES1-512:/# docker ps
  2. Out: 7d659849cd62 base-spark-hadoop:latest «/bin/sh -c /bin/bash» 7 minutes ago Up
  3. Out: 7 minutes 4040/tcp, 6066/tcp, 7077-7078/tcp, 8080-8081/tcp base-spark-volume

Inspeccionamos el contenedor :

  1. In: root@juan-Aspire-ES1-512:/# docker inspect base-spark-volume
  2. Out: «Mounts»:
  3. Out: «Type»: «volume»,
  4. Out: «Name»: «my_datos»,
  5. Out: «Source»: «/var/lib/docker/volumes/my_datos/_data»,
  6. Out: «Destination»: «/opt/app»,
  7. Out: «Driver»: «local»,
  8. Out: «Mode»: «ro»,
  9. Out: «RW»: false,
  10. Out: «Propagation»: «»

Vemos que en el «Mounts» la opción «RW» se encuentra en false en lugar de true

Creamos con nano otro fichero test en la carpeta _data :

  1. In: root@juan-Aspire-ES1-512:/var/lib/docker/volumes/my_datos/_data# nano test2
  2. In: root@juan-Aspire-ES1-512:/var/lib/docker/volumes/my_datos/_data# ls
  3. Out: test test2

Entramos en el contenedor :

  1. In: root@juan-Aspire-ES1-512:/var/lib/docker/volumes/my_datos/_data# docker exec -it 7d659849cd62 /bin/bash

Listamos los archivos :

  1. In: root@7d659849cd62:/opt/app# ls
  2. Out: test test2

Tratar de eliminar el archivo test2 :

  1. In: root@7d659849cd62:/opt/app# rm -r test2
  2. Out: rm: cannot remove ‘test2’: Read-only file system “sistema de archivos de solo lectura”

Haremos lo mismo pero en Host :

  1. In: root@juan-Aspire-ES1-512:/var/lib/docker/volumes/my_datos/_data# ls
  2. Out: test test2
  3. In: root@juan-Aspire-ES1-512:/var/lib/docker/volumes/my_datos/_data# rm -r test2
  4. In: root@juan-Aspire-ES1-512:/var/lib/docker/volumes/my_datos/_data# ls
  5. Out: test

 

Recopilando:

Hemos creado volumen directamente en el host,(al crear el contenedor, al mismo tiempo creo el Volumen) todo con el indicador -v ,podemos usar –mount es mas especifico , ami personalmente prefiero usar –mount para los Servicios el paso siguiente es integrar los volume en la creación de la images (Dockerfile) .

Referencias: (Docker) (Entorno-Moreluz)