En esta lección aprenderás los comandos fundamentales que usarás cada día al trabajar con Docker. Hasta ahora hemos entendido qué es Docker y cómo funciona por dentro; ha llegado el momento de tomar el control desde la terminal. Veremos la estructura general de cualquier comando de Docker y, después, los comandos esenciales para ejecutar contenedores, listarlos, gestionar imágenes, ver registros y entrar en un contenedor en marcha. Dominar estos comandos te dará autonomía total para experimentar y avanzar con confianza en el resto del curso.
Objetivos de Aprendizaje
- Comprender la estructura general de un comando de Docker.
- Ejecutar contenedores con
docker runy sus opciones más útiles. - Listar contenedores e imágenes con
docker psydocker images. - Descargar imágenes con
docker pull. - Detener y eliminar contenedores con
docker stopydocker rm. - Eliminar imágenes con
docker rmi. - Inspeccionar registros con
docker logsy entrar en un contenedor condocker exec.
La Estructura General de un Comando Docker
Casi todos los comandos de Docker siguen el mismo patrón. Conocerlo te ayudará a entender cualquier comando, incluso los que aún no hayas visto.
docker: el programa principal (la CLI).[OBJETO]: el tipo de objeto sobre el que actúas (container,image,network,volume…). En muchos comandos clásicos es opcional.COMANDO: la acción a realizar (run,ps,pull,stop…).[OPCIONES]: modificadores que empiezan por-(forma corta) o--(forma larga), como-do--name.[ARGUMENTOS]: datos adicionales, como el nombre de la imagen o del contenedor.
Por ejemplo, estos dos comandos son equivalentes:
- La primera forma es la "clásica" y más breve.
- La segunda es la forma "explícita" con el objeto (
container). Hace lo mismo, pero deja más claro sobre qué actúas.
En esta lección usaremos sobre todo la forma clásica, que es la más común en el día a día.
docker run: Ejecutar un Contenedor
docker run es el comando que más usarás. Crea un contenedor a partir de una imagen y lo arranca.
docker run: crea y arranca un contenedor.nginx: la imagen a usar. Si no está en tu máquina, Docker la descarga automáticamente de Docker Hub.
Este comando "ocupa" tu terminal mientras el contenedor se ejecuta. Para liberarla y dejarlo corriendo en segundo plano, usa el modo detached (-d):
-d: modo detached (segundo plano). Te devuelve el control de la terminal de inmediato.--name servidor_web: asigna un nombre legible al contenedor. Si no lo indicas, Docker le pone uno aleatorio.-p 8080:80: publica el puerto. Mapea el puerto8080de tu máquina al80del contenedor, de modo que puedas acceder enhttp://localhost:8080.nginx: la imagen.
docker ps: Listar Contenedores
docker ps muestra los contenedores en ejecución.
- Lista solo los contenedores activos, con su ID, imagen, estado, puertos y nombre.
Para ver todos los contenedores, incluidos los detenidos:
-a(o--all): muestra también los contenedores parados. Muy útil para encontrar contenedores que terminaron o fallaron.
docker images: Listar Imágenes
docker images muestra las imágenes descargadas en tu máquina.
- Lista cada imagen con su repositorio, tag (etiqueta de versión), ID y tamaño.
- Te ayuda a saber qué imágenes tienes disponibles localmente y cuánto espacio ocupan.
docker pull: Descargar una Imagen
docker pull descarga una imagen del registro sin ejecutarla todavía.
docker pull: descarga la imagen indicada.postgres:16: el nombre de la imagen (postgres) y su tag (16, la versión). Si omites el tag, Docker descarga la etiquetalatest.
Descargar la imagen por adelantado es útil, por ejemplo, para tenerla lista antes de quedarte sin conexión.
docker stop: Detener un Contenedor
docker stop detiene de forma ordenada un contenedor en ejecución.
docker stop: envía una señal para que el contenedor se detenga limpiamente.servidor_web: el nombre (o el ID) del contenedor que quieres detener.
A diferencia de eliminarlo, detener un contenedor no lo borra: sigue existiendo y puedes volver a arrancarlo con docker start servidor_web.
docker rm: Eliminar un Contenedor
docker rm elimina un contenedor (normalmente, uno ya detenido).
docker rm: borra el contenedor de forma permanente.servidor_web: el contenedor a eliminar.
Si el contenedor sigue en marcha, primero deténlo o fuerza el borrado:
-f(o--force): fuerza la eliminación deteniendo el contenedor primero. Úsalo con cuidado.
docker rmi: Eliminar una Imagen
docker rmi elimina una imagen de tu máquina para liberar espacio.
docker rmi: borra la imagen indicada (rmi= remove image).nginx: la imagen a eliminar.
No podrás borrar una imagen si algún contenedor (aunque esté detenido) todavía depende de ella; primero elimina esos contenedores.
docker logs: Ver los Registros de un Contenedor
docker logs muestra la salida (los logs) que ha producido un contenedor. Es tu principal herramienta para saber qué está haciendo o por qué falla.
- Muestra todo lo que el contenedor ha escrito en su salida estándar.
Para seguir los registros en tiempo real:
-f(o--follow): mantiene la salida abierta y muestra las nuevas líneas a medida que aparecen, como untail -f. PulsaCtrl+Cpara salir.
docker exec: Ejecutar un Comando Dentro de un Contenedor
docker exec ejecuta un comando dentro de un contenedor que ya está en marcha. Su uso más habitual es abrir una terminal interactiva dentro del contenedor para inspeccionarlo.
docker exec: ejecuta un comando en un contenedor en ejecución.-it: combinación de dos opciones.-i(interactivo) mantiene la entrada abierta y-tasigna una terminal (TTY). Juntas te dan una shell usable.servidor_web: el contenedor de destino.sh: el comando a ejecutar (en este caso, abrir una shell). En imágenes que lo incluyan, puedes usarbash.
Una vez dentro, podrás moverte por el sistema de ficheros del contenedor, revisar archivos de configuración, etc. Escribe exit para salir.
Tabla Resumen de Comandos
| Comando | Qué hace | Ejemplo |
|---|---|---|
docker run |
Crea y arranca un contenedor | docker run -d --name web nginx |
docker ps |
Lista contenedores en ejecución (-a, todos) |
docker ps -a |
docker images |
Lista las imágenes locales | docker images |
docker pull |
Descarga una imagen del registro | docker pull postgres:16 |
docker stop |
Detiene un contenedor en marcha | docker stop web |
docker rm |
Elimina un contenedor (-f, forzado) |
docker rm web |
docker rmi |
Elimina una imagen local | docker rmi nginx |
docker logs |
Muestra los registros (-f, en vivo) |
docker logs -f web |
docker exec |
Ejecuta un comando en un contenedor en marcha | docker exec -it web sh |
Errores Comunes y Consejos
- No ver un contenedor detenido con
docker ps:docker pssolo muestra los activos. Usadocker ps -apara ver también los parados. - Confundir
rmconrmi:rmelimina contenedores;rmielimina imágenes. Recuerda que la "i" final es de image. - No poder borrar una imagen en uso: si hay contenedores que dependen de ella (aunque estén detenidos), Docker no la borra. Elimina primero esos contenedores.
- Olvidar
-dy bloquear la terminal: sin-d, el contenedor "ocupa" la terminal. Si solo querías dejarlo corriendo, usa el modo detached. - Usar
execen un contenedor detenido:docker execsolo funciona con contenedores en ejecución. Si está parado, arráncalo primero. - Consejo: puedes referirte a contenedores e imágenes por su ID, y basta con escribir los primeros caracteres si son suficientes para identificarlo de forma única (por ejemplo,
docker stop a1b2).
Ejercicios
Ejercicio 1
Descarga la imagen de nginx, arráncala en segundo plano con el nombre mi_web publicando el puerto 8080 del host hacia el 80 del contenedor y, después, comprueba que aparece en la lista de contenedores activos.
Ejercicio 2
Tienes un contenedor llamado mi_web en marcha. Muestra sus registros en tiempo real y, en otra terminal, abre una shell interactiva dentro de él.
Ejercicio 3
Detén el contenedor mi_web, elimínalo y, por último, borra la imagen nginx de tu máquina. Indica el orden correcto y por qué importa.
Soluciones
Solución 1
docker pull descarga la imagen; docker run -d la arranca en segundo plano con nombre y mapeo de puerto; docker ps confirma que el contenedor mi_web está activo. Podrás comprobarlo también abriendo http://localhost:8080.
Solución 2
En otra terminal:
docker logs -f muestra los registros en vivo (sal con Ctrl+C); docker exec -it ... sh abre una shell interactiva dentro del contenedor (sal con exit).
Solución 3
El orden importa: primero detenemos el contenedor, luego lo eliminamos y solo entonces podemos borrar la imagen. Docker no permite eliminar una imagen mientras exista un contenedor que dependa de ella, aunque ese contenedor esté detenido.
Conclusión
En esta lección hemos aprendido la estructura general de un comando de Docker y los comandos esenciales del día a día: run para crear y arrancar contenedores, ps e images para listar, pull para descargar imágenes, stop y rm para detener y eliminar contenedores, rmi para borrar imágenes, logs para ver registros y exec para entrar en un contenedor en marcha. Con esta caja de herramientas ya puedes manejar contenedores con soltura.
En la siguiente lección, Entendiendo las Imágenes de Docker, profundizaremos en el concepto de imagen: qué es exactamente, cómo se organiza en capas, su relación con los contenedores, el papel de los tags y cómo inspeccionarla con docker image inspect y docker history.
Docker: De Principiante a Avanzado
Módulo 1: Introducción a Docker
- ¿Qué es Docker?
- Instalando Docker
- Arquitectura de Docker
- Comandos Básicos de Docker
- Entendiendo las Imágenes de Docker
- Creando tu Primer Contenedor Docker
Módulo 2: Trabajando con Imágenes Docker
- Docker Hub y Repositorios
- Construyendo Imágenes Docker
- Conceptos Básicos de Dockerfile
- Gestionando Imágenes Docker
- Etiquetado y Publicación de Imágenes
Módulo 3: Contenedores Docker
- Ejecutando Contenedores
- Ciclo de Vida del Contenedor
- Gestionando Contenedores
- Redes en Docker
- Persistencia de Datos con Volúmenes
Módulo 4: Docker Compose
- Introducción a Docker Compose
- Definiendo Servicios en Docker Compose
- Comandos de Docker Compose
- Aplicaciones Multi-Contenedor
- Variables de Entorno en Docker Compose
Módulo 5: Conceptos Avanzados de Docker
- Profundización en Redes Docker
- Opciones de Almacenamiento Docker
- Mejores Prácticas de Seguridad en Docker
- Optimizando Imágenes Docker
- Registro y Monitoreo en Docker
Módulo 6: Docker en Producción
- CI/CD con Docker
- Orquestando Contenedores con Docker Swarm
- Introducción a Kubernetes
- Desplegando Contenedores Docker en Kubernetes
- Escalado y Balanceo de Carga
