Saltar al contenido principal

Ejecuta una Imagen Docker como Contenedor: Guía práctica para principiantes

Este tutorial te enseña a ejecutar con confianza imágenes Docker utilizando docker run, con ejemplos claros, consejos prácticos y consejos para solucionar problemas.
Actualizado 6 jun 2025  · 9 min de lectura

Si te preguntas cómo ejecutar una imagen Docker, no estás solo. Tanto si acabas de extraer una imagen de Docker Hub como si has creado una tú mismo, ejecutarla es el paso clave que da vida a tu aplicación.

Este tutorial es tu guía para principiantes sobre el comando docker run y mucho más. Aprenderás:

  • Qué son realmente las imágenes Docker y los contenedores.
  • Cómo ejecutar una imagen utilizando diferentes opciones.
  • Y cómo detener, eliminar y solucionar problemas de los contenedores como un profesional.

Al final, te sentirás seguro lanzando tus propios contenedores y comprendiendo exactamente lo que ocurre bajo el capó.

Comprender las imágenes Docker y los contenedores

Antes de entrar en los ejemplos de comandos, vamos a entender las imágenes Docker y los contenedores en términos sencillos.

Si ya estás familiarizado con estos términos, ¡no dudes en pasar a la siguiente sección!

¿Qué es una imagen Docker?

Una imagen Docker es un plano inmutable de tu aplicación. Define todo lo que necesita tu contenedor: el código, las bibliotecas, el entorno y las configuraciones. Una vez que tengas una imagen, puedes utilizarla para hacer girar un contenedor o cien. Siempre se mantiene constante.

Entonces, ¿de dónde vienen las imágenes? Dockerfile los construye. Un Dockerfile es donde defines qué imagen base utilizar, qué dependencias instalar y cómo debe ejecutarse tu aplicación.

Una vez que tu Dockerfile esté listo, ejecuta el comando docker build. Este comando sigue los pasos del archivo y los convierte en una imagen reutilizable.

¿Qué es un contenedor Docker?

Un contenedor Docker es la versión activa de una imagen Docker. Permite que tu aplicación se ejecute en su propio entorno aislado, garantizando un comportamiento coherente independientemente del sistema anfitrión. 

Sigue el enfoque "compila una vez, ejecuta en cualquier lugar", para que no tengas que configurar manualmente el entorno cada vez. 

Imagen frente a contenedor

En la tabla siguiente se comparan una imagen y un contenedor:

Imagen

Contenedor 

Una imagen es un paquete estandarizado que incluye todos los archivos, binarios, bibliotecas y configuraciones para ejecutar un contenedor.

Una instancia en tiempo de ejecución de una imagen.

Una imagen es inmutable. Eso significa que no puede cambiar hasta que se reconstruya.

El contenedor es mutable. Puedes modificarlo mientras se está ejecutando, instalar nuevos paquetes o cambiar los archivos de configuración.

Un Dockerfile (conjunto de instrucciones para construir una imagen) crea una imagen.

Una imagen crea un contenedor.

Tu ordenador almacena archivos de imagen.

Un contenedor se ejecuta en tu memoria.

Si eres nuevo en la contenedorización, nuestro curso Introducción a Docker te guía a través de los conceptos básicos con ejemplos prácticos.

El comando docker run

Cuando ejecutas el comando docker run, le estás diciendo a Docker que ponga en marcha un nuevo contenedor basado en una imagen.

En términos sencillos, estás lanzando un programa dentro de un entorno aislado. Ese programa puede ser cualquier cosa, una simple aplicación web o un servicio completo con múltiples procesos. 

Sintaxis básica

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  • [OPTIONS] - Banderas adicionales para personalizar cómo se ejecuta el contenedor
  • IMAGE - El nombre de la imagen Docker 
  • [COMMAND] - (Opcional) Anula el comando por defecto de la imagen.
  • [ARG...]- (Opcional) Argumentos.

Banderas y opciones comunes

  • -d: Modo independiente: ejecuta los contenedores en segundo plano
  • -p: Asignación de puertos: Para acceder a un servicio (como una API o una aplicación web) desde tu navegador, necesitas exponer un puerto. Ejemplo: -p 3000:3000 asigna el puerto 3000 de tu máquina al puerto 3000 del contenedor.
  • --name: Docker da al contenedor un nombre por defecto, pero puedes utilizar esta bandera para darle un nuevo nombre.
  • -v:  Se utiliza para mantener los datos separados del propio contenedor, asegurando que permanezcan aunque el contenedor se detenga o se elimine.
  • --rm: Cuando el contenedor se detiene, esta bandera lo borra automáticamente.
  • -e: Utilízalo para introducir contraseñas de bases de datos o claves API sin codificarlas en tu aplicación.

Ejecutar contenedores interactivos frente a independientes

Docker ejecuta los contenedores de dos formas: en modo interactivo (-it) y en modo separado (-d). Cada modo tiene casos de uso específicos en función de tus objetivos. 

  • -it: Modo interactivo: Si quieres trabajar directamente dentro de un contenedor utilizando el terminal, puedes utilizar la bandera -it. Pone el contenedor en modo interactivo, para que puedas escribir comandos, ver la salida y trabajar en tiempo real.
    • -i: Mantiene abierta la entrada para que puedas escribir comandos en el contenedor
    • -t: Te proporciona una interfaz similar a un terminal dentro del contenedor
  • -d: Modo independiente: Ejecuta el contenedor en segundo plano, de modo que tu terminal queda libre para otras tareas. 

Mantén los comandos clave y las mejores prácticas al alcance de tu mano con nuestra Hoja de trucos de Docker para la Ciencia de Datos.

Extraer y ejecutar imágenes Docker

Ahora que conoces la sintaxis del comando docker run, esta sección te mostrará cómo crear imágenes personalizadas y ejecutarlas.

Utilizar imágenes de Docker Hub

Docker Hub es como una biblioteca online de imágenes de contenedores. Puedes utilizar las que ya están creadas o subir las tuyas para compartirlas con los demás. Admite repositorios públicos y privados, para que puedas compartir imágenes abiertamente con la comunidad o implantar controles de acceso para tus equipos internos.

Ejecutar imágenes personalizadas 

Para ejecutar una imagen Docker, primero tendrás que construirla utilizando un archivo Dockerfile. Luego, puedes ejecutarlo localmente o enviarlo al Docker Hub para compartirlo. 

Así que, primero vamos a crear un Dockerfile. Aquí tienes una muestra:

# Use official Python base image
FROM python:3.11-slim
# Set working directory in the container
WORKDIR /app
# Copy requirements file and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy the rest of the app code
COPY . .
EXPOSE 5000
# Set default command
CMD ["python", "app.py"]

¿Qué significa el Dockerfile anterior?

  • FROM python:3.11-slim: imagen base con la versión Python 3.11
  • WORKDIR /app: Establece /app como directorio de trabajo dentro del contenedor.
  • COPY requirements.txt . mueve todas las dependencias de la máquina local al directorio de aplicaciones del contenedor.
  • RUN pip install --no-cache-dir -r requirements.txt: instala las dependencias en requirements.txt.
  • COPY . . : copia el código del directorio de trabajo actual (aplicaciones, archivos de configuración y otros) en el directorio de aplicaciones del contenedor.
  • CMD ["python", "app.py"]: ejecuta app.py al iniciar un contenedor desde esta imagen.

Paso 1. Construir Dockerfile 

Veamos qué ocurre cuando construyes este Dockerfile.

  • Ejecuta el siguiente comando:
docker build -t my-python-app .

Nota: Para que este comando funcione, primero debes tener Docker configurado en tu sistema; esta guía te ayuda a hacerlo.

Imagen que muestra los resultados de la ejecución de docker build -t my-python-app en el terminal.

Esto es lo que ocurre entre bastidores cuando ejecutas el comando de compilación:

  1. Docker lee el archivo Dockerfile
  2. La imagen base de Python se extrae de Docker Hub
  3. El directorio de trabajo se establece en /app.
  4. El requirements.txt se copia en el contenedor.
  5. Las dependencias se instalan utilizando pip install.
  6. El resto de tu código se copia en /app.
  7. La imagen final está etiquetada como my-python-app.

Paso 2: Ejecutar Dockerfile

Una vez construida tu imagen, puedes ejecutarla utilizando:

docker run -p 5000:5000 my-python-app

Esto es lo que ocurre cuando lo ejecutas 

  • Se crea un nuevo contenedor a partir de tu imagen personalizada, my-python-app.
  • El puerto 5000 de tu máquina está asignado al puerto 5000 del contenedor (-p 5000:5000).
  • La página CMD ["python", "app.py"] se ejecuta y ejecuta la app.
  • El contenedor se ejecuta en segundo plano gracias a la opción -d (modo separado).

En este punto, puedes visitar http://localhost:5000 en tu navegador, y verás algo como lo siguiente, lo que significa que tu aplicación se está ejecutando:

Captura de pantalla de un navegador en http://localhost:5000 mostrando un mensaje "¡Hola desde Docker!".

Si trabajas en machine learning, estas mejores imágenes Docker para ML e IA puedenacelerar la configuración de tu entorno.

Ejecutar imágenes con configuración

Para algunas aplicaciones, puede que necesites ejecutar imágenes con una configuración específica. He aquí dos ejemplos comunes.

Datos persistentes

Los contenedores almacenan datos temporalmente. Una vez que los eliminas, los datos desaparecen. Un volumen es una forma de almacenar datos fuera del contenedor para que persistan aunque se elimine o reinicie el contenedor.

Para montar un volumen, tienes que ejecutar un comando como el siguiente:

docker run -v my-volume:/app/data my-image

Los datos escritos en /app/data se guardan en el volumen incluso después de retirar el contenedor.

Pasar variables de entorno

Las variables de entorno pasan ajustes de configuración a un contenedor Docker en tiempo de ejecución. Esto personaliza tus contenedores Docker sin modificar tus imágenes Docker. 

Tienes dos formas de pasar variables de entorno: 

  1. Puedes pasar variables de entorno utilizando el parámetro -e. Aquí tienes un comando de ejemplo:
docker run -e ENV=production -e DEBUG=False my-image
  1. Puedes crear un archivo .env con todas las variables de entorno y pasárselo al comando. He aquí un ejemplo:
docker run --env-file .env my-image

Ejemplo de archivo .env:

ENV=staging
DEBUG=True
SECRET_KEY=mysecret

Gestionar contenedores en ejecución

Una vez que un contenedor se está ejecutando, puedes verlo, detenerlo y acceder a él. Veamos cómo hacerlo.

Ver contenedores activos

Para listar todos los contenedores Docker activos que se están ejecutando en tu sistema, ejecuta el comando docker ps o docker container ls. Este comando muestra el ID del contenedor, la imagen, el comando, el puerto, el estado y otros detalles.

docker ps
# or
docker container ls

Para incluir todos los contenedores, no sólo los que están en ejecución, como los que salieron o se crearon pero no se iniciaron, utiliza la bandera -a:

docker ps -a

Para ver sólo el contenedor creado más recientemente, utiliza la bandera -l (último):

docker ps -l

Si quieres ver todos los contenedores ordenados por hora de creación, con los más recientes en primer lugar, ejecuta

docker ps -a --sort=created

Parar y retirar contenedores

Para detener un contenedor concreto en ejecución, utiliza el comando docker stop seguido del ID o nombre del contenedor:

docker stop <container_id_or_name>

Para detener todos los contenedores en ejecución, utiliza

docker stop $(docker ps -q)
  • $(docker ps -q) devuelve una lista de todos los ID de contenedor en ejecución.

Una vez detenido un contenedor, puedes eliminarlo utilizando:

docker rm <container_id_or_name>

Para eliminar todos los contenedores parados, ejecuta

docker container prune

Para ir más allá y eliminar contenedores, volúmenes, redes e imágenes no utilizados, consulta la guía de poda de Docker.

Acceder a los registros del contenedor y al terminal

  • docker logs - El comando docker logs recupera por lotes los logs presentes en el momento de la ejecución.
  • docker exec - docker exec te permite ejecutar un nuevo comando dentro de un contenedor existente en ejecución sin detenerlo ni reiniciarlo. Piensa en ello como si abrieras un nuevo terminal dentro de tu contenedor, para poder husmear, ejecutar scripts, comprobar registros o depurar.
  • docker attach - docker attach conecta tu terminal directamente al proceso principal de un contenedor en ejecución. Esto significa que puedes ver la salida en vivo del contenedor (registros, avisos, etc.) e incluso interactuar con él si el proceso acepta entradas.

Solución de problemas comunes

Soluciones sencillas a problemas comunes. He aquí algunos errores comunes durante la ejecución de imágenes Docker y cómo puedes abordarlos. 

Error 1: "Respuesta de error del demonio: acceso pull denegado para alpine-python, el repositorio no existe o puede requerir 'docker login': denegado: se deniega el acceso solicitado al recurso".

  • Lo que significa: Docker ha intentado extraer una imagen, en este caso la imagen alpine-python de Docker Hub, pero la imagen o no existe o es privada, y no estás autenticado.
  • Cómo arreglarlo:
    • Vuelve a comprobar el nombre y la etiqueta de la imagen en Docker Hub.
    • Si es una imagen privada, ejecuta docker login para autentificarte.
    • Asegúrate de que la imagen existe si la extraes de un registro personalizado.

Error 2: "No se ha encontrado dicha imagen: <nombre de la imagen>:<etiqueta>"

  • Lo que significa: Has intentado ejecutar o etiquetar una imagen localmente, pero la imagen (o la etiqueta especificada) no está disponible en tu sistema.
  • Cómo arreglarlo:
    • Utiliza docker images paracomprobar las imágenes disponibles.
    • Tira de la imagen explícitamente:
docker pull <image-name>:<tag>

Error 3: "manifiesto para <imagen>:<etiqueta> no encontrado: manifiesto desconocido: El manifiesto nombrado no es conocido por el registro".

  • Lo que significa: Este error se produce probablemente cuando la imagen o etiqueta especificada no existe.
  • Posibles soluciones: Estos consejos deberían solucionar la mayoría de los errores comunes: 
    • Comprueba que la imagen y el nombre de la etiqueta son correctos.
    • Consulta las etiquetas de la imagen en Docker Hub o en tu registro personalizado.
    • Utiliza docker pull : para obtener una versión válida.
    • Si construyes localmente, utiliza un Dockerfile correcto y construye la imagen con:
docker build -t <image>:<tag> .

Conflictos de puertos y fallos de enlace

Los conflictos de puertos se producen cuando varios contenedores o un contenedor y otra aplicación intentan acceder al mismo puerto.

  • Cómo arreglarlo:
    • Utiliza un puerto de host diferente cuando ejecutes tu contenedor:
docker run -p 8081:80 <image>
  • Detén el servicio que actualmente utiliza el puerto.
  • Identifica con qué está utilizando un puerto (por ejemplo, 8080):
lsof -i :8080

Conclusión 

Ejecutar una imagen Docker es uno de los pasos más importantes y potentes en el uso de contenedores, tanto si estás poniendo en marcha un simple servidor web como desplegando una aplicación compleja. Con unos pocos comandos como docker run, docker ps, y docker stop, ya estás equipado para lanzar, gestionar y solucionar problemas de contenedores con confianza.

Si estás preparado para ir más allá, prueba a crear tu propia imagen con un Dockerfile, explora las banderas avanzadas de docker run o aprende a gestionar varios contenedores con Docker Compose.

Echa un vistazo a estos cursos para continuar tu viaje Docker:

Domina Docker y Kubernetes

Aprende el poder de Docker y Kubernetes con una pista interactiva para construir y desplegar aplicaciones en entornos modernos.
Empezar pista gratis

Preguntas frecuentes

¿Puedo ejecutar varios contenedores desde la misma imagen Docker?

Sí, puedes ejecutar varios contenedores desde la misma imagen. Cada contenedor está aislado y puede tener sus propias configuraciones, puertos y variables de entorno.

¿Cómo paso secretos o claves API de forma segura a un contenedor Docker?

Utiliza la bandera -e para establecer variables de entorno o utiliza un archivo .env y --env-file para pasar secretos en tiempo de ejecución sin codificarlos.

¿Cómo puedo ejecutar una imagen Docker en segundo plano?

Utiliza la bandera -d con docker run para iniciar el contenedor en modo separado, permitiendo que el terminal permanezca disponible para otros comandos.

¿Cuál es la diferencia entre docker exec y docker attach?

 docker exec abre una nueva sesión de terminal dentro del contenedor, mientras que docker attach se conecta al proceso principal del contenedor y a su salida en vivo.

¿Por qué aparece "acceso pull denegado" al ejecutar una imagen?

Esto suele significar que la imagen es privada o está mal escrita. Comprueba el nombre, la etiqueta y asegúrate de que has iniciado sesión en Docker Hub con docker login.

¿Cómo persisto los datos en un contenedor después de que se detenga?

Utiliza la bandera -v para montar un volumen, asegurándote de que los datos se almacenan fuera del contenedor y permanecen intactos incluso después de retirar el contenedor.

¿Cuál es la mejor manera de ejecutar un contenedor con fines de desarrollo?

Utiliza las banderas -it para el modo interactivo, junto con el montaje de volúmenes y las variables de entorno para simular un entorno de desarrollo local.

¿Cómo puedo saber qué puertos están en conflicto en mi máquina?

Utiliza lsof -i : para identificar qué proceso está utilizando un puerto concreto y, a continuación, deténlo o utiliza un puerto host distinto para tu contenedor.

¿Cómo puedo ver los registros de un contenedor Docker en ejecución?

Utiliza el comando docker logs para recuperar y revisar los registros de los flujos de salida estándar y de error del contenedor.


Srujana Maddula's photo
Author
Srujana Maddula
LinkedIn

Srujana es una redactora técnica autónoma con una licenciatura de cuatro años en Informática. Escribir sobre diversos temas, como la ciencia de datos, la computación en la nube, el desarrollo, la programación, la seguridad y muchos otros, le resulta natural. Le encanta la literatura clásica y explorar nuevos destinos.

Temas

¡Aprende más sobre Docker con estos cursos!

Programa

Containerization and Virtualization with Docker and Kubernetes

0 min
Learn the power of Docker and Kubernetes, this interactive track will allow you to build and deploy applications in modern environments.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

Tutorial

Cómo instalar y configurar MySQL en Docker

Aprende a instalar y configurar la base de datos MySQL dentro de contenedores Docker. El tutorial incluye conceptos como conectarse a servidores MySQL, ejecutar clientes MySQL para conectarse a contenedores, etc.
Bex Tuychiev's photo

Bex Tuychiev

12 min

Tutorial

Tutorial de GitHub y Git para principiantes

Un tutorial para principiantes que muestra cómo funciona el control de versiones Git y por qué es crucial para los proyectos de ciencia de datos.
Abid Ali Awan's photo

Abid Ali Awan

9 min

Tutorial

Tutorial de Git Revert y Git Reset para principiantes

Una guía tutorial para principiantes que muestra cómo utilizar los comandos Git Revert y Reset.
Zoumana Keita 's photo

Zoumana Keita

10 min

Tutorial

Tutorial sobre cómo instalar R en Windows, Mac OS X y Ubuntu

Esta es una guía para principiantes diseñada para ahorrarte dolores de cabeza y un tiempo valioso si decides instalar R tú mismo.
Francisco Javier Carrera Arias's photo

Francisco Javier Carrera Arias

6 min

Tutorial

Cuentas de almacenamiento Azure: Tutorial paso a paso para principiantes

Esta guía te enseña a configurar y gestionar las Cuentas de Almacenamiento de Azure, paso a paso. También explora opciones avanzadas de configuración para un rendimiento óptimo y una optimización de costes.
Anneleen Rummens's photo

Anneleen Rummens

11 min

Tutorial

Cómo escribir un Bash Script: Un sencillo tutorial de Bash Scripting

Descubre los fundamentos de las secuencias de comandos bash y aprende a escribir una secuencia de comandos bash.
Kurtis Pykes 's photo

Kurtis Pykes

5 min

Ver másVer más