Tutorial Completo: Flujo de Trabajo con Docker
Tutorial Completo: Flujo de Trabajo con Docker
📋 Introducción a Docker
Docker utiliza imágenes y contenedores:
Imagen: Plantilla de solo lectura que define el contenedor
Contenedor: Instancia de una imagen en ejecución
1️⃣ Crear un Dockerfile
El Dockerfile define cómo debe construirse una imagen Docker.
Ejemplo de Dockerfile para aplicación Node.js:
FROM node:14
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]Explicación de las instrucciones:
FROM: Imagen baseWORKDIR: Directorio de trabajo en el contenedorCOPY: Copia archivos al contenedorRUN: Ejecuta comandos durante la construcciónEXPOSE: Expone puertosCMD: Comando por defecto al ejecutar el contenedor
2️⃣ Construir la Imagen con Docker Build
docker build -t nombre-imagen .Opciones comunes:
-t: Etiqueta/nombre de la imagen-f: Especificar Dockerfile diferente--no-cache: Construir sin usar cache
3️⃣ Definir Orquestación con Docker Compose
Para aplicaciones con múltiples servicios.
Ejemplo de docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "8080:80"
environment:
- NODE_ENV=production
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:Comandos Docker Compose:
# Levantar servicios
docker-compose up -d
# Detener servicios
docker-compose down
# Ver logs
docker-compose logs
# Escalar servicios
docker-compose up -d --scale web=34️⃣ Ejecutar Contenedores
Ejecutar contenedor individual:
# Modo interactivo
docker run -it --name=mi-contenedor nombre-imagen
# Modo detached (segundo plano)
docker run -d --name=mi-contenedor nombre-imagen
# Con mapeo de puertos
docker run -d -p 8080:80 --name=mi-contenedor nombre-imagen
# Con variables de entorno
docker run -d -e VARIABLE=valor --name=mi-contenedor nombre-imagen
# Con volumen
docker run -d -v /ruta/local:/ruta/contenedor --name=mi-contenedor nombre-imagenOpciones importantes al crear contenedores:
# Incluir en red específica
sudo docker run --name=CONTENEDOR --net=RED REPOSITORIO
# Mapeo de puertos
sudo docker run --name=CONTENEDOR -p PUERTO_EXTERNO:PUERTO_INTERNO REPOSITORIO
# Variables de entorno
sudo docker run --name=CONTENEDOR -e VARIABLE=VALOR REPOSITORIO5️⃣ Administrar Contenedores
Comandos esenciales:
# Ver contenedores en ejecución
docker ps
# Ver todos los contenedores (ejecutándose y detenidos)
docker ps -a
# Detener contenedor
docker stop ID_CONTENEDOR
# Eliminar contenedor
docker rm ID_CONTENEDOR
# Iniciar contenedor detenido
docker start CONTENEDOR
# Reiniciar contenedor
docker restart CONTENEDORAcceder a contenedores:
# Acceder a shell del contenedor
sudo docker exec -it CONTENEDOR /bin/bash
# Acceder como root
sudo docker exec -u 0 -it CONTENEDOR /bin/bash
# Adjuntarse a contenedor en ejecución
docker attach NOMBRE_CONTENEDOR⚠️ IMPORTANTE: Para salir de un contenedor sin detenerlo usar Ctrl + P + Q
Transferir archivos:
# Copiar del contenedor al host
sudo docker cp CONTENEDOR:ORIGEN DESTINO
# Copiar del host al contenedor
sudo docker cp ORIGEN CONTENEDOR:DESTINO🎯 Resumen del Flujo de Trabajo
| Componente | ¿Qué hace? | ¿Cuándo se usa? |
|---|---|---|
| Dockerfile | Define entorno y dependencias | Crear imagen personalizada |
| Docker Build | Construye imagen desde Dockerfile | Generar imagen ejecutable |
| Docker Compose | Orquesta múltiples contenedores | Aplicaciones con varios servicios |
| Contenedor | Instancia en ejecución de una imagen | Ejecutar la aplicación |
🔄 Flujo Final Completo
Escribir Dockerfile que define la imagen de tu aplicación
Construir imagen usando
docker buildDefinir servicios en
docker-compose.yml(si es necesario)Ejecutar contenedores con
docker runodocker-compose upGestionar contenedores para monitoreo y mantenimiento
💡 Consejos Prácticos
Buenas prácticas con Dockerfile:
Usar imágenes oficiales
Minimizar el número de capas
Usar .dockerignore
Ordenar instrucciones de más estáticas a más dinámicas
Comandos útiles de diagnóstico:
# Ver logs de contenedor
docker logs CONTENEDOR
# Ver uso de recursos
docker stats
# Inspeccionar contenedor
docker inspect CONTENEDOR
# Ver imágenes locales
docker imagesLimpieza:
# Eliminar contenedores detenidos
docker container prune
# Eliminar imágenes no usadas
docker image prune
# Limpieza completa
docker system prune🚀 Ejemplo Práctico Completo
Estructura de proyecto:
mi-app/
├── Dockerfile
├── docker-compose.yml
├── package.json
└── src/
└── app.jsDockerfile:
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "src/app.js"]Comandos de ejecución:
# Construir imagen
docker build -t mi-app .
# Ejecutar con Docker
docker run -d -p 3000:3000 --name mi-app-container mi-app
# O con Docker Compose
docker-compose up -d¡Este flujo te permite crear, desplegar y gestionar aplicaciones de manera flexible y escalable usando Docker!
Comentarios
Publicar un comentario