Docker: guía de mejores prácticas y comandos más usados

¿Conoces esos comandos Docker que buscas todo el tiempo porque nunca los memorizaste? Reuní los principales en una guía rápida, agrupados por categoría: imágenes, containers, volúmenes, redes, logs y Docker Compose. Incluye también buenas prácticas en producción: imágenes livianas, usuario no-root, secrets y mantenimiento.

Principales comandos de Docker – agrupados por categoría para facilitar la consulta en el día a día.

1. Gestión de imágenes

  • docker pull <imagen> – descarga una imagen de Docker Hub (o registry).
  • docker images – lista imágenes locales.
  • docker rmi <imagen> – elimina una imagen.
  • docker build -t <nombre>:<tag> . – crea una imagen a partir del Dockerfile en el directorio actual.
  • docker tag <imagen> <repo>:<tag> – renombra/etiqueta una imagen.
  • docker push <repo>:<tag> – envía la imagen al registry.

2. Containers (ejecución)

docker run <imagen> – crea y ejecuta un container. Principales opciones:

Flag Qué hace
-d Ejecuta en background (detached)
-p 8080:80 Mapea puerto host:container
--name miapp Define el nombre del container
-v /host:/container Monta un volumen
  • docker ps – lista containers en ejecución.
  • docker ps -a – lista todos los containers (activos y parados).
  • docker stop <id|nombre> – detiene un container.
  • docker start <id|nombre> – inicia un container detenido.
  • docker restart <id|nombre> – reinicia un container.
  • docker rm <id|nombre> – elimina un container.

3. Logs, shell e inspección

  • docker logs <id|nombre> – muestra logs del container.
  • docker logs -f <id|nombre> – sigue logs en tiempo real (tail -f).
  • docker exec -it <id|nombre> sh – abre shell interactivo dentro del container.
  • docker inspect <id|nombre> – muestra detalles completos en JSON.
  • docker stats – monitorea uso de CPU y memoria en tiempo real.

4. Volúmenes y datos

  • docker volume ls – lista volúmenes.
  • docker volume create <nombre> – crea un volumen.
  • docker volume rm <nombre> – elimina un volumen.
  • docker system df – muestra uso de disco (imágenes, containers, volúmenes).

5. Redes

  • docker network ls – lista redes.
  • docker network create <nombre> – crea una red.
  • docker network inspect <nombre> – muestra detalles de la red.
  • docker network connect <red> <container> – conecta container a la red.
  • docker network disconnect <red> <container> – desconecta container de la red.

6. Limpieza (housekeeping)

  • docker system prune – elimina containers detenidos, redes e imágenes no usados.
  • docker system prune -a – igual, incluyendo todas las imágenes no utilizadas.
  • docker volume prune – elimina volúmenes no usados.
Atención: docker system prune -a elimina imágenes que no están vinculadas a ningún container activo. Use con cuidado en ambientes compartidos.

7. Docker Compose (multi-containers)

  • docker compose up -d – levanta los containers definidos en docker-compose.yml.
  • docker compose down – detiene y elimina los containers del stack.
  • docker compose logs -f – sigue logs de todos los servicios.
  • docker compose ps – lista containers del proyecto.
  • docker compose exec <servicio> sh – abre shell dentro de un servicio.

8. Buenas prácticas en producción

Docker se convirtió en estándar para empaquetar y ejecutar aplicaciones. En producción, sin embargo, imágenes mal configuradas y containers corriendo como root pueden ampliar la superficie de ataque y dificultar auditorías.

Imágenes más pequeñas y en capas

Use imágenes base Alpine o distroless siempre que sea posible y adopte multi-stage builds para compilar en una etapa y copiar solo el binario a la etapa final. Menos paquetes = menos CVEs y menor tamaño. Fije el tag de la imagen base (ej.: node:20-alpine) para evitar sorpresas en rebuilds.

Ejecutar como no-root

Cree un usuario dedicado en el Dockerfile y utilice la instrucción USER antes del CMD. En Kubernetes o Docker Compose, evite el modo privileged y limite recursos de CPU y memoria. Monitoree con herramientas de conformidad como Trivy o Docker Scout para identificar vulnerabilidades conocidas.

Secrets y configuración

Nunca coloque contraseñas o claves en variables de ambiente en texto plano en docker-compose.yml. Use Docker secrets, archivos montados como read-only o un orquestador (Kubernetes Secrets, HashiCorp Vault). Rote credenciales regularmente y mantenga las imágenes base actualizadas.

?Necesitas ayuda?