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
También es posible crear un contenedor que a su vez cree un volumen. ✨
144
146
145
147
```bash
146
-
docker run -d --name halloween-demo -v web-data:/usr/share/nginx/html/ -p 8084:80 nginx
148
+
docker run -d --name halloween-demo \
149
+
-v web-data:/usr/share/nginx/html/ \
150
+
-p 8084:80 nginx
147
151
```
148
152
149
153
En este caso, al ejecutarse el contenedor `halloween-demo` se creará un volumen llamado `web-data` que se montará en la carpeta `/usr/share/nginx/html/` del contenedor.
@@ -154,28 +158,76 @@ Y de nuevo, añadir los datos a nuestro volumen:
<!-- Contenido fuera de los vídeos de introducción -->
158
162
159
-
Puedes asociar varios contenedores al mismo volumen a la vez 🔄
163
+
### Asociar el volumen a varios contenedores
164
+
165
+
Otro escenario en el que te puedes encontrar es que necesites asociar varios contenedores al mismo volumen a la vez 🔄
166
+
167
+
Esto es útil cuando tienes varios contenedores que necesitan acceder a los mismos datos. Un ejemplo típico es cuando tienes un contenedor que genera datos y otro que los consume, que puede ser algo tan sencillo como un contenedor que genera logs y otro que los analiza.
168
+
169
+
Por ejemplo vamos a crear un nuevo servidor nginx que almacene sus logs en un volumen con otro contenedor que lea esos logs:
Al inspeccionar cualquiera de los volúmenes podemos ver cuál es la ruta donde se están almacenando: 🔍
174
199
175
200
```bash
176
-
docker volume inspect halloween-data
201
+
docker volume inspect halloween-logs
177
202
```
178
203
204
+
### Ver el contenido de un volumen en Docker Desktop
205
+
206
+
También puedes ver el contenido de un volumen directamente desde Docker Desktop. Solo tienes que ir a la sección de Volúmenes, seleccionar el volumen que quieres y podrás ver el contenido del mismo
### Ver el contenido de un volumen desde la línea de comandos
211
+
212
+
Si quieres ver el contenido de un volumen desde la línea de comandos, puedes crear un contenedor temporal que monte el volumen y te permita explorar su contenido. Por ejemplo:
213
+
214
+
```bash
215
+
docker run --rm -it \
216
+
--mount source=halloween-logs,target=/data \
217
+
alpine sh
218
+
```
219
+
220
+
Y dentro de este escribimos:
221
+
222
+
```bash
223
+
ls -la /data
224
+
```
225
+
226
+
### Ver el contenido de un volumen desde Visual Studio Code
227
+
228
+
Si tienes la extensión de Docker instalada en Visual Studio Code, puedes explorar el contenido de un volumen directamente desde el editor. Solo tienes que ir a la sección de Docker, seleccionar Volúmenes, hacer clic derecho sobre el volumen que quieres explorar y seleccionar "Explore Volume". Esto abrirá una nueva ventana del editor con el contenido del volumen.
229
+
230
+
179
231
### Eliminar un volumen específico
180
232
181
233
Para eliminar un volumen específico, utiliza el comando `docker volume rm` seguido del nombre del volumen. Por ejemplo:
@@ -196,7 +248,7 @@ docker volume prune -f
196
248
197
249
### 📦 Backup y restore de volúmenes
198
250
199
-
Los volúmenes son críticos para la persistencia de datos. Aquí te mostramos cómo hacer backup y restore:
251
+
Los volúmenes son críticos para la persistencia de datos, por lo que es importante saber cómo hacer backup y restaurar datos en caso de fallo. Aquí te muestro cómo hacerlo utilizando un contenedor temporal con la imagen `alpine` y el comando `tar`.
### Exportar/Importar volumenes desde Docker Desktop
289
+
290
+
Ahora desde Docker Desktop también puedes exportar un volumen directamente desde la interfaz gráfica. Solo tienes que ir a la sección de Volúmenes, seleccionar el volumen que quieres exportar y tienes una nueva sección llamada **Exports**
La forma programada requiere una suscripción de pago pero el **Quick export** es gratuito. Si haces clic sobre el mismo verás que tienes diferentes opciones para exportar el volumen:
y si haces clic sobre el mismo podrás seleccionar el archivo `.tar` que has exportado previamente o incluso si lo has subido a tu Docker Hub puedes también indicarselo
304
+
305
+

La última forma de almacenar datos en Docker es utilizando un tmpfs mount. Un tmpfs mount es un sistema de archivos temporal que se almacena en la memoria RAM de tu host. ⚡ Esto significa que si apagas tu máquina, perderás todos los datos que hayas almacenado en tu contenedor.
250
323
251
324
```bash
252
-
docker run -dit --name tmptest --mount type=tmpfs,destination=/usr/share/nginx/html/ -p 8086:80 nginx
CPU_USAGE=$(docker stats --no-stream --format "{{.CPUPerc}}" ping-service | sed 's/%//')
436
-
if(( $(echo "$CPU_USAGE>80" | bc -l) ));then
437
-
echo"⚠️ ALERTA: CPU al ${CPU_USAGE}%"
438
-
fi
439
-
```
440
-
441
-
442
507
## 💾 Limitar recursos: CPU y Memoria
443
508
444
509
Es importante limitar los recursos que puede usar un contenedor para evitar que consuma todos los recursos del host y afecte a otros contenedores o servicios.
@@ -466,7 +531,7 @@ docker run -d --memory="512m" --name web -p 8080:80 httpd
466
531
Especifica cuántos núcleos de CPU puede usar el contenedor:
467
532
468
533
```bash
469
-
docker run -d --cpus="1.5" --name web -p 8080:80 httpd
534
+
docker run -d --cpus="1.5" --name web-limited -p 8090:80 httpd
470
535
```
471
536
472
537
**Ejemplos de uso:**
@@ -481,10 +546,10 @@ docker run -d --cpus="1.5" --name web -p 8080:80 httpd
481
546
482
547
### 📋 Limitar CPU Priority (`--cpu-shares`)
483
548
484
-
Controla la prioridad de CPU en caso de contención:
549
+
Cuando hay competición por CPU entre contenedores, este parámetro controla la prioridad de CPU en caso de contención:
485
550
486
551
```bash
487
-
docker run -d --cpu-shares=1024 --name web -p 8080:80 httpd
552
+
docker run -d --cpu-shares=1024 --name web-cpu-shares -p 8091:80 httpd
488
553
```
489
554
490
555
**Por defecto:** Cada contenedor tiene 1024 shares
@@ -510,11 +575,13 @@ docker run -d \
510
575
- ✅ Máximo 1.5 núcleos de CPU
511
576
- ✅ Prioridad normal en caso de contención
512
577
578
+
Esto es útil para asegurar que tu servidor web no consuma todos los recursos del host y afecte a otros servicios. Y de la misma forma que si hay un contenedor que es más importante que otro, puedes ajustar los `--cpu-shares` para darle más prioridad.
579
+
513
580
### 📊 Ver uso de recursos en tiempo real
514
581
515
582
```bash
516
583
# Ver estadísticas de un contenedor específico
517
-
docker stats web
584
+
docker stats web-limited
518
585
519
586
# Ver estadísticas de todos los contenedores
520
587
docker stats
@@ -535,9 +602,9 @@ docker stats --no-stream
535
602
**⚠️ Importante:**
536
603
- Si no especificas límites, el contenedor puede consumir todos los recursos
537
604
- Establecer límites muy bajos puede hacer que la aplicación vaya lenta
538
-
-Monitorea siempre el uso real vs los límites establecidos
605
+
-Monitoriza siempre el uso real vs los límites establecidos
539
606
540
-
**💡 Recomendación:** Para aplicaciones en producción, siempre establece límites de memoria y CPU para proteger la estabilidad del sistema.
607
+
**💡 Recomendación:** Para aplicaciones en producción, siempre establece límites de memoria y CPU para proteger la estabilidad del sistema. Aunque es cierto que si estás en un entorno productivo posiblemente uses un clúster de contenedores, como Kubernetes o Docker Swarm.
541
608
542
609
## 🔌 Docker extensions
543
610
@@ -554,59 +621,11 @@ Existen varias extensiones de Docker que nos permiten monitorizar nuestros conte
554
621
-**Volumes Backup & Share**: Backup y compartir volúmenes fácilmente
555
622
-**Docker Scout**: Análisis de vulnerabilidades en imágenes
556
623
557
-
### 🎯 Ejercicios prácticos para consolidar
624
+
### 🎯 Ejercicios sugeridos
625
+
558
626
559
-
**Ejercicio 1: Setup de desarrollo completo**
560
-
```bash
561
-
# 1. Crear un bind mount para desarrollo web
562
-
# 2. Editar archivos en vivo y ver cambios
563
-
# 3. Configurar logs en tiempo real
564
-
# 4. Monitorizar recursos mientras desarrollas
565
-
```
566
627
567
-
**Ejercicio 2: Gestión de datos empresarial**
568
-
```bash
569
-
# 1. Crear volúmenes para datos persistentes
570
-
# 2. Hacer backup de volúmenes
571
-
# 3. Simular fallo y recuperación
572
-
# 4. Compartir datos entre múltiples servicios
573
-
```
574
628
575
-
**Ejercicio 3: Optimización y monitorización**
576
-
```bash
577
-
# 1. Usar tmpfs para cachés temporales
578
-
# 2. Monitorizar uso de recursos
579
-
# 3. Analizar logs para troubleshooting
580
-
# 4. Limpiar sistema manteniendo lo esencial
581
-
```
582
629
583
630
> [!TIP]
584
631
> 💡 **Consejo final**: En producción, siempre usa volúmenes para datos críticos, bind mounts solo para desarrollo, y tmpfs para datos temporales que requieren alto rendimiento.
585
-
586
-
<!--
587
-
## ⏱️ Distribución temporal sugerida (3 horas)
588
-
589
-
**Primera hora (60 min):**
590
-
- 🔗 Bind mounts completo (45 min)
591
-
- Explicación conceptual (10 min)
592
-
- Práctica con --mount (15 min)
593
-
- Práctica con -v (10 min)
594
-
- Read-only bind mount (10 min)
595
-
- ☕ Mini break (15 min)
596
-
597
-
**Segunda hora (60 min):**
598
-
- 💾 Volúmenes - Parte 1 (60 min)
599
-
- Crear y usar volúmenes básicos (30 min)
600
-
- Volúmenes automáticos (15 min)
601
-
- Compartir entre contenedores (15 min)
602
-
603
-
**Tercera hora (60 min):**
604
-
- 💾 Volúmenes - Parte 2 (20 min)
605
-
- Inspección y limpieza
606
-
- 🧠 Tmpfs mount (15 min)
607
-
- 📊 Monitorización (20 min)
608
-
- Sesión práctica con docker events, stats, logs
609
-
- 🔌 Docker extensions + tiempo libre (5 min)
610
-
611
-
**Tiempo de buffer: ~30 minutos** - Perfecto para experimentación extra
0 commit comments