Skip to content

Latest commit

 

History

History
95 lines (72 loc) · 3 KB

almacenamiento.md

File metadata and controls

95 lines (72 loc) · 3 KB

Almacenamiento con Docker Compose

Definiendo volúmenes docker con Docker Compose

Además de definir los services, en el fichero docker-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:

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
[+] 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:
      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

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.