Los archivos (y otros datos) almacenados en un contenedor de Docker no persisten si se elimina el contenedor. Para superar esto, Docker volúmenes y vincular monturas puede ser usado. Esta guía analiza el uso de volúmenes de Docker como una forma de almacenar datos persistentes. Piense en los volúmenes como un disco duro externo; si se borra el disco duro interno, el disco duro externo aún conserva sus propios datos. Los volúmenes se almacenan en el host y son independientes de cualquier contenedor o imagen. Se pueden montar en diferentes contenedores según sea necesario y, dado que los volúmenes están separados de la imagen, no aumentan el tamaño de la imagen.
Antes de comenzar
-
Si aún no lo ha hecho, cree una cuenta de Linode y una instancia de cómputo. Consulte nuestras guías Introducción a Linode y Creación de una instancia informática.
-
Siga nuestra guía de configuración y protección de una instancia informática para actualizar su sistema. También puede establecer la zona horaria, configurar su nombre de host, crear una cuenta de usuario limitada y fortalecer el acceso SSH.
-
Instale Docker en su sistema.
-
Esta guía asume que se siente cómodo usando la línea de comandos de Linux. Consulte Uso del terminal.
-
Esta guía asume que tiene una comprensión básica de Docker. Además, ya debería haber instalado Docker en su servidor e implementado una imagen de Docker. Consulte Introducción a Docker.
Creación de un volumen Docker
Para comenzar a comprender los volúmenes de Docker, necesitará un volumen en el que trabajar.
-
Inicie sesión en su Linode (u otro servidor Linux) a través de SSH o Lish.
-
Cree un volumen ingresando el siguiente comando, reemplazando example_volume con la etiqueta de tu volumen.
docker volume create example_volume
-
Verifique que se haya creado el volumen.
docker volume list
La salida debería verse así:
[[email protected] ~]$ docker volume list DRIVER VOLUME NAME local example_volume [[email protected] ~]$
Inspección de un volumen de Docker
Si desea ver más detalles sobre un volumen, puede usar la docker volume inspect
comando:
docker volume inspect example_volume
El resultado debe ser similar al siguiente:
[[email protected] ~]$ docker volume inspect example_volume
[
{
"CreatedAt": "2021-05-19T15:27:27Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/example_volume/_data",
"Name": "example_volume",
"Options": {},
"Scope": "local"
}
]
[[email protected] ~]$
Montar un volumen de Docker en un contenedor
Para que los datos de un contenedor persistan, debe tener un Docker Volume montado usando el --mount flag
en la docker run
dominio. Reemplazar [nombre_de_volumen] con el nombre de su volumen, [ruta] con la ruta absoluta en la que desea montar el volumen dentro del contenedor, y [docker_image] con el nombre de tu imagen.
docker run --mount source=[volume_name],destination=[path] [docker_image]
Como ejemplo, el siguiente comando monta el volumen llamado example_volume a la ruta /example_volume
dentro de un contenedor usando ubuntu
imagen.
docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
Este comando ejecuta la imagen, monta el volumen e inicia la sesión del usuario como root en la imagen de Ubuntu. Una vez dentro como root, puede verificar que el "example_volume" esté montado con solo ls
. El resultado de todo esto debería verse así:
[[email protected] ~]$ docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
[email protected]:/# ls
bin dev example_volume lib lib64 media opt root sbin sys usr
boot etc home lib32 libx32 mnt proc run srv tmp var
[email protected]:/#
Copiar y compartir archivos entre contenedores
Docker Volumes también permite compartir entre contenedores.
-
Monte el volumen de acuerdo con las instrucciones de Montaje de un volumen de Docker en un contenedor. Este es el ejemplo utilizado anteriormente:
docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
-
Cambie el directorio a
example_data
directorio.cd example_data
-
Cree un archivo de prueba en el volumen ingresando el siguiente
touch
comando.touch example_file.txt
-
Luego sal del contenedor.
exit
-
Ahora ejecute otra imagen acoplable con el mismo volumen montado. El
debian
la imagen se usa en el siguiente ejemplo.docker run -it --name=example_2 --mount source=example_volume,destination=/example_volume debian
-
Dentro del contenedor nuevo (llamado "example_2" si usa un comando similar al anterior), navegue hasta el directorio del volumen.
cd example_volume
-
Introduzca
ls
para ver el archivo.ls
Montar un directorio desde tu Linode a un contenedor
En lugar de crear un nuevo volumen, también puede montar un directorio desde su Linode (u otro sistema) en un contenedor Docker. Esto se logra a través de montajes de enlace y es útil cuando desea almacenar y acceder a los archivos de un contenedor directamente desde su sistema. En comparación con los volúmenes, los montajes de vinculación tienen una funcionalidad limitada.
-
Inicie sesión en su Linode (u otro servidor Linux) a través de SSH o Lish.
-
Use el siguiente comando para ejecutar Docker, reemplazando [local-directory] con la ruta absoluta al directorio dentro de tu Linode que te gustaría montar (usa
$(pwd)
para montar el directorio actual). Luego reemplace [directorio de montaje] con la ruta absoluta en su contenedor donde desea acceder a los archivos locales y reemplazar [imagen] con la imagen de Docker que desea utilizar.docker run --rm -it -v [local-directory]:[mount-directory] [image]
-
Se inicia sesión automáticamente en el contenedor. Navegue a su directorio de montaje y vea los archivos.
ls
Debería ver todos los archivos que haya almacenado en el directorio local.
Lecturas adicionales
Hay mucho más en Docker Volumes de lo que podemos explicar aquí, y el caso de uso de cada uno será diferente. Sin embargo, dos excelentes lugares para revisar más sobre esto son el sitio de Docker's Docs:
-
Usar volúmenes en Docker Docs
-
Solucionar problemas de errores de volumen en Docker Docs
Más información
Es posible que desee consultar los siguientes recursos para obtener información adicional sobre este tema. Si bien estos se proporcionan con la esperanza de que sean útiles, tenga en cuenta que no podemos garantizar la precisión o la puntualidad de los materiales alojados externamente.
- Usar volúmenes en Docker Docs
- Solucionar errores de volumen en Docker Docs