jueves, 9 de febrero de 2023

Docker:Persistencia de datos

Primera parte: bind-mount

  1. Crea tres contenedores
    1. Dos de ellos se basan en una imagen que muestra hola mundo
      1. Ya está construida, la etiqueto como "hellow:1.0".
        1. docker tag imageid hellow:1.0
    1. La otra muestra "¿AWS mejor que Azure?"
      • Maquina azur, sustituyendo la línea correspondiente en el dockerfile y construyendo
        • docker  build -t hmazur:1.0 .


Successfully built f4fee070b7ef
Successfully tagged hmazur:1.0

      • docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hmazur              1.0                 f4fee070b7ef        5 minutes ago       173MB
hellow              1.0                 55c08152bc11        12 hours ago        173MB

      • Lanzo los contenedores, el bind mount estará en el segundo y tercer docker llamado "ws02" y "wsazur", en /c/Users/Public/docker/bindpersist en el host y se enlaza con /app en el contenedor
        1. docker create --name ws01 hellow:1.0
        2. docker create --name ws02 –v /c/Users/Public/docker/bindpersist/:/app hellow:1.0
        3. docker create --name wsazur –v /c/Users/Public/docker/bindpersist/:/app hmazur:1.0
        4. docker container ls –a muestra:

docker@HelloWorld:/c/Users/Public/docker/bindpersist$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
ab44326fb14f        hmazur:1.0          "/bin/sh -c 'nginx -â¦"   8 seconds ago       Created                                       wsazur
8ecc88f7e9fb        hellow:1.0          "/bin/sh -c 'nginx -â¦"   2 minutes ago       Created                                       ws02
8798d1456e67        hellow:1.0          "/bin/sh -c 'nginx -â¦"   5 minutes ago       Created                                       ws01

  1. Una vez lanzados creo documentos en host y docker y compruebo la correspondencia
    1. docker exec -it wsazur bash -c "ls -lart /app":
    2. Algunas pruebas ("d<ocker exec -it ws02 bash -c "mkdir /app/carpeta1", "<ocker exec -it wsazur bash -c "touch /app/hundido"" y su reflejo en el sistema de archivos
  1. Borro los contenedores y compruebo que los datos persisten, "docker stop wsazur && docker rm wsazur", "docker rm ws02 –f", docker rm ws01 –f", vuelvo a crear ele docker wsazur y compruebo:

Segunda parte: volumes

  1. Crea dos volúmenes (persistencia01 y persistencia02)

docker@HelloWorld:~$ docker volume create persistencia01
persistencia01
docker@HelloWorld:~$ docker volume create persistencia02
persistencia02
docker@HelloWorld:~$ docker volume ls
DRIVER              VOLUME NAME
local               persistencia01
local               persistencia02
docker@HelloWorld:~$ docker volume inspect persistencia01
[
     {
         "CreatedAt": "2023-02-09T11:03:20Z",
         "Driver": "local",
         "Labels": {},
         "Mountpoint": "/mnt/sda1/var/lib/docker/volumes/persistencia01/_data",
         "Name": "persistencia01",
         "Options": {},
         "Scope": "local"
     }
]

  1. Crea y lanza 2 contenedores, cada uno de una imagen diferente vinculado a cada volumen.

docker create --name wsazur -v persistencia01:/app hmazur:1.0
283e9e5a76801f385e41df3aad8dc4eae4a0e24b27d1a7b6b47418110587b44d

docker create --name ws01 –v  persistencia02:/app hellow:1> 38617c65c20dd2511467b058db7d129d6775d3c8c5351661edbe013691c7bc29

    1.  
      1. Inspección

docker@HelloWorld:~$ docker inspect wsazur | grep -A 3 -B 3 volum
         },
         "Mounts": [
             {
                 "Type": "volume",
                 "Name": "persistencia01",
                 "Source": "/mnt/sda1/var/lib/docker/volumes/persistencia01/_data",
                 "Destination": "/app",
                 "Driver": "local",
                 "Mode": "z",
docker@HelloWorld:~$ docker inspect ws01 | grep -A 3 -B 3 volum
         },
         "Mounts": [
             {
                 "Type": "volume",
                 "Name": "persistencia02",
                 "Source": "/mnt/sda1/var/lib/docker/volumes/persistencia02/_data",
                 "Destination": "/app",
                 "Driver": "local",
                 "Mode": "z",

 

    1. Comprobación de vínculos
      1. Comprobación de vínculos
        1. sudo touch /mnt/sda1/var/lib/docker/volumes/persistencia01/_data/holamundo.txt
        2. sudo touch /mnt/sda1/var/lib/docker/volumes/persistencia02/_data/holamundo1.txt

docker start wsazur && docker start ws01

docker@HelloWorld:~$ docker exec -it wsazur bash -c "ls -lart /app"
total 8
-rw-r--r-- 1 root root    0 Feb  9 11:13 holamundo.txt
drwxr-xr-x 2 root root 4096 Feb  9 11:13 .
drwxr-xr-x 1 root root 4096 Feb  9 11:14 ..
docker@HelloWorld:~$ docker exec -it ws01 bash -c "ls -lart /app"
total 8
-rw-r--r-- 1 root root    0 Feb  9 11:13 holamundo1.txt
drwxr-xr-x 2 root root 4096 Feb  9 11:13 .
drwxr-xr-x 1 root root 4096 Feb  9 11:14 ..

Los volúmenes son más fáciles de migrar y hacer copias de seguridad, de compartir entre contenedores y/o desde la nube. Se colocan en una zona de linux con mayor seguridad y protección que los "bind". También están fuera del ciclo de vida del contenedor.

 

 

No hay comentarios:

Publicar un comentario