Link Search Menu Expand Document

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