|
2 | 2 |
|
3 | 3 |  |
4 | 4 |
|
| 5 | + |
| 6 | +En algún momento tus contenedores morirán y tendrás que volver a levantarlos. Si no has guardado los datos que tenían, perderás toda la información que tenían. Por eso es importante saber cómo gestionar el almacenamiento en Docker. |
| 7 | + |
| 8 | +Existen diferentes formas de almacenar datos en Docker. En este módulo vamos a ver las siguientes: |
| 9 | + |
| 10 | +- Bind mounts |
| 11 | +- Volumenes |
| 12 | +- Tmpfs mount |
| 13 | + |
| 14 | +## Bind mounts |
| 15 | + |
| 16 | +Un bind mount es un enlace directo entre una carpeta en tu host y una carpeta en tu contenedor. Esto significa que si cambias algo en la carpeta del host, también cambiará en la carpeta del contenedor y viceversa. |
| 17 | + |
| 18 | +Para crear un bind mount, utiliza la opción `--mount` o `-v` al crear un contenedor. Por ejemplo: |
| 19 | + |
| 20 | +```bash |
5 | 21 | cd 01-contenedores/contenedores-iv |
| 22 | +docker run -d --name devtest --mount type=bind,source="$(pwd)"/dev-folder,target=/usr/share/nginx/html/ -p 8080:80 nginx |
| 23 | +``` |
| 24 | + |
| 25 | +Si cambias el contenido de la carpeta `dev-folder` en tu host, también cambiará en la carpeta `/usr/share/nginx/html/` en tu contenedor. |
| 26 | + |
| 27 | +#### Usar el bind mount como read-only |
| 28 | + |
| 29 | +Tambi´n puedes montar un bind mount como read-only. Esto significa que no podrás escribir en la carpeta del contenedor. Para hacerlo, añade la opción `readonly` al comando `--mount`. Por ejemplo: |
| 30 | + |
| 31 | +```bash |
| 32 | +docker rm -f devtest |
| 33 | +docker run -d --name devtest --mount type=bind,source="$(pwd)"/dev-folder,target=/usr/share/nginx/html/,readonly -p 8080:80 nginx |
| 34 | +docker inspect devtest |
| 35 | +``` |
| 36 | + |
| 37 | +Como está en modo lectura, en teoría no podría crear ningún archivo dentro del directorio donde está montada mi carpeta local: |
| 38 | + |
| 39 | +```bash |
| 40 | +docker container exec -it devtest sh |
| 41 | +ls /usr/share/nginx/html |
| 42 | +touch /usr/share/nginx/html/index2.html #Dará error porque el montaje está en modo read-only |
| 43 | +exit |
| 44 | +``` |
| 45 | + |
| 46 | +## Volúmenes |
6 | 47 |
|
7 | 48 | #Listar los volumenes en el host |
8 | 49 | docker volume ls |
@@ -75,29 +116,6 @@ cat /vol/file1 |
75 | 116 | exit |
76 | 117 |
|
77 | 118 |
|
78 | | -## Bind mounts ## |
79 | | - |
80 | | -#Se utiliza cuando quieres montar un archivo o directorio dentro de un contenedor |
81 | | -cd 01-contenedores/contenedores-iv |
82 | | - |
83 | | -#dev-folder es el directorio que voy a montar dentro de mi contenedor |
84 | | -#con pwd recupero la carpeta actual |
85 | | -pwd |
86 | | -docker run -d --name devtest --mount type=bind,source="$(pwd)"/dev-folder,target=/usr/share/nginx/html/ -p 8080:80 nginx |
87 | | -docker inspect devtest |
88 | | -#Ahora cambia en el host el contenido de la carpeta dev-folder |
89 | | - |
90 | | -#Usar el bind mount como read-only |
91 | | -docker rm -f devtest |
92 | | -docker run -d --name devtest --mount type=bind,source="$(pwd)"/dev-folder,target=/usr/share/nginx/html/,readonly -p 8080:80 nginx |
93 | | -docker inspect devtest |
94 | | - |
95 | | -#Como está en modo lectura, en teoría no podría crear ningún archivo dentro del directorio donde está montada mi carpeta local |
96 | | -docker container exec -it devtest sh |
97 | | -ls /usr/share/nginx/html |
98 | | -touch /usr/share/nginx/html/index2.html #Dará error porque el montaje está en modo read-only |
99 | | -exit |
100 | | - |
101 | 119 |
|
102 | 120 | #### Backups #### |
103 | 121 | #Creo un contenedor con un volumen llamado dbdata. En este caso voy a utilizar la opción -v en lugar de --mount |
|
0 commit comments