Tabla de contenido
- ¿Qué es Docker?
- El problema que Docker resuelve
- Conceptos clave: imagen vs contenedor
- Instalación de Docker
- Comandos básicos de Docker
- ¿Qué es docker-compose?
- ¿Docker reemplaza a la máquina virtual?
Si has trabajado en equipo o intentado replicar el entorno de desarrollo de otra persona, seguramente has vivido el clásico problema: “en mi máquina funciona”. Docker nació precisamente para acabar con eso.
¿Qué es Docker?
Docker es una plataforma de contenedorización que te permite empaquetar una aplicación junto con todas sus dependencias (librerías, configuraciones, versión del sistema) en una unidad portable llamada contenedor.
Una vez que tienes un contenedor, puedes ejecutarlo en cualquier computadora que tenga Docker instalado y funcionará exactamente igual, sin importar si es Windows, Mac o Linux. Fin del “en mi máquina funciona”.
El problema que Docker resuelve
Imagina este escenario: trabajas en un proyecto PHP que requiere PHP 8.1, MySQL 8.0 y Nginx. Tu compañero tiene PHP 7.4 y MySQL 5.7 instalados en su máquina. Si intenta correr tu proyecto, algo va a fallar.
Sin Docker, la solución es que todos instalen exactamente las mismas versiones de todo, lo cual es tedioso y propenso a errores. Con Docker, simplemente le pasas el archivo de configuración y con un comando tiene el entorno exacto que necesita, sin tocar lo que ya tiene instalado en su máquina.
Docker también es muy valioso al momento de desplegar aplicaciones: el mismo contenedor que funciona en tu máquina de desarrollo es exactamente el que se despliega en el servidor de producción.
Conceptos clave: imagen vs contenedor
Estos dos términos se confunden mucho al principio, así que vamos a dejarlos claros:
Imagen (Image): Es como un molde o plantilla. Define todo lo que necesita tu aplicación: el sistema operativo base, las dependencias, el código, las variables de entorno. Las imágenes son inmutables, no cambian.
Contenedor (Container): Es una instancia en ejecución de una imagen. Es como si la imagen fuera la receta y el contenedor fuera el platillo preparado. Puedes tener múltiples contenedores corriendo a partir de la misma imagen.
Instalación de Docker
Para instalar Docker, descarga Docker Desktop desde docker.com. Está disponible para Windows, Mac y Linux e incluye todo lo necesario para empezar.
Una vez instalado, verifica en tu terminal:
docker --version
Bash
Comandos básicos de Docker
Descargar una imagen:
docker pull nginx
Bash
Listar las imágenes que tienes:
docker images
Bash
Crear y correr un contenedor:
docker run -d -p 8080:80 --name mi-nginx nginx
Bash
Este comando corre el contenedor en segundo plano (-d), mapea el puerto 80 del contenedor al puerto 8080 de tu máquina y le da el nombre mi-nginx. Si abres tu navegador en http://localhost:8080 verás la página de bienvenida de Nginx.
Otros comandos esenciales:
docker ps // listar contenedores activos
docker stop mi-nginx // detener un contenedor
docker rm mi-nginx // eliminar un contenedor
docker logs mi-nginx // ver los logs
Bash
¿Qué es docker-compose?
Docker Compose es una herramienta que permite definir y gestionar múltiples contenedores a la vez usando un archivo docker-compose.yml:
version: '3.8'
services:
app:
image: php:8.1-fpm
volumes:
- ./src:/var/www/html
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mi_base
nginx:
image: nginx:latest
ports:
- "8080:80"
YAML
Para levantar todo el entorno con un solo comando:
docker-compose up -d
Bash
Para detenerlo:
docker-compose down
Bash
¿Docker reemplaza a la máquina virtual?
La respuesta corta es: no exactamente, son para cosas distintas.
Una máquina virtual (VM) virtualiza el hardware completo e incluye un sistema operativo completo, por lo que es más pesada en recursos. Un contenedor de Docker comparte el kernel del sistema operativo del host, lo que lo hace mucho más ligero y rápido de iniciar.
Para el desarrollo web del día a día, Docker es generalmente más conveniente que las máquinas virtuales.
Docker puede parecer complejo al principio, pero una vez que le agarras el ritmo, se convierte en una herramienta que no querrás dejar de usar. Es prácticamente un estándar en el desarrollo moderno y saber los fundamentos te abrirá muchas puertas.