Asociando almacenamiento a los contenedores: volúmenes Docker
Antes de usar volúmenes Docker en contenedores para hacer persistir sus datos, vamos a estudiar como podemos gestionar los volúmenes.
Gestionando volúmenes
Algunos comando útiles para trabajar con volúmenes Docker, son los siguientes.
Podemos crear un volumen indicando su nombre:
$ docker volume create my-vol
Para listar los volúmenes que tenemos creados:
$ docker volume ls
...
local my-vol
Para obtener información de un volumen:
$ docker volume inspect my-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
Y para eliminar un volumen, ejecutamos:
$ docker volume rm my-vol
Creación de contenedores con volúmenes
Lo primero que vamos a hacer es crear un volumen Docker:
$ docker volume create miweb
miweb
A continuación, creamos un contenedor con el volumen asociado, usando el parámetro --mount
. En este ejemplo vamos a montar nuestro volumen en el directorio DocumentRoot del servidor Apache que nos ofrece la imagen httpd:2.4
(en la documentación de la imagen se nos indica que el directorio DocumentRoot es usr/local/apache2/htdocs
).
$ docker run -d --name my-apache-app --mount type=volume,src=miweb,dst=/usr/local/apache2/htdocs -p 8080:80 httpd:2.4
Podemos comprobar en la información del contenedor los puntos de montajes que tiene configurado:
$ docker inspect --format='{{json .Mounts}}' my-apache-app
[{"Type":"volume","Name":"miweb","Source":"/var/lib/docker/volumes/miweb/_data","Destination":"/usr/local/apache2/htdocs","Driver":"local","Mode":"z","RW":true,"Propagation":""}]
A continuación, creamos un fichero index.html
en el directorio donde hemos montado el volumen, por lo tanto esta información no se perderá:
$ docker exec my-apache-app bash -c 'echo "<h1>Hola</h1>" > /usr/local/apache2/htdocs/index.html'
Podemos comprobar el acceso al servidor web usando un navegado web o en este caso usando el comando curl
:
$ curl http://localhost:8080
<h1>Hola</h1>
A continuación borramos el contenedor:
$ docker rm -f my-apache-app
my-apache-app
Podemos comprobar que el volumen no se ha borrado, ejecutando docker volume ls
.
Después de borrar el contenedor, volvemos a crear otro contenedor con el mismo volumen asociado, en esta ocasión vamos a usar el parámetro -v
:
$ docker run -d --name my-apache-app -v miweb:/usr/local/apache2/htdocs -p 8080:80 httpd:2.4
Y podemos comprobar que no no se ha perdido la información (el fichero index.html
):
$ curl http://localhost:8080
<h1>Hola</h1>