You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-[Métricas de contenedores](#métricas-de-un-contenedor)
22
-
-[Uso de disco](#cuánto-espacio-estamos-usando-del-disco-por-culpa-de-docker)
23
-
-[Logs de contenedores](#cómo-ver-los-logs-de-un-contenedor)
24
-
-[🔌 Docker extensions](#-docker-extensions)
5
+
¡Hola lemoncoder 👋🏻🍋! En algún momento tus contenedores morirán 😥 y tendrás que volver a crearlos. Si no has guardado los datos que tenían, perderás toda la información que almacenaban o generaron. Por eso es importante saber cómo gestionar el almacenamiento en Docker y en esta clase vamos a preocuparnos de ello.
6
+
7
+
8
+
## 🎬 Vídeos de la introducción en el campus
9
+
10
+
Se asume que has visto los siguientes vídeos para comenzar con este módulo:
11
+
12
+
| # | Tema | Contenido Clave |
13
+
|---|------|-----------------|
14
+
| 1 | Teoría Almacenamiento | Tipos (bind mount, volumen, tmpfs), casos de uso, performance, lifecycle y copia inicial de datos en volúmenes vacíos. |
15
+
| 2 | Demo 1: Bind mount | Montaje de carpeta local web-content en contenedor nginx para hot-reload de contenido estático. |
16
+
| 3 | Demo 2: Volume | Creación y uso de volúmenes named, ver copia inicial, inspección y persistencia tras recrear contenedor. |
17
+
| 4 | Demo 3 - Tmpfs |Uso teórico/práctico de --mount type=tmpfs para datos efímeros en memoria y limitaciones en Docker Desktop. |
18
+
| 5 | Teoría monitorización | Visión general: eventos, métricas de recursos, logs, buenas prácticas de observabilidad en entornos container. |
19
+
| 6 | Demo docker events | Escucha en tiempo real de lifecycle de contenedores y creación/eliminación de recursos. |
20
+
| 7 | Demo docker stats | Lectura de uso de CPU, memoria, red y bloqueos para varios contenedores simultáneamente. |
21
+
| 8 | Demo docker logs | Uso de docker logs -f, rotación básica, timestamps y filtrado. |
25
22
26
23
---
27
24
28
-
En algún momento tus contenedores morirán 😥 y tendrás que volver a crearlos. Si no has guardado los datos que tenían, perderás toda la información que almacenaban o generaron. Por eso es importante saber cómo gestionar el almacenamiento en Docker.
25
+
# 📂 Tipos de almacenamiento en Docker
26
+
27
+
Antes de nada es importante que sepas que **la forma de asignar almacenamiento externo a un contenedor es mediante lo que se conoce montajes (mounts)**. Un montaje es una forma de conectar una carpeta del host (tu máquina) con una carpeta del contenedor. De esta forma, el contenedor puede leer y escribir datos en esa carpeta externa. Si vienes de Linux posiblemente te suene el concepto. Piensalo como si hicieras un `mount` en Linux para montar un disco externo o una carpeta compartida en tu sistema de archivos.
29
28
30
-
Existen diferentes formas de almacenar datos en Docker. En este módulo vamos a ver las siguientes:
29
+
Pues bien, en el mundo de los contenedores existen tres tipos principales de montajes:
31
30
32
31
- 🔗 **Bind mounts**: Enlace directo entre carpetas del host y contenedor
33
32
- 💾 **Volúmenes**: Almacenamiento persistente gestionado por Docker
@@ -44,14 +43,17 @@ Para crear un bind mount, utiliza la opción `--mount` o `-v` al crear un conten
44
43
```bash
45
44
cd 01-contenedores/contenedores-iv
46
45
47
-
docker run -d --name halloween-web --mount type=bind,source="$(pwd)"/web-content,target=/usr/share/nginx/html/ -p 8080:80 nginx
- 🏷️ `--name devtest`: Le pone nombre al contenedor.
56
+
- 🏷️ `--name halloween-web`: Le pone nombre al contenedor.
55
57
- 📁 `--mount type=bind,source="$(pwd)"/web-content,target=/usr/share/nginx/html/`: Crea un bind mount. El tipo de montaje es bind, la carpeta de origen es la carpeta actual (`$(pwd)`) más `web-content` y la carpeta de destino es `/usr/share/nginx/html/`.
56
58
57
59
> [!NOTE]
@@ -62,21 +64,13 @@ Si analizamos este comando tenemos:
62
64
Si quisieras hacerlo con `-v`:
63
65
64
66
```bash
65
-
docker run -d --name halloween-web-v -v "$(pwd)"/web-content:/usr/share/nginx/html/ -p 8081:80 nginx
67
+
docker run -d --name halloween-web-v \
68
+
-v "$(pwd)"/web-content:/usr/share/nginx/html/ \
69
+
-p 8081:80 nginx
66
70
```
67
71
68
72
🔄 Si cambias el contenido de la carpeta `web-content` en tu máquina local, también cambiará en la carpeta `/usr/share/nginx/html/` en tu contenedor.
69
73
70
-
### 🚀 Ejemplo práctico: Desarrollo en vivo
71
-
72
-
Vamos a ver el poder de los bind mounts para desarrollo. Con el contenedor corriendo, edita el archivo `web-content/index.html`:
73
-
74
-
```bash
75
-
# Edita el archivo (puedes usar cualquier editor)
76
-
echo"<h1>¡Cambio en vivo!</h1><p>Hora actual: $(date)</p>"> web-content/index.html
77
-
78
-
# Recarga la página en http://localhost:8081 y verás el cambio inmediatamente
79
-
```
80
74
81
75
**🎯 Casos de uso reales para bind mounts:**
82
76
-**Desarrollo web**: Cambios instantáneos sin rebuild
También puedes montar un bind mount como read-only. Esto significa que desde tu máquina podrás cambiar el contenido sin problemas pero desde dentro del contenedor no se podrá. 🔒 Para hacerlo, añade la opción `readonly` al comando `--mount`. Por ejemplo:
95
89
96
90
```bash
97
-
docker run -d --name halloween-readonly --mount type=bind,source="$(pwd)"/web-content,target=/usr/share/nginx/html/,readonly -p 8082:80 nginx
0 commit comments