Fundamentos
Ejecutar Contenedores
docker run nginx # ejecutar imagen docker run -d nginx # desacoplado (segundo plano) docker run -p 8080:80 nginx # mapear puerto docker run --name web nginx # contenedor con nombre docker run -it ubuntu bash # shell interactivo
Comandos Esenciales
docker psListar contenedores en ejecución
docker ps -aListar todos los contenedores (incluidos detenidos)
docker imagesListar imágenes locales
docker pull nginxDescargar imagen del registro
docker infoInformación del sistema
Gestión de Contenedores
Ciclo de Vida
docker start <id>Iniciar contenedor detenido
docker stop <id>Detener con gracia (SIGTERM)
docker kill <id>Detener forzado (SIGKILL)
docker restart <id>Reiniciar contenedor
docker rm <id>Eliminar contenedor detenido
docker rm -f <id>Eliminar forzado (incluso si está en ejecución)
Inspección y Depuración
docker logs <id>Ver logs del contenedor
docker logs -f <id>Seguir logs (en vivo)
docker exec -it <id> bashShell dentro de contenedor en ejecución
docker inspect <id>Metadatos detallados del contenedor (JSON)
docker top <id>Procesos en ejecución en el contenedor
docker statsUso de recursos en tiempo real
Copiar Archivos
docker cp file.txt :/app/ # host → contenedor docker cp :/app/log.txt ./ # contenedor → host
Imágenes
Construir y Etiquetar
docker build -t myapp . # construir desde Dockerfile docker build -t myapp:v2 . # con etiqueta docker tag myapp user/myapp:v2 # re-etiquetar imagen
Publicar
docker login docker push user/myapp:v2 docker pull user/myapp:v2
Gestión de Imágenes
docker imagesListar todas las imágenes locales
docker rmi <image>Eliminar imagen
docker image pruneEliminar imágenes huérfanas
docker system pruneEliminar todos los datos no utilizados
docker history <image>Mostrar historial de capas de la imagen
Dockerfile
Instrucciones Comunes
FROM node:20Imagen base
WORKDIR /appEstablecer directorio de trabajo
COPY . .Copiar archivos a la imagen
RUN npm installEjecutar comando durante la construcción
CMD ["node", "app.js"]Comando por defecto en tiempo de ejecución
EXPOSE 3000Documentar puerto de escucha
ENV NODE_ENV=productionEstablecer variable de entorno
ARG VERSION=latestVariable de tiempo de construcción
ENTRYPOINT ["python"]Ejecutable fijo (CMD = argumentos)
Ejemplo de Dockerfile
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --production COPY . . EXPOSE 3000 CMD ["node", "server.js"]
Volúmenes
Almacenamiento Persistente
docker volume create mydata docker run -v mydata:/app/data nginx docker run -v $(pwd):/app nginx # bind mount
Comandos de Volumen
docker volume lsListar volúmenes
docker volume inspect <v>Detalles del volumen
docker volume rm <v>Eliminar volumen
docker volume pruneEliminar volúmenes no utilizados
Redes
Fundamentos de Red
docker network create mynet docker run --network mynet --name api nginx docker run --network mynet --name db postgres
Comandos de Red
docker network lsListar redes
docker network inspect <n>Detalles de la red
docker network connect <n> <c>Conectar contenedor a la red
docker network rm <n>Eliminar red

Los contenedores en la misma red pueden alcanzarse por nombre

Docker Compose
Ejemplo de compose.yaml
services: web: build: . ports: ["3000:3000"] depends_on: [db] db: image: postgres:16 environment: POSTGRES_PASSWORD: secret volumes: [pgdata:/var/lib/postgresql/data] volumes: pgdata:
Comandos de Compose
docker compose upIniciar todos los servicios
docker compose up -dIniciar en segundo plano
docker compose downDetener y eliminar contenedores
docker compose down -vTambién eliminar volúmenes
docker compose buildReconstruir imágenes
docker compose logs -fSeguir logs de todos los servicios
docker compose psListar servicios en ejecución
docker compose exec web bashShell en un servicio
Patrones Útiles
Comandos de Limpieza
docker system prune -a # eliminar todo lo no usado docker container prune # eliminar contenedores detenidos docker image prune -a # eliminar imágenes no usadas
Recetas Rápidas
Contenedor temporaldocker run --rm -it alpine sh
Verificar puertosdocker port
Variables de entornodocker run -e KEY=val image
Archivo de entornodocker run --env-file .env image
Política de reiniciodocker run --restart unless-stopped image
Límite de recursosdocker run --memory 512m --cpus 1 image