Containers
This content is not available in your language yet.
10.2 Contenedores en Linux: Docker y Virtualización Ligera
Sección titulada «10.2 Contenedores en Linux: Docker y Virtualización Ligera»Introducción
Sección titulada «Introducción»La evolución natural de la virtualización tradicional (KVM) ha llevado a un modelo más eficiente y ligero: los contenedores. A diferencia de las máquinas virtuales, los contenedores no virtualizan hardware, sino que comparten el kernel del sistema operativo, permitiendo ejecutar aplicaciones de forma aislada con un consumo de recursos mínimo.
En entornos modernos, los contenedores son la base de arquitecturas cloud-native, microservicios y despliegues continuos. Herramientas como Docker han simplificado enormemente su adopción.
Para un Sysadmin senior, dominar contenedores implica ser capaz de desplegar aplicaciones de forma reproducible, portable y escalable.
Objetivos de aprendizaje
Sección titulada «Objetivos de aprendizaje»Al finalizar este capítulo serás capaz de:
- Comprender qué son los contenedores y cómo funcionan internamente.
- Diferenciar entre virtualización tradicional y contenedores.
- Instalar y configurar Docker en Linux.
- Crear, ejecutar y gestionar contenedores.
- Aplicar buenas prácticas en entornos de producción.
Conceptos Teóricos
Sección titulada «Conceptos Teóricos»1. ¿Qué es un contenedor?
Sección titulada «1. ¿Qué es un contenedor?»Un contenedor es una unidad estándar de software que incluye:
- código de aplicación
- dependencias
- librerías
- configuración
Todo ello aislado del sistema mediante características del kernel:
- namespaces → aislamiento
- cgroups → control de recursos
Un contenedor no incluye un sistema operativo completo, solo lo necesario para ejecutar la aplicación.
2. Contenedores vs Máquinas Virtuales
Sección titulada «2. Contenedores vs Máquinas Virtuales»| Característica | VM (KVM) | Contenedor |
|---|---|---|
| Kernel propio | Sí | No |
| Peso | Alto | Ligero |
| Arranque | Minutos | Segundos |
| Aislamiento | Fuerte | Medio |
3. Docker como estándar de facto
Sección titulada «3. Docker como estándar de facto»Docker proporciona:
- runtime de contenedores
- construcción de imágenes
- gestión de redes y almacenamiento
Componentes principales:
- docker daemon (dockerd)
- docker CLI
- imagenes
- contenedores
4. Imágenes y contenedores
Sección titulada «4. Imágenes y contenedores»- Imagen → plantilla inmutable
- Contenedor → instancia en ejecución
Ejemplo:
imagen nginx → contenedor nginx15. Ciclo de vida de un contenedor
Sección titulada «5. Ciclo de vida de un contenedor»- Crear imagen
- Ejecutar contenedor
- Modificar/usar
- Detener
- Eliminar
6. Almacenamiento y persistencia
Sección titulada «6. Almacenamiento y persistencia»Por defecto, los contenedores son efímeros.
Opciones:
- volúmenes
- bind mounts
Laboratorio Práctico
Sección titulada «Laboratorio Práctico»Escenario
Sección titulada «Escenario»Desplegar un contenedor web con Docker:
- instalar Docker
- ejecutar nginx
- exponer servicio
- persistir datos
Parte 1: Instalación de Docker
Sección titulada «Parte 1: Instalación de Docker»sudo apt updatesudo apt install docker.ioVerificación:
docker versionPaso 2: Habilitar servicio
Sección titulada «Paso 2: Habilitar servicio»systemctl enable dockersystemctl start dockerPaso 3: Añadir usuario
Sección titulada «Paso 3: Añadir usuario»sudo usermod -aG docker $USERnewgrp dockerParte 2: Ejecutar contenedor
Sección titulada «Parte 2: Ejecutar contenedor»docker run -d -p 8080:80 --name web nginxExplicación
Sección titulada «Explicación»-d→ modo detached-p→ mapeo de puertos--name→ nombre contenedornginx→ imagen
Verificación
Sección titulada «Verificación»docker psAcceso:
curl http://localhost:8080Parte 3: Gestión de contenedores
Sección titulada «Parte 3: Gestión de contenedores»Detener:
Sección titulada «Detener:»docker stop webArrancar:
Sección titulada «Arrancar:»docker start webEliminar:
Sección titulada «Eliminar:»docker rm webParte 4: Persistencia con volúmenes
Sección titulada «Parte 4: Persistencia con volúmenes»docker run -d \-p 8080:80 \--name web \-v /host/web:/usr/share/nginx/html \nginxParte 5: Crear imagen propia
Sección titulada «Parte 5: Crear imagen propia»nano DockerfileFROM nginx:latestCOPY index.html /usr/share/nginx/html/index.htmlConstruir imagen:
docker build -t mi-nginx .Ejecutar:
docker run -d -p 8080:80 mi-nginxOutput esperado
Sección titulada «Output esperado»CONTAINER ID IMAGE STATUSabc123 nginx Up 10 secondsErrores Comunes y Troubleshooting
Sección titulada «Errores Comunes y Troubleshooting»1. Permiso denegado
Sección titulada «1. Permiso denegado»permission denied docker.sock-Solución:*
usermod -aG docker usuario2. Puerto ocupado
Sección titulada «2. Puerto ocupado»ss -tulnp | grep 80803. Contenedor se detiene
Sección titulada «3. Contenedor se detiene»docker logs web4. Imagen no encontrada
Sección titulada «4. Imagen no encontrada»pull access denied-Solución:*
verificar nombre imagen.
5. Problemas de red
Sección titulada «5. Problemas de red»docker network lsBuenas Prácticas (Nivel Senior)
Sección titulada «Buenas Prácticas (Nivel Senior)»1. Imágenes mínimas
Sección titulada «1. Imágenes mínimas»Usar imágenes ligeras:
- alpine
- distroless
2. No usar root
Sección titulada «2. No usar root»USER 10013. Persistencia adecuada
Sección titulada «3. Persistencia adecuada»Nunca almacenar datos críticos dentro del contenedor.
4. Versionado de imágenes
Sección titulada «4. Versionado de imágenes»nginx:1.25Evitar latest en producción.
5. Logs centralizados
Sección titulada «5. Logs centralizados»No depender de logs internos.
6. Seguridad
Sección titulada «6. Seguridad»- escanear imágenes
- limitar capacidades
- usar namespaces correctamente
7. Resource limits
Sección titulada «7. Resource limits»--memory=512m --cpus=18. Networking controlado
Sección titulada «8. Networking controlado»- redes custom
- aislamiento
9. Integración con CI/CD
Sección titulada «9. Integración con CI/CD»Construcción automática de imágenes.
Resumen y Siguiente Paso
Sección titulada «Resumen y Siguiente Paso»Has aprendido a trabajar con contenedores en Linux utilizando Docker, comprendiendo su arquitectura, ciclo de vida y operación en entornos reales. Esto te permite desplegar aplicaciones de forma eficiente, portable y escalable.
Los contenedores son solo el primer paso. En entornos complejos, necesitas orquestación para gestionar múltiples instancias y servicios.
➡️ Siguiente tema: 10.3 Kubernetes (K8s) — Orquestación de contenedores a escala.
