Saltar navegación

Mantendo a BD

Sistema de ficheiros dos contedores

Como xa observaches nas tarefas anteriores, cando executamos un novo contedor da nosa aplicación, non temos ningún elemento gardado na base de datos. Isto ocorre porque cada novo contedor está formado polas capas da imaxe e unha nova onde podemos escribir novos ficheiros, pero todo queda dentro dese contedor e non se comparte con ningún outro.

Para comprobar isto, imos crear dous contedores e crear un ficheiro en cada un deles, e verificar que non son accesibles entre os dous contedores.

  1. Inicia un contedor ubuntu que vai crear un ficheiro co nome /data.txt cun número aleatorio entre 1 e 10000.
    $ docker run -d ubuntu bash -c 'shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null'
  2. Podes explicar os detalles dos comandos que se executan dentro do contedor ubuntu?
  3. Comproba que foi creado o ficheiro /data.txt e visualiza o seu valor gardado
    $ docker exec <container-id> cat /data.txt
  4. Inicia un novo contedor ubuntu (a mesma imaxe) e comproba a existencia do ficheiro anterior (data.txt)
    $ docker run -it ubuntu ls /
  5. Elimina os contedores que poden estar aínda en execución.

Mantendo a BD da App

A nosa aplicación TODO garda os datos nunha base de datos SQLite en /etc/todos/todo.db. Como a base de datos está formada por un só ficheiro, imos facer que permaneza dispoñible para futuros contedores que se executen coa nosa aplicación TODO.

Se creamos un volume externo e o conectamos ao contedor (mount), conseguimos que os contedores sempre accedan ao mesmo ficheiro todo.db.

  1. Crea un novo volume para gardar a base de datos
    $ docker volume create todo-db
  2. Inicia un novo contedor, pero engadindo a opción -v para indicar que se vai conectar un volume na ruta /etc/todos do contedor.
    $ docker run -dp 3000:3000 -v todo-db:/etc/todos todo-app
  3. Unha vez o contedor en execución, accede á aplicación e engade algunhas entradas novas
  4. Elimina o contedor, e inicia un novo co mesmo comando anterior e comproba na aplicación que temos acceso aos elementos creados co contedor anterior.

Examinando o volume

Moitos usuarios de Docker preguntan pola localización dos datos almacenados nos volumes. Podemos examinar os parámetros dun volume co comando docker volume inspect

$ docker volume inspect todo-db
[
  {
    "CreatedAt": "2024-04-24T11:33:55Z",
    "Driver": "local",
    "Labels": null,
    "Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
    "Name": "todo-db",
    "Options": null,
    "Scope": "local"
  }
]

Feito con eXeLearning (Nova xanela)