Almacenamiento con docker-compose
Definiendo volúmenes docker con docker-compose
Además de definir los services
, con docker-compose podemos definir los volúmenes que vamos a necesitar en nuestra infraestructura. Además, como hemos visto, podremos indicar que volúmen va a utilizar cada contenedor.
Veamos un ejemplo:
version: '3.1'
services:
db:
container_name: contenedor_mariadb
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: asdasd
volumes:
- mariadb_data:/var/lib/mysql
volumes:
mariadb_data:
Y podemos iniciar el escenario:
$ docker-compose up -d
Creating network "docker-compose_default" with the default driver
Creating volume "docker-compose_mariadb_data" with default driver
Creating contenedor_mariadb ... done
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------
contenedor_mariadb docker-entrypoint.sh mysqld Up 3306/tcp
Y comprobamos que se ha creado un nuevo volumen:
$ docker volume ls
DRIVER VOLUME NAME
local docker-compose_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 contenedor_mariadb
...
"Mounts": [
{
"Type": "volume",
"Name": "docker-compose_mariadb_data",
"Source": "/var/lib/docker/volumes/docker-compose_mariadb_data/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "rw",
"RW": true,
"Propagation": ""
}
],
...
Recuerda que si necesitas iniciar el escenario desde 0, debes eliminar el volumen:
$ docker-compose down -v
Stopping contenedor_mariadb ... done
Removing contenedor_mariadb ... done
Removing network docker-compose_default
Removing volume docker-compose_mariadb_data
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:
MYSQL_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