Skip to content

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»

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.


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.

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.


Característica VM (KVM) Contenedor
Kernel propio Sí No
Peso Alto Ligero
Arranque Minutos Segundos
Aislamiento Fuerte Medio

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

  • Imagen → plantilla inmutable
  • Contenedor → instancia en ejecución

Ejemplo:

imagen nginx → contenedor nginx1

  1. Crear imagen
  2. Ejecutar contenedor
  3. Modificar/usar
  4. Detener
  5. Eliminar

Por defecto, los contenedores son efímeros.

Opciones:

  • volúmenes
  • bind mounts

Desplegar un contenedor web con Docker:

  • instalar Docker
  • ejecutar nginx
  • exponer servicio
  • persistir datos

Ventana de terminal
sudo apt update
sudo apt install docker.io

Verificación:

Ventana de terminal
docker version

Ventana de terminal
systemctl enable docker
systemctl start docker

Ventana de terminal
sudo usermod -aG docker $USER
newgrp docker

Ventana de terminal
docker run -d -p 8080:80 --name web nginx

  • -d → modo detached
  • -p → mapeo de puertos
  • --name → nombre contenedor
  • nginx → imagen

Ventana de terminal
docker ps

Acceso:

Ventana de terminal
curl http://localhost:8080

Ventana de terminal
docker stop web

Ventana de terminal
docker start web

Ventana de terminal
docker rm web

Ventana de terminal
docker run -d \
-p 8080:80 \
--name web \
-v /host/web:/usr/share/nginx/html \
nginx

Ventana de terminal
nano Dockerfile
FROM nginx:latest
COPY index.html /usr/share/nginx/html/index.html

Construir imagen:

Ventana de terminal
docker build -t mi-nginx .

Ejecutar:

Ventana de terminal
docker run -d -p 8080:80 mi-nginx

CONTAINER ID IMAGE STATUS
abc123 nginx Up 10 seconds

permission denied docker.sock

-Solución:*

Ventana de terminal
usermod -aG docker usuario

Ventana de terminal
ss -tulnp | grep 8080

Ventana de terminal
docker logs web

pull access denied

-Solución:*

verificar nombre imagen.


Ventana de terminal
docker network ls

Usar imágenes ligeras:

  • alpine
  • distroless

USER 1001

Nunca almacenar datos críticos dentro del contenedor.


nginx:1.25

Evitar latest en producción.


No depender de logs internos.


  • escanear imágenes
  • limitar capacidades
  • usar namespaces correctamente

Ventana de terminal
--memory=512m --cpus=1

  • redes custom
  • aislamiento

Construcción automática de imágenes.


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.