Fundamentos de Contenedores y Docker: Conceptos Esenciales

¿Qué es un Contenedor?

  • Un contenedor es una unidad de software ligera y portátil que encapsula una aplicación y todas sus dependencias.
  • Se ejecuta en un entorno aislado, compartiendo el kernel del sistema operativo del host.
  • Es una forma de virtualización a nivel de sistema operativo, más ligera que las máquinas virtuales (VM).

Diferencias con una Máquina Virtual (VM)

CaracterísticaContenedorMáquina Virtual
Sistema OperativoComparte el del hostRequiere SO completo
PesoMBGB
Tiempo de arranqueMilisegundosMinutos
Uso de recursosBajo (menos CPU/RAM)Alto
VirtualizaciónA nivel de SO (kernel)A nivel de hardware

Tipos de Contenedores

  • Contenedores de sistema: Simulan un sistema completo (ej. LXC).
  • Contenedores de aplicación: Ejecutan una única app (ej. Docker, Podman).

Arquitecturas con Contenedores

  • Microservicios: Cada servicio corre en un contenedor independiente (más flexible).
  • Monolítico: Todo está en un contenedor (ej. WordPress con Apache + PHP + MySQL).
  • Multicapa: Cada capa (frontend/backend/BBDD) está separada en su contenedor.

Diferencia Clave

Los microservicios son independientes entre sí. En arquitecturas multicapa, las capas dependen unas de otras para funcionar.

Ventajas de los Contenedores

  • Portabilidad total
  • Aislamiento
  • Despliegue rápido
  • Eficiencia en uso de recursos
  • Escalabilidad y automatización (si se usa con orquestadores)

¿Qué es Docker?

Docker es una plataforma de contenedores que permite construir, ejecutar y gestionar aplicaciones de forma aislada y portable.

Componentes Clave de Docker

  • Imagen: Plantilla de solo lectura que sirve para crear contenedores.
  • Contenedor: Instancia ejecutable de una imagen.
  • Docker Engine: Demonio que ejecuta y gestiona contenedores.
  • Cliente Docker (CLI o GUI): Interfaz para interactuar con Docker.
  • Docker Desktop: Aplicación para Windows/macOS que incluye el engine.
  • Redes: Conectan contenedores entre sí o con el host.
  • Volúmenes: Almacenamiento persistente.
  • Plugins: Añaden funcionalidades (almacenamiento, redes, etc.).
  • Docker Hub: Repositorio de imágenes públicas/privadas.
  • Docker Compose: Herramienta para escenarios multi-contenedor.
  • Docker Swarm / Kubernetes: Orquestadores de contenedores.
docker logs servidor

Imágenes Docker

  • Son plantillas inmutables.
  • Contienen sistema de archivos, librerías y configuraciones necesarias.
  • Se usan para generar contenedores.

Registro de Imágenes

  • Docker Hub: repositorio público principal (estilo GitHub).
  • Se puede hacer pull, push, commit.
  • También existen registros privados o locales.

Formato de Nombres de Imagen

usuario/nombre:etiqueta
  • Si no se pone usuario, es imagen oficial.
  • Si no se indica etiqueta, se usa latest.

Sistema de Capas

  • Docker reutiliza capas compartidas.
  • Cada contenedor añade una capa de escritura.

Volúmenes y Persistencia en Docker

Los contenedores son efímeros: sus datos se pierden al eliminarlos. Para guardar datos de forma persistente se usan:

Tipos de Volúmenes

  • Volúmenes Docker (recomendado):
    • Almacenados en /var/lib/docker/volumes
    • No deben modificarse directamente
    • Compartibles entre contenedores
  • Bind mounts:
    • Referencian rutas del host
    • Ideales para desarrollo y configuración

Cuándo Usar Cada Tipo

CasosVolumen DockerBind Mount
Producción / Backup
Compartir datos entre conts.⚠️
Desarrollo / Config.⚠️
Modificar desde host

Docker Compose

¿Qué es Docker Compose?

Define y ejecuta entornos multi-contenedor usando un archivo YAML (compose.yml).

Ventajas de Docker Compose

  • Escenario declarativo
  • Reutilizable entre entornos
  • Automatiza redes y dependencias
  • Permite gestionar todos los contenedores juntos

Estructura Básica de un Archivo compose.yml

services:
  app:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - miweb:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret

volumes:
  miweb:

Parámetros Frecuentes en compose.yml

  • name, services, volumes
  • container_name, image, tty, restart, environment, ports, depends_on

Archivo .env

  • Define variables que se referencian en compose.yml usando ${VAR}
  • Permite cambiar valores por entorno sin modificar el archivo YAML

Comandos Importantes de Docker

Comandos para Contenedores

docker run imagen           # Crear y ejecutar contenedor
docker run -it imagen       # Modo interactivo
docker run -d imagen        # Modo demonio
docker start/stop nombre  # Iniciar/detener contenedor
docker ps / ps -a           # Listar contenedores
docker rm nombre          # Eliminar contenedor
docker rename a b           # Renombrar
docker logs nombre          # Ver logs
docker exec nombre bash     # Ejecutar comando
docker attach nombre        # Conectarse a la salida

Comandos para Imágenes

docker pull imagen          # Descargar imagen
docker images             # Ver imágenes
docker rmi imagen           # Eliminar imagen
docker search palabra       # Buscar imagen

Comandos para Volúmenes

docker volume create nombre
docker volume ls
docker volume rm nombre
docker inspect contenedor
docker inspect --format='{{ json .Mounts }}' contenedor

Comandos de Docker Compose

docker compose up -d      # Levantar servicios
docker compose down       # Apagar y eliminar
docker compose ps         # Ver estado
docker compose exec app bash # Ejecutar comando
docker compose start/stop/pause
docker compose rm         # Eliminar contenedores detenidos

Contenedor en Modo Demonio

  • Se mantiene ejecutándose indefinidamente.
  • Ideal para servicios como bases de datos o servidores web.
docker run -d --name servidor ubuntu bash -c "while true; do echo hello world; sleep 1; done"

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.