Persistencia de la información en docker
Uso de volúmenes persistentes
- La información que se guarda en un contenedor no es persistente.
- Los contenedores que implementan aplicaciones Stateful deben guardar los datos en un medio de almacenamiento persistente. Desacoplamos la aplicación de los datos.
- Con docker podemos gestionar volúmenes de datos, que nos permiten guardar la información en el host (almacenamiento persistente).
Ventajas de guardar los datos en almacenamiento persistente
- Los contenedores son más livianos.
- Puedo tener datos distintos en los distintos entornos de desarrollo.
- Si un contenedor falla, no se pierde información sólo tengo que crear un nuevo contenedor.
- La modificación de los datos de la aplicación no conlleva la construcción de una nueva imagen.
Ejemplo de almacenamiento persistente
Vamos a crear un contenedor con mysql donde guardamos la información de la base de datos en un volumen persistente:
$ docker run --name some-mysql -v /opt/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=asdasd -d mysql
Comprobamos que se ha guardado la base de datos en el host:
/opt/mysql$ ls
ibdata1 ib_logfile0 ib_logfile1 ibtmp1 #innodb_temp mysql mysql.ibd undo_001 undo_002
Creamos una base de datos:
$ docker exec -it some-mysql bash
root@75544a024f9b:/# mysql -u root -p -h localhost
...
create database dbtest;
Query OK, 1 row affected (0.07 sec)
Qué pasa si nuestro nuestro contenedor falla!!!
$ docker container rm -f some-mysql
Podemos crear otro contenedor y comprobar como sigue existiendo la base de datos:
$ docker run --name some-mysql2 -v /opt/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=asdasd -d mysql
$ docker exec -it some-mysql2 bash
root@878f77d80fcf:/# mysql -u root -p -h localhost
...
show databases;
...
| dbtest |
...