Docker

Empaqueta y ejecuta aplicaciones en contenedores aislados - entornos consistentes del desarrollo a producción

TL;DR

En una línea: Docker empaqueta apps en contenedores que funcionan idénticamente en todas partes - se acabaron los problemas de “funciona en mi máquina”.

Valor principal:

  • Entornos consistentes - misma configuración desde desarrollo hasta producción
  • Aislamiento - las apps no interfieren entre sí
  • Portabilidad - funciona en cualquier máquina con Docker
  • Ligero - comparte el kernel del OS host, no es una VM completa

Quick Start

Install

macOS/Windows: Descargar Docker Desktop

Linux:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Cerrar sesión y volver a iniciar

Verify

docker --version

First Container

docker run hello-world

Run a Web Server

docker run -d -p 8080:80 nginx
# Abre http://localhost:8080

Cheatsheet

ComandoDescripción
docker run IMAGEEjecutar contenedor
docker run -d IMAGEEjecutar en segundo plano
docker run -p 8080:80 IMAGEMapear puerto
docker run -v /host:/container IMAGEMontar volumen
docker psListar contenedores en ejecución
docker ps -aListar todos los contenedores
docker imagesListar imágenes
docker pull IMAGEDescargar imagen
docker stop IDDetener contenedor
docker rm IDEliminar contenedor
docker rmi IMAGEEliminar imagen
docker logs IDVer logs del contenedor
docker exec -it ID bashShell en el contenedor

Gotchas

Permission denied on Linux

sudo usermod -aG docker $USER
# Luego cerrar sesión y volver a iniciar

Port already in use

# Usar un puerto de host diferente
docker run -p 3001:80 nginx

Container stops immediately

# Ejecutar interactivamente para depurar
docker run -it IMAGE bash

# Revisar logs
docker logs CONTAINER_ID

Dockerfile not updating

# Construir sin caché
docker build --no-cache -t myapp .

Volume permissions

# Ejecutar como usuario actual
docker run -u $(id -u):$(id -g) -v $(pwd):/app IMAGE

Next Steps