Docker volumen
Last updated
Was this helpful?
Last updated
Was this helpful?
Es el mecanismo preferido para conservar los datos generados y utilizados por los contenedores de Docker. Depende de la estructura de los directorios y del propio SO
del equipo host. Docker administra los volúmenes y tienen ventajas que son:
Los volúmenes son más fáciles de respaldar o migrar.
Se puede administrar volúmenes mediante los comandos de CLI de Docker o la API de Docker.
Funcionan en contenedores de Linux y Windows.
Se pueden compartir de forma más segura entre varios contenedores.
Los controladores de volumen permiten almacenar volúmenes en hosts remotos o proveedores de la nube, cifrar el contenido de los volúmenes o agregar otras funciones.
Los nuevos volúmenes pueden tener su contenido rellenado previamente por un contenedor.
Suelen ser una mejor opción que los datos persistentes en la capa de escritura de un contenedor, porque un volumen no aumenta el tamaño de los contenedores que lo utilizan y el contenido del volumen existe fuera del ciclo de vida de un contenedor determinado.
A pesar de todo esto, si queremos entender los volúmenes de Docker, echémosle un vistazo general al funcionamiento del sistema de archivos de Docker.
Una imagen de Docker consta de varias capas de solo lectura.
Al iniciarse una imagen desde un contenedor, Docker añade una nueva capa editable en la parte superior del sistema.
El sistema de archivos de Docker se llama Union File System (UnionFS).
Cada vez que se modifica un archivo, Docker crea una copia de este mismo incluyendo las capas de solo lectura hasta la capa más alta, la que sí se puede editar.
De esta manera queda una copia del archivo original (de solo lectura) sin cambios.
Al eliminar un contenedor, se pierde la capa más alta, la que tiene permisos de escritura. Esto significa que todos los cambios realizados después de iniciar el contenedor se pierden.
Como ya hemos dicho, un volumen de contenedor permite conservar los datos, aunque se elimine el Docker container. Los volúmenes también permiten un intercambio práctico de datos entre el host y el container. Por tanto, crear un volumen de Docker es una buena solución para poder:
Transferir datos a un contenedor de Docker
Guardar los datos de un contenedor de Docker
Intercambiar datos entre contenedores de Docker
Adicionalmente:
Los volúmenes de Docker existen fuera del Union File System
con su acceso de solo lectura y la capa de escritura.
El volumen es una carpeta compartida entre el contenedor y la máquina host.
Los volúmenes también pueden ser compartidos entre contenedores.
Un volumen de contenedor se encuentra fuera del propio contenedor en el equipo host. Fuera del container, el volumen se comporta como una carpeta en la que se pueden almacenar datos y desde la que se pueden recuperar datos. Se trata del mount point
de un directorio en el host.
Tenemos varias formas de crear y gestionar volúmenes en Docker y cada método tiene sus propias ventajas e inconvenientes.
El comando docker volume create crea un volumen identificado con un nombre. El nombre te permite encontrar fácilmente los Docker volumes y poder asignarlos a los contenedores específicos.
El siguiente comando se utiliza para crear y nombrar un volumen:
Si queremos crear un container que utilice un volumen ya creado, podemos añadir el siguiente parámetro al comando docker run:
Para ejecutar un contenedor desde una imagen de Ubuntu denominada my-test-volume y asignar el data-volume al directorio o el data al container, el comando sería:
Para listar los volúmenes de Docker que tenemos, utilizamos el siguiente comando:
Este comando genera la lista de todos los volúmenes de Docker creados en el host.
Si queremos inspeccionar un volumen en concreto, utilizamos el siguiente comando:
Este comando te brinda información sobre el volumen especificado. Incluye el mount point y el directorio en el sistema host a través del cual se puede acceder al volumen de Docker. Si queremos obtener más información sobre el volumen MyData
(por ejemplo) que hemos creado, entonces el comando a utilizar sería:
Para eliminar un volumen creado de este modo, podemos utilizar el siguiente comando:
No se puede eliminar un volumen si está siendo utilizado por un contenedor existente. Con lo cual, antes de eliminar el volumen, debemos detener y eliminar el contenedor. Para ello podemos utilizar los comandos:
Para eliminar el volumen denominado MyData
, primero detenemos y eliminamos el container que lo utiliza con my-test-volume:
El data-volume puede ser borrado con el siguiente comando: