¿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ística | Contenedor | Máquina Virtual |
|---|---|---|
| Sistema Operativo | Comparte el del host | Requiere SO completo |
| Peso | MB | GB |
| Tiempo de arranque | Milisegundos | Minutos |
| Uso de recursos | Bajo (menos CPU/RAM) | Alto |
| Virtualización | A 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 servidorImá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
- Almacenados en
- Bind mounts:
- Referencian rutas del host
- Ideales para desarrollo y configuración
Cuándo Usar Cada Tipo
| Casos | Volumen Docker | Bind 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,volumescontainer_name,image,tty,restart,environment,ports,depends_on
Archivo .env
- Define variables que se referencian en
compose.ymlusando${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 salidaComandos para Imágenes
docker pull imagen # Descargar imagen
docker images # Ver imágenes
docker rmi imagen # Eliminar imagen
docker search palabra # Buscar imagenComandos para Volúmenes
docker volume create nombre
docker volume ls
docker volume rm nombre
docker inspect contenedor
docker inspect --format='{{ json .Mounts }}' contenedorComandos 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 detenidosContenedor 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" 