Entorno aislado y portable donde se ejecuta una aplicación con todas sus dependencias, garantizando consistencia entre diferentes sistemas.
Un contenedor es un entorno aislado y ligero que empaqueta una aplicación con todas sus dependencias. Docker es la plataforma más popular para crear y ejecutar contenedores. Ventajas: - Portabilidad: "Funciona en mi máquina" → funciona en todas - Consistencia: Mismo entorno en dev, staging y producción - Aislamiento: Cada contenedor es independiente - Eficiencia: Más ligero que máquinas virtuales - Escalabilidad: Fácil de replicar y orquestar
# Dockerfile - Definir imagen FROM node:20-alpine WORKDIR /app # Copiar package.json primero (mejor caching) COPY package*.json ./ RUN npm ci --only=production # Copiar código fuente COPY . . # Build de la aplicación RUN npm run build # Exponer puerto EXPOSE 3000 # Comando de inicio CMD ["node", "dist/server.js"] # docker-compose.yml - Multi-contenedor version: '3.8' services: app: build: . ports: - "3000:3000" environment: - DATABASE_URL=postgres://db:5432/myapp depends_on: - db - redis db: image: postgres:15 volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: secret redis: image: redis:alpine volumes: postgres_data: # Comandos Docker docker build -t myapp . docker run -p 3000:3000 myapp docker-compose up -d docker logs -f container_name