
Mi primera pelea con Docker: cómo terminé entendiendo contenedores a la fuerza
Durante mucho tiempo me resistí a aprender Docker. Veía tutoriales, gente en Twitter diciendo que “sin Docker no eres nadie” y yo seguía con mis servidores a la vieja usanza: instalando Node.js, configurando MySQL, y rezando para que todo funcionara igual en producción. Hasta que un día, obviamente, no funcionó igual.
Ahí fue cuando no me quedó otra que enfrentarme a Docker.
El clásico “en mi máquina funciona”
Tenía una aplicación que corría perfecto en mi portátil. Pero cuando la subí a un servidor remoto, comenzaron los problemas: versiones distintas de Node, dependencias rotas, base de datos con configuración rara. La frase “en mi máquina funciona” me perseguía.
Un compañero me dijo: “usa Docker y deja de sufrir”. Yo pensé que exageraba, pero resultó que tenía razón.
Primer contacto con un Dockerfile
El concepto básico es que Docker te deja crear contenedores: pequeños entornos aislados donde tu app corre igual aquí y en cualquier parte. Para eso se usa un Dockerfile
.
# Dockerfile
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
Cuando escribí mi primer Dockerfile
me pareció raro: ¿de verdad con esto puedo garantizar que mi app siempre corra igual? Spoiler: sí.
Levantando servicios con Docker Compose
El siguiente paso fue orquestar no solo mi aplicación, sino también la base de datos. Ahí conocí docker-compose, que permite levantar varios servicios con un solo comando.
# docker-compose.yml
version: "3"
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
Con esto ya tenía Node.js + MySQL corriendo juntos sin necesidad de instalar nada en mi máquina. Fue el momento en que entendí la verdadera magia de Docker.
Lo bueno y lo malo que descubrí
Lo bueno:
- Adiós al “en mi máquina funciona”.
- Portabilidad total: si funciona en Docker, funciona en cualquier servidor.
- Fácil de compartir: con un
docker-compose up
levantas todo en segundos.
Lo malo:
- La curva de aprendizaje al inicio es dura.
- Los errores de red y permisos en contenedores me sacaron canas.
- Mal configurado, puede ser más problema que solución.
Lo que aprendí al final
Docker no es opcional en proyectos serios. Tarde o temprano, vas a necesitarlo. Lo mejor es empezar con cosas sencillas: un contenedor para Node.js, otro para MySQL, y entender cómo se comunican.
Hoy no me imagino desplegar sin usar Docker, aunque sigo pensando que los primeros días fueron una tortura innecesaria.
Conclusión
Mi pelea con Docker terminó en una especie de reconciliación: me hizo sufrir, pero ahora me ahorra horas de dolores de cabeza. Si te pasa como a mí y todavía lo evitas, créeme, es mejor enfrentarlo antes de que el próximo “en mi máquina funciona” te arruine el proyecto.
Comentarios (0)
Comparte tu opinión sobre este post
Únete a la conversación
Inicia sesión para dejar un comentario