Tutorial Completo de Docker: Desde Imágenes Oficiales hasta Docker Compose
1. Usar una Imagen Oficial Directamente
¿Qué es una imagen oficial?
Las imágenes oficiales son imágenes preconstruidas y mantenidas por los desarrolladores oficiales o la comunidad, optimizadas para uso general.
Ejemplo: Usar Nginx oficial
docker run -d -p 8080:80 --name mi-nginx nginxExplicación:
-d: Ejecuta en segundo plano (detached)-p 8080:80: Mapea puerto 80 del contenedor al 8080 del host--name mi-nginx: Asigna nombre al contenedornginx: Imagen oficial de Nginx
Ventajas:
No necesitas Dockerfile
Lista para usar inmediatamente
Optimizada y segura
Opción 1: Usando Volúmenes (Recomendado para desarrollo)
# 1. Crear tu archivo HTML personalizado
echo "<html><body><h1>¡Mi Web Personalizada!</h1><p>Usando imagen oficial</p></body></html>" > index.html
# 2. Ejecutar el contenedor mapeando tu archivo
docker run -d -p 8080:80 --name mi-nginx \
-v $(pwd)/index.html:/usr/share/nginx/html/index.html \
nginxOpción 2: Copiando archivos después de crear el contenedor
# 1. Crear el contenedor
docker run -d -p 8080:80 --name mi-nginx nginx
# 2. Crear tu archivo HTML
echo "<html><body><h1>¡Contenido Personalizado!</h1></body></html>" > mi-web.html
# 3. Copiar tu archivo al contenedor
docker cp mi-web.html mi-nginx:/usr/share/nginx/html/index.html
# 4. Recargar Nginx (opcional)
docker exec mi-nginx nginx -s reloadOpción 3: Usando un directorio completo
# 1. Crear directorio con todos tus archivos web
mkdir mi-sitio-web
echo "<html><body><h1>Mi Sitio Completo</h1></body></html>" > mi-sitio-web/index.html
echo "/* Tus estilos CSS */" > mi-sitio-web/styles.css
# 2. Montar todo el directorio
docker run -d -p 8080:80 --name mi-nginx \
-v $(pwd)/mi-sitio-web:/usr/share/nginx/html \
nginx2. Crear un Contenedor Web Personalizado con Nginx
Paso 1: Crear estructura del proyecto
mkdir mi-contenedor-web
cd mi-contenedor-web
echo "<html><body><h1>¡Hola, Mundo desde mi contenedor personalizado!</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;"]Instrucciones comunes del Dockerfile:
FROM: Imagen baseRUN: Ejecuta comandosCOPY: Copia archivos del host a la imagenWORKDIR: Establece directorio de trabajoCMD: Comando por defecto al iniciarENTRYPOINT: Comando principal (no se puede sobrescribir)
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.
3. Dockerfile vs Docker Compose vs Docker Build
Dockerfile
Propósito: Script para construir imágenes personalizadas
Uso: Define el entorno de la aplicación
Ejemplo: Instalar dependencias, copiar código, configurar servicios
Docker Build
Propósito: Comando que construye imágenes desde un Dockerfile
Uso:
docker build -t nombre-imagen .Ejemplo: Crea la imagen ejecutable
Docker Compose
Propósito: Orquestar múltiples contenedores
Uso: Define servicios, redes, volúmenes en YAML
Ejemplo: Aplicación web + base de datos + cache
Flujo de trabajo conjunto:
Dockerfile → Define la aplicación
Docker Build → Construye la imagen
Docker Compose → Ejecuta la aplicación con servicios relacionados
4. Docker Compose para Orquestación
Crear docker-compose.yml
version: '3.8'
services:
web:
image: mi-contenedor-web
build: . # Construye desde Dockerfile actual
ports:
- "8080:80"
volumes:
- ./index.html:/usr/share/nginx/html/index.html
restart: always
container_name: mi-servidor-web-composeComandos 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
# Escalar servicio
docker-compose up -d --scale web=3Ejemplo Avanzado con Base de Datos
version: '3.8'
services:
web:
image: mi-contenedor-web
build: .
ports:
- "8080:80"
depends_on:
- db
restart: always
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: contraseña-segura
MYSQL_DATABASE: mi_app
volumes:
- db_data:/var/lib/mysql
restart: always
volumes:
db_data:5. Comandos Esenciales de Docker
Gestión de Contenedores
# Ver contenedores en ejecución
docker ps
# Ver todos los contenedores
docker ps -a
# Detener contenedor
docker stop NOMBRE_CONTENEDOR
# Eliminar contenedor
docker rm NOMBRE_CONTENEDOR
# Iniciar contenedor detenido
docker start NOMBRE_CONTENEDOR
# Reiniciar contenedor
docker restart NOMBRE_CONTENEDORShell y Archivos
# Acceder al shell del contenedor
docker exec -it NOMBRE_CONTENEDOR /bin/bash
# Acceder como root
docker exec -u 0 -it NOMBRE_CONTENEDOR /bin/bash
# Copiar archivos del contenedor al host
docker cp NOMBRE_CONTENEDOR:/ruta/en/contenedor /ruta/en/host
# Copiar archivos del host al contenedor
docker cp /ruta/en/host NOMBRE_CONTENEDOR:/ruta/en/contenedor
# Salir del shell
exitGestión de Imágenes
# Listar imágenes
docker images
# Eliminar imagen
docker rmi NOMBRE_IMAGEN
# Inspeccionar imagen/contenedor
docker inspect NOMBRE6. Diferencias Clave: Imagen Oficial vs Personalizada
| Aspecto | Imagen Oficial | Imagen Personalizada |
|---|---|---|
| Personalización | Limitada | Completa |
| Complejidad | Baja | Media/Alta |
| Mantenimiento | Proveedor | Tú |
| Tamaño | Optimizado | Puede ser mayor |
| Casos de uso | Servicios estándar | Aplicaciones específicas |
¿Cuándo usar cada una?
Usar imagen oficial cuando:
Necesitas servicio estándar (Nginx básico, MySQL)
Sin configuraciones especiales
Rapidez y simplicidad
Construir imagen personalizada cuando:
Necesitas archivos/configuraciones específicas
Tu aplicación tiene dependencias especiales
Quieres control total sobre la imagen
7. Ejemplos Prácticos de Creación de Contenedores
Contenedor en modo detached (recomendado)
docker run -d --name=mi-contenedor nginxContenedor con red específica
docker run --name=mi-contenedor --net=mi-red nginxContenedor con mapeo de puertos
docker run --name=mi-contenedor -p 8080:80 nginxContenedor con variables de entorno
docker run --name=mi-contenedor -e VARIABLE=valor nginx8. Recursos Adicionales Recomendados
Videos Tutoriales:
Mejores Prácticas:
Usa imágenes oficiales siempre que sea posible
Mantén tus imágenes lo más pequeñas posible
Usa .dockerignore para excluir archivos innecesarios
Implementa health checks en tus contenedores
Usa volúmenes para datos persistentes
Conclusión
Este tutorial te ha mostrado el flujo completo de trabajo con Docker:
Imágenes oficiales para servicios estándar
Dockerfile para personalización
Docker Compose para orquestación
Comandos esenciales para gestión diaria
Recuerda: La práctica constante es clave para dominar Docker. ¡Comienza con proyectos simples y ve incrementando la complejidad gradualmente
Comentarios
Publicar un comentario