Volumes
Crear un Volume
Crea un volume:
docker volume create my_volume
Lista todos los volumes creados:
docker volume ls
Inspecciona un volume para ver detalles:
docker volume inspect my_volume
Ejemplo de salida:
[ { "CreatedAt": "2024-10-28T11:39:35-05:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/my_volume/_data", "Name": "my_volume", "Options": null, "Scope": "local" }]
Usar un Volume en un Contenedor
Más detalles para configurar un contenedor de Apache con Docker:
docker run -d --name my_apache_container -p 8080:80 -v my_volume:/usr/local/apache2/htdocs httpd
Accede al contenedor:
docker exec -it my_apache_container bash
Navega al directorio htdocs
:
cd /usr/local/apache2/htdocsls
Deberías ver:
index.html
Verifica los archivos del volume desde el host:
sudo ls /var/lib/docker/volumes/my_volume/_data
Salida:
index.html
Si creas archivos dentro del contenedor, se reflejarán en el volume:
echo '<h1>about</h1>' >> about.htmlls
Salida:
about.html index.html
Verifica nuevamente desde el host:
sudo ls /var/lib/docker/volumes/my_volume/_data
Salida:
about.html index.html
Eliminar un Volume
Si el volume está en uso, no se podrá eliminar. Detén y elimina el contenedor primero:
docker stop my_apache_containerdocker rm my_apache_containerdocker volume rm my_volume
Usar un Directorio del Host como Volume
Crea un directorio y dos archivos dentro:
mkdir /home/jackmmd/my_host_directory && cd my_host_directoryecho '<h1>index</h1>' >> index.htmlecho '<h1>about</h1>' >> about.htmlls
Salida:
about.html index.html
Crea un contenedor usando my_host_directory
como volume:
docker run -d --name my_apache_container -p 8080:80 -v /home/jackmmd/my_host_directory:/usr/local/apache2/htdocs httpd
Accede al contenedor y navega al directorio htdocs
:
docker exec -it my_apache_container bashcd /usr/local/apache2/htdocsls
Deberías ver:
about.html index.html
Los archivos también estarán disponibles en:
Crear un Volume desde un Dockerfile
Dentro del directorio my_host_directory
, crea un archivo Dockerfile
:
nano Dockerfile
Contenido:
FROM httpdVOLUME /usr/local/apache2/htdocsCOPY . /usr/local/apache2/htdocs
Construye la imagen:
docker build -t my_apache_image .docker images
Ejemplo de salida:
REPOSITORY TAG IMAGE ID CREATED SIZEmy_apache_image latest e216491dd672 21 minutes ago 148MB
Crea un contenedor a partir de la imagen:
docker run -d --name my_apache_container -p 8080:80 my_apache_image
Accede al contenedor y navega al directorio htdocs
:
docker exec -it my_apache_container bashcd /usr/local/apache2/htdocsls
Deberías ver:
Dockerfile about.html index.html
Inspecciona el contenedor para verificar la propiedad Mounts
:
docker inspect my_apache_container
Ejemplo de salida:
"Mounts": [ { "Type": "volume", "Name": "20fea354ff012ab676ce9b27fc7ba41627e469ec78aa7f290fa5af6bfd7ebeda", "Source": "/var/lib/docker/volumes/20fea354ff012ab676ce9b27fc7ba41627e469ec78aa7f290fa5af6bfd7ebeda/_data", "Destination": "/usr/local/apache2/htdocs", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }],
Lista los archivos del nuevo volume creado desde el host:
sudo ls /var/lib/docker/volumes/20fea354ff012ab676ce9b27fc7ba41627e469ec78aa7f290fa5af6bfd7ebeda/_data
Salida:
Dockerfile about.html index.html