Tutorial Completo de Docker: Componentes y Funcionamiento
¿Qué es Docker?
Docker es una plataforma que permite crear, desplegar y ejecutar aplicaciones en contenedores. Los contenedores empaquetan una aplicación con todas sus dependencias, garantizando que funcione de manera consistente en cualquier entorno.
🔧 Componentes Principales de Docker
1. Docker Engine
Motor central que corre y gestiona contenedores
Incluye el daemon de Docker, la API y la interfaz de línea de comandos (CLI)
2. Docker Images (Imágenes Docker)
Plantillas de sólo lectura utilizadas para crear contenedores
Incluyen todo lo necesario para ejecutar una aplicación:
Código de la aplicación
Bibliotecas y dependencias
Herramientas del sistema
Se construyen a partir de archivos Dockerfile o se descargan de Docker Hub
3. Dockerfile
Archivo de texto con instrucciones para construir una imagen Docker
Describe pasos como:
Instalación de software
Copia de archivos
Configuración del entorno
Ejemplo de Dockerfile:
# Usar la imagen oficial de Nginx como base
FROM nginx:alpine
# Copiar el archivo HTML al directorio de Nginx
COPY index.html /usr/share/nginx/html/index.html
# Exponer el puerto 80
EXPOSE 80
# Comando para iniciar Nginx
CMD ["nginx", "-g", "daemon off;"]4. Docker Hub
Registro público para almacenar, compartir y descargar imágenes Docker
Repositorio central que permite distribución y reutilización de entornos
5. Docker Build
Comando para construir una imagen a partir de un Dockerfile
Genera imágenes personalizadas con configuraciones específicas
Ejemplo:
docker build -t mi-imagen .6. Docker Compose
Herramienta para definir y ejecutar múltiples contenedores en conjunto
Usa un archivo
docker-compose.ymlFacilita la administración de entornos complejos
Ejecución:
docker-compose up -d7. Volúmenes
Mecanismo para persistir datos generados y utilizados en contenedores
Los datos sobreviven al ciclo de vida del contenedor
Sintaxis:
-v <ruta_en_tu_equipo>:<ruta_en_el_contenedor>8. Redes (Networks)
Facilitan la comunicación entre contenedores
Tipos principales:
Bridge: Red predeterminada, aísla contenedores pero permite internet
Host: Comparte la red del equipo anfitrión
User-defined: Redes personalizadas para mayor control
🚀 Comandos Básicos de Docker
Gestión de Contenedores
# Ejecutar un contenedor
docker run -d -p 8080:80 --name mi-nginx nginx
# Listar contenedores en ejecución
docker ps
# Listar todos los contenedores (ejecución y detenidos)
docker ps -a
# Detener un contenedor
docker stop mi-nginx
# Iniciar un contenedor detenido
docker start mi-nginx
# Eliminar un contenedor
docker rm mi-nginx
# Ver logs de un contenedor
docker logs mi-nginxAcceso a Contenedores
# Acceder a un contenedor (con bash)
docker exec -it mi-nginx bash
# Si la imagen no tiene bash, usar sh
docker exec -it mi-nginx sh
# Ejecutar comandos específicos sin entrar al contenedor
docker exec mi-nginx cat /var/log/nginx/access.logGestión de Imágenes
# Descargar una imagen
docker pull nginx
# Listar imágenes
docker images
# Eliminar una imagen
docker rmi mi-imagen📁 Trabajo con Volúmenes
Montar Carpeta Local en Contenedor
# Montar carpeta local en contenedor
docker run -v ~/mi-proyecto:/var/www/html mi-imagen
# Persistir datos de base de datos
docker run -v ~/mysql-datos:/var/lib/mysql mysql:5.7Explicación:
~/mi-proyecto: Ruta en tu equipo/var/www/html: Ruta en el contenedor
🌐 Configuración de Redes
Comandos Básicos de Redes
# Crear una red personalizada
docker network create mi-red
# Conectar un contenedor a una red
docker run --network mi-red mi-imagen
# Conectar un contenedor a múltiples redes
docker network connect mi-red mi-contenedorEjemplo en Docker Compose
version: '3.8'
services:
web:
image: php:8.0-apache
networks:
- red-frontend
db:
image: mysql:5.7
networks:
- red-backend
networks:
red-frontend:
driver: bridge
red-backend:
driver: bridge🛠️ Ejemplo Práctico: Contenedor Web con Nginx
Paso 1: Preparar Archivos
# Crear directorio y archivo HTML
mkdir mi-contenedor-web
cd mi-contenedor-web
echo "<html><body><h1>¡Hola, Mundo!</h1></body></html>" > index.htmlPaso 2: Crear Dockerfile
# Usar la imagen oficial de Nginx como base
FROM nginx:alpine
# Copiar el archivo HTML al directorio de Nginx
COPY index.html /usr/share/nginx/html/index.html
# Exponer el puerto 80
EXPOSE 80
# Comando para iniciar Nginx
CMD ["nginx", "-g", "daemon off;"]Paso 3: Construir la Imagen
docker build -t mi-contenedor-web .Paso 4: Ejecutar el Contenedor
docker run -d -p 8080:80 --name mi-servidor-web mi-contenedor-webPaso 5: Verificar
Visita http://localhost:8080 en tu navegador para ver la página web.
📋 Docker Compose en Acción
Archivo docker-compose.yml Completo
version: '3.8'
services:
web:
image: mi-contenedor-web
build: .
ports:
- "8080:80"
volumes:
- ./index.html:/usr/share/nginx/html/index.html
depends_on:
- db
restart: always
networks:
- app-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: contraseña
MYSQL_DATABASE: mi_db
volumes:
- db_data:/var/lib/mysql
restart: always
networks:
- app-network
volumes:
db_data:
networks:
app-network:
driver: bridgeComandos de Docker Compose
# Iniciar servicios
docker-compose up -d
# Detener servicios
docker-compose down
# Ver logs
docker-compose logs
# Reconstruir y reiniciar
docker-compose up --build
# Listar contenedores
docker-compose ps🔄 Flujo de Trabajo Típico
Crear Dockerfile → Define el entorno de la aplicación
Construir imagen →
docker build -t nombre-imagen .Definir orquestación (opcional) → Crear
docker-compose.ymlEjecutar contenedor →
Simple:
docker run -p 8080:80 nombre-imagenCompose:
docker-compose up -d
Administrar → Usar comandos de gestión y monitoreo
💡 Diferencias Clave
Imagen Oficial vs. Imagen Personalizada
| Aspecto | Imagen Oficial | Imagen Personalizada |
|---|---|---|
| Personalización | Limitada | Completa |
| Complejidad | Baja | Media/Alta |
| Mantenimiento | Proveedor | Tú |
| Tamaño | Optimizado | Puede ser mayor |
| Uso típico | Servicios estándar | Aplicaciones personalizadas |
Dockerfile vs Docker Compose vs Docker Build
Dockerfile: Define cómo construir una imagen
Docker Build: Construye la imagen desde el Dockerfile
Docker Compose: Orquesta múltiples contenedores
✅ Resumen de Comandos Esenciales
# Contenedores
docker ps -a # Listar todos los contenedores
docker stop CONTENEDOR # Detener contenedor
docker start CONTENEDOR # Iniciar contenedor
docker rm CONTENEDOR # Eliminar contenedor
# Acceso
docker exec -it CONTENEDOR bash # Acceder al contenedor
docker exec -u 0 -it CONTENEDOR bash # Acceder como root
exit # Salir del contenedor
# Archivos
docker cp CONTENEDOR:ORIGEN DESTINO # Copiar desde contenedor
docker cp ORIGEN CONTENEDOR:DESTINO # Copiar hacia contenedor
# Redes
docker network create RED # Crear red
docker network ls # Listar redes🎯 Conclusión
Docker simplifica el desarrollo y despliegue de aplicaciones mediante:
Consistencia: Funciona igual en cualquier entorno
Portabilidad: Fácil mover entre desarrollo, pruebas y producción
Aislamiento: Aplicaciones separadas y seguras
Escalabilidad: Fácil escalar y orquestar servicios
Este tutorial cubre los conceptos fundamentales para comenzar a trabajar con Docker. ¡Practica con los ejemplos y estarás listo para containerizar tus aplicaciones
Comentarios
Publicar un comentario