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
.