Almacenamiento con Docker Compose
Definiendo volúmenes Docker con Docker Compose
Además de definir los servicios (parámetro services) en el fichero compose.yaml, podemos definir los volúmenes que vamos a necesitar en nuestra infraestructura. Además, como hemos visto, podremos indicar que volumen va a utilizar cada contenedor.
Veamos un ejemplo, puedes encontrar el fichero en el Repositorio con el código de los ejemplos.
El contenido del fichro compose.yaml es:
version: '3.1'
services:
db:
container_name: contenedor_mariadb
image: mariadb
restart: always
environment:
MARIADB_ROOT_PASSWORD: asdasd
volumes:
- mariadb_data:/var/lib/mysql
volumes:
mariadb_data:
Y podemos iniciar el escenario:
$ docker compose up -d
[+] Running 3/3
✔ Network mariadb_default Created 0.1s
✔ Volume "mariadb_mariadb_data" Created 0.0s
✔ Container contenedor_mariadb Started 0.5s
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
contenedor_mariadb mariadb "docker-entrypoint.sh mariadbd" db About a minute ago Up About a minute 3306/tcp
Y comprobamos que se ha creado un nuevo volumen:
$ docker volume ls
DRIVER VOLUME NAME
local mariadb_mariadb_data
...
En la definición del servicio db hemos indicado que el contenedor montará el volumen en un directorio determinado con el parámetro volumes. Podemos comprobar que efectivamente se ha realizado el montaje:
$ docker inspect -f '{{json .Mounts}}' contenedor_mariadb
[{"Type":"volume","Name":"mariadb_mariadb_data","Source":"/var/lib/docker/volumes/mariadb_mariadb_data/_data","Destination":"/var/lib/mysql","Driver":"local","Mode":"z","RW":true,"Propagation":""}]
Recuerda que si necesitas iniciar el escenario desde 0, debes eliminar el volumen:
$ docker compose down -v
[+] Running 3/3
✔ Container contenedor_mariadb Removed 0.8s
✔ Volume mariadb_mariadb_data Removed 0.1s
✔ Network mariadb_default Removed 0.1s
Utilización de bind mount con Docker Compose
De forma similar podemos indicar que un contenedor va a utilizar bind mount como almacenamiento. En este caso sería:
version: '3.1'
services:
db:
container_name: contenedor_mariadb
image: mariadb
restart: always
environment:
MARIADB_ROOT_PASSWORD: asdasd
volumes:
- ./data:/var/lib/mysql
Y después de iniciar el escenario podemos ver cómo se ha creado el directorio data:
$ cd data/
/data$ ls
aria_log.00000001 aria_log_control ibdata1 ib_logfile0 ibtmp1 mysql
Hay que tener en cuenta que si usamos bind mount, el comando docker compose down -v no eliminará el directorio donde se guardan los datos, en este caso ./data.