20 comandos de Docker y sus casos de uso para desarrolladores

La tecnología rinde de verdad cuando sabes cómo trabajar con ella, y con Docker no es distinto. Los equipos que adoptan Docker por primera vez suelen hacerlo por recomendación de DevOps. Pero DevOps no siempre sabe explicar cómo debe usarlo el equipo sin poner en riesgo las ventajas del sistema que ya tiene.
Aquí encontrarás casos de uso de comandos concretos para desarrolladores, qué hace cada uno y demostraciones. Compártelo con tu equipo de desarrollo para adelantarte a sus dudas cuando adoptéis Docker en tu empresa.
docker build
docker build --rm -t docker-examples:latest .
Caso de uso: No tienes un archivo docker-compose, solo un dockerfile. Quieres ejecutar tu servicio, pero antes tienes que hacer el build.
Detalles: Construye una imagen a partir de un dockerfile.
--rm sirve para eliminar el contenedor intermedio cuando el build termina correctamente. Sin esa opción, después del build verás algo así en tu lista de contenedores:
-t etiqueta las imágenes que construyes; si no, es difícil saber de un vistazo qué contienen.
Atajo con VS Code
docker build --rm -t --no-cache docker-examples:latest .
Caso de uso: No especificaste la versión de un paquete del que dependes y quieres actualizarlo a la última, pero no has cambiado el dockerfile y Docker sigue usando las capas en cache.
Detalles: Obliga a Docker a reconstruir la imagen desde cero.
docker run
docker run -d -p 4000:3000 docker-examples:latest
Caso de uso: Has construido una imagen Docker y quieres ejecutarla. La app del contenedor usa el puerto 3000, pero en tu máquina local quieres usar el 4000.
Detalles:
-d ejecuta el contenedor en segundo plano y muestra su ID.
-p publica el puerto del contenedor en el puerto de la máquina local puerto_host:puerto_docker.
Atajo con VS Code
docker run docker-examples:latest
Caso de uso: Quieres ejecutar una imagen Docker y ver/controlar el proceso en tu terminal. Pulsando Ctrl+C también sales del contenedor.
docker run -t -i docker-examples:latest node
Caso de uso: Quieres ejecutar un comando o herramienta concreta dentro del contenedor, usarla y luego lanzar una nueva instancia del contenedor. Por ejemplo, si quieres acceder a la consola de node.js y ejecutar algo. Para contenedores ya en marcha, consulta también docker exec.
docker stop
docker stop container_name
Caso de uso: Necesitas detener un contenedor que ya está en marcha.
Detalles: Puedes encontrar el nombre del contenedor con el comando “docker ps -a”.
Atajo con VS Code
docker stop $(docker ps -a -q)
Ejemplo: Detener todos los contenedores
docker ps
docker ps -a
Caso de uso: Revisas la lista de contenedores y buscas el nombre del que necesitas detener. También te sirve para ver el estado y los puertos expuestos de cada contenedor.
Atajo con VS Code
docker logs
docker logs -f container_name
Caso de uso: Tu servicio ha fallado al arrancar y quieres saber por qué. También puede que quieras seguir los logs de un servicio de forma continua.
Detalles: Muestra los logs de un contenedor concreto; funciona tanto con contenedores en marcha como detenidos.
-f activa el seguimiento de la salida del log.
Atajo con VS Code
docker kill
docker kill $(docker ps -q)
Caso de uso: Docker te ha decepcionado y quieres acabar con todo lo que tenga que ver con él.
Detalles: Mata todos los contenedores en marcha.
docker rm
docker rm $(docker ps -a -q)
Caso de uso: Tu lista de contenedores es un caos y quieres ordenarla.
Detalles: Elimina todos los contenedores detenidos
docker system
docker system prune
Caso de uso: Quieres deshacerte de todo lo que no usas.
Detalles: Elimina todos los contenedores, redes e imágenes (tanto huérfanas como sin referencias) que no se usan y, opcionalmente, los volúmenes.
Atajo con VS Code
docker rmi
docker rmi $(docker images -q)
Caso de uso: Necesitas más espacio en disco.
Detalles: Elimina todas las imágenes
docker exec
docker exec -it container_name /bin/sh
Caso de uso: Durante la ejecución, un contenedor devuelve un error de timeout de conexión en una petición “get” a example.com. Puedes conectarte al contenedor y lanzar curl/ping.
Detalles: Ejecuta un comando o herramienta concreta dentro del contenedor y te permite usarla ahí dentro. Muy útil para depurar y entender qué pasa dentro del contenedor Docker.
docker-compose up
docker-compose up
Caso de uso: Tienes un archivo docker-compose con varios servicios y quieres construirlos, ejecutarlos todos y ver su salida.
docker-compose up -d
Caso de uso: Quieres construir y ejecutar todos los servicios en segundo plano y consultar su estado más tarde.
Atajo con VS Code
docker-compose up -d example-service-1
Caso de uso: Quieres ejecutar un servicio concreto (con el nombre del archivo docker-compose) para que use todos los puertos y volúmenes declarados para ese servicio en tu docker-compose.
docker-compose down
docker-compose down
Caso de uso: Necesitas detener todos los servicios declarados en un archivo docker-compose. Detiene los contenedores y elimina las redes, volúmenes e imágenes que se crearon para cada uno. Es útil cuando quieres empezar desde cero.
docker-compose run
docker-compose run example_app rails db:migrate
Caso de uso: Necesitas ejecutar una tarea concreta que ofrece tu servicio, como migraciones o tests. Funciona de forma parecida a docker run, pero puedes lanzar la tarea usando el nombre del servicio de tu archivo docker-compose. Ten en cuenta que, al usar “run”, los puertos declarados en docker-compose no se publicarán si no usas — service-ports.
docker-compose exec
docker-compose exec example_app node
Caso de uso: Quieres entrar en un contenedor en marcha y ejecutar algo, igual que con docker exec. La diferencia es que accedes por el nombre del servicio. Útil para depurar, probar la red o comprobar que todos los datos están dentro del contenedor Docker.
docker-compose logs
docker-compose logs -f container_name
Caso de uso: Tu servicio ha fallado al arrancar y quieres saber por qué.
Detalles: Muestra los logs de un contenedor concreto, tanto en marcha como detenido. A diferencia de docker logs, aquí usas el nombre del servicio en lugar del nombre del contenedor.
-f activa el seguimiento de la salida del log.
docker-compose stop
docker-compose stop example_app
Caso de uso: Quieres detener tu contenedor por nombre de servicio o de contenedor.
docker-compose restart
docker-compose restart example_app
Caso de uso: Quieres reiniciar un contenedor por nombre de servicio o de contenedor.
¿Quieres leer más sobre Docker?
Estos artículos te ayudarán a entender Docker todavía mejor: