Dominar la gestión de contenedores es esencial cuando trabajas con Docker, especialmente si ejecutas múltiples instancias de una misma aplicación. Aquí aprenderás los comandos clave para administrar contenedores con confianza y eficiencia, desde su creación hasta la revisión de estadísticas en tiempo real.
¿Cómo crear contenedores con distintos puertos usando Docker?
Cuando necesitas varias instancias de una misma imagen en tu sistema Docker, lo crucial es modificar el puerto que utilizan. Esto evita conflictos entre contenedores activos simultáneamente:
Usa el comando básico:
docker run -it --rm -d -p 8080:número -name nombreImagen aminEspinosa/sitioWeb:1.0
Cambia el puerto inicial (por ejemplo, de 8080 a 8085) cada vez que vayas a crear una nueva instancia.
Actualiza el nombre del contenedor correspondiente al puerto elegido para distinguir las instancias claramente.
Al hacer esto correctamente, podrás ejecutar múltiples contenedores simultáneos de una misma imagen sin solapamientos.
¿Qué información muestra el comando Docker PS?
El comando docker ps presenta de forma resumida y práctica información esencial sobre los contenedores activos:
Container ID: identificador único del contenedor.
Imagen: nombre de la imagen que se utiliza.
Estatus: indica "up" si está activo y funcionando sin problemas.
Puertos: mapeo de puertos del contenedor al entorno local.
Nombres: identificación dada al contenedor para su manejo interno.
Para ver aún más detalles, puedes complementar el comando con dos opciones adicionales:
docker ps -a: muestra todos los contenedores creados, incluidos aquellos que ya no están activos.
docker ps --size: añade una columna adicional mostrando el tamaño real de cada contenedor, útil para control de recursos.
¿Cómo monitorear el consumo de recursos de los contenedores Docker?
Observar cómo consumen recursos tus contenedores en ejecución es fundamental para una gestión efectiva. Existen dos maneras prácticas:
Monitoreo mediante Docker Desktop
Ingresa a Docker Desktop y selecciona tu contenedor activo.
Dirígete a la pestaña "Estadísticas" para ver en tiempo real gráficos sobre:
Uso del CPU.
Memoria consumida.
Actividad de red y discos.
Comando Docker Stats
Escribe el comando docker stats en la terminal para obtener un resumen rápido y tabular del consumo de recursos de cada contenedor activo. Esto es especialmente útil para monitorear continuamente el rendimiento desde tu línea de comandos.
docker stats
Utilizar estas herramientas te proporcionará una excelente visibilidad sobre cómo están operando tus contenedores y permitirá tomar decisiones informadas sobre su gestión eficiente.
Te invitamos a continuar explorando las capacidades avanzadas de Docker y a aprovechar al máximo su documentación oficial para optimizar tus recursos técnicos. ¿Has tenido ya experiencia creando múltiples instancias? Comparte tus comentarios y aprendizajes aquí abajo.
Crea y ejecuta un contenedor a partir de una imagen, con un nombre personalizado:
docker run --name <nombre_contenedor> <nombre_imagen>
Ejecutar un contenedor con y publicar un puerto(s) del contenedor al host.
docker run -p <puerto_host>:<puerto_contenedor> <nombre_imagen>
Ejecutar un contenedor en segundo plano
docker run -d <nombre_imagen>
Iniciar o detener un contenedor existente:
docker start|stop <nombre_del_contenedor> (o <id_del_contenedor>)
Eliminar un contenedor detenido:
docker rm <nombre_del_contenedor>
Abrir un shell dentro de un contenedor en ejecución:
docker exec -it <nombre_del_contenedor> sh
Obtener y seguir los logs de un contenedor:
docker logs -f <nombre_contenedor>
Inspeccionar un contenedor en ejecución:
docker inspect <nombre_del_contenedor> (o <id_del_contenedor>)
Para listar los contenedores actualmente en ejecución:
docker ps
Listar todos los contenedores docker (en ejecución y parados):
docker ps --all
Ver las estadísticas de uso de recursos
docker container stats
Gracias :)
Mis Contenedores corriendo desde mi Raspberry Pi
Servidor Samba
Plex
Trasmitions
Flexget
Pihole
Wireguard
Update de mis contenedores !!
docker run: Comando para ejecutar un contenedor.
-it: Indica que se desea abrir una terminal interactiva dentro del contenedor.
--rm: Elimina el contenedor automáticamente después de detenerlo.
-d: Ejecuta el contenedor en segundo plano (modo detached).
-p 8080:80: Mapea el puerto 8080 del host al puerto 80 del contenedor. Esto significa que si accedes a localhost:8080 en tu máquina, se redirigirá al puerto 80 dentro del contenedor.
--name web: Asigna el nombre "web" al contenedor.
sitioweb: Es el nombre de la imagen que se utilizará para crear el contenedor.
Considero importante hacer 2 precisiones acerca de esta clase:
· En mi opinión la pregunta del Minuto 1:22 está mal formulada, ya que se pide crear una segunda instancia de la misma imagen, sin que esta se sobreponga a la desplegada en el contenedor, pero en la explicación esto no se resuelve instanciando la imagen sino el contenedor. Esto se confirma porque en la explicación nunca se crea una imagen diferente a aminespinoza/sitioweb:1.0, sino que se ejecutan dos procesos distintos en los que se instancia el contenedor a partir de dicha imagen.
· En el minuto 5:21 de esta clase se menciona que el primer dato de la columna SIZE, indica que el contenedor web85 está ocupando 1.09KB y que en el entorno virtual el tamaño real de dicho contenedor es de 187MB. Este concepto se refuerza diciendo que se trata de una diferencia de tamaños cuyo valor relevante es el del entorno virtual, ya que dicho valor es el que se utilizará, cada vez que se ejecute un contenedor.
Lo anterior no es del todo correcto, ya que los dos datos que muestra la columna SIZE representan lo siguiente:
El 1.09KB es el tamaño del contenedor, lo cual representa el espacio en disco usado por los cambios realizados dentro del contenedor desde que se creó a partir de la imagen base. Si no se han hecho modificaciones dentro del contenedor (por ejemplo, no se ha agregado archivos ni instalado paquetes), este valor suele ser pequeño.
El 187MB corresponde al tamaño virtual y representa el tamaño total de la imagen base (aminespinoza/sitioweb:1.0) utilizada por el contenedor, por lo que este valor es el mismo para todos los contenedores creados a partir de esa imagen, debido a que comparten la misma capa base.
Algo que noté en docker a discrepancia del videl es que cuando utiizo el comando:
Docker stop <nombredelcontenedor>```El contenedor no desaparece o elimina del todo solo queda en espera.
para eliminar por completo tendria que usar el siguiente comando luego de haberlo puesto en stop.
```js
Docker rm <nombreDelContenedor>
nota: si no sabes cual es el id o nombre del contenedor a borrar puedes mirarlo con:
Docker ps -a
Por lo que vemos podemos detener y activar contenedores, pero cuando se detienen el contenedor ya no sale cuando ponemos el comando ps como sabemos el id del contenedor para volverlo a activar ?
y la otra duda detenerlo no es lo mismo que borrarlo, pero probando si al crear el contenedor ponemos la funcion --rm cuando lo detenemos ya no es posible activarlo de nuevo es como que se borra en automatico y cuando creamos el contenedor sin el rm si lo podemos volver a activar pero tambien cuando lo detenemos si queremos borrarlo debemos borrarlo con el comando rm por que no se hace en automatico. por lo que no estoy seguro como es el proceso, si alguien lo sabe me lo puedes aclarar gracias
Por lo que vi con el comando docker ps -a salen los contenedores detenidos
¿Por qué el contenedor no aparece en docker ps cuando está detenido?
Cuando ejecutas docker ps, el comando muestra únicamente los contenedores en ejecución. Para ver los contenedores detenidos también, puedes usar el comando docker ps -a. Esto te mostrará todos los contenedores, incluidos los que están detenidos.
Al ver la lista completa de contenedores (con docker ps -a), puedes encontrar el ID del contenedor que deseas volver a activar.
excelente curso
Si deseas ver las estadísticas de un solo contenedor entre varios en ejecución, puedes especificar el nombre o el ID del contenedor en el comando docker stats.
docker stats <container_name_or_id>
Desplegar dos instancias del mismo servicio, basta con cambiar puerto y el nombre
justo eso pensé... el usar el mismo puerto causaría errores.
4:25 El status te dice "op".
Al final, el mejor lenguaje para aprender es el inglés
asi se pronuncia "up", si, el mejor lenguaje para aprender es el inglés
La vida útil de un contenedor Docker está relacionada con su estado de ejecución. Un contenedor existe únicamente mientras está en funcionamiento. Cuando se detiene, deja de estar activo, pero los datos persistentes pueden mantenerse si se utilizan volúmenes. Puedes crear y destruir contenedores a tu conveniencia, lo que permite un manejo ágil de recursos y aplicaciones. Al finalizar su uso, los contenedores pueden eliminarse para liberar espacio.
En mi caso para desplegar una segunda instancia de la misma imagen, sin que se sobreponga.
Lo que hice fue cambiar el puerto a 8081 y el name de container, lo llame webAlternativa
docker run -it --rm -d -p 8081:80 --name webAlternativa sitioweb15:1.0
Crea y ejecuta un contenedor a partir de una imagen, con un nombre personalizado:
docker run --name \<nombre\_contenedor> \<nombre\_imagen>
Ejecutar un contenedor con y publicar un puerto(s) del contenedor al host.
docker run -p \<puerto\_host>:\<puerto\_contenedor> \<nombre\_imagen>
🚀 Administración de Contenedores con Docker: De la Imagen al Control Total
A continuación encontrarás un desglose estructurado con ejemplos y recomendaciones que condensan todo el aprendizaje.
📦 De Imágenes a Contenedores
Una imagen Docker es el punto de partida, pero para que cobre vida necesitamos convertirla en un contenedor. Esto se logra con el comando docker run, el cual puede incluir parámetros como:
-it: modo interactivo.
--rm: elimina el contenedor al detenerlo.
-d: ejecución en segundo plano (detached).
-p: mapeo de puertos entre host y contenedor.
--name: asignación de nombre único al contenedor.
Ejemplo aplicado:
Se ejecuta la imagen aminospinoza/sitio-web:1.0 exponiendo el puerto 8080.
Resultado: un contenedor accesible desde http://localhost:8080.
🔄 Ejecutar Múltiples Instancias sin Conflictos
Para crear segundas instancias de la misma imagen es clave modificar dos parámetros:
Puerto: cambiar el 8080 inicial por otro, como 8085, para evitar colisiones de red.
Nombre del contenedor: cada contenedor necesita un identificador único. Una convención práctica es incluir el puerto en el nombre, por ejemplo sitio-web-85.
De este modo, múltiples contenedores pueden correr la misma aplicación en paralelo sin interferencias.
📝 Explorando Contenedores con docker ps
El comando docker ps ofrece una vista del estado de los contenedores:
Container ID: identificador único por instancia.
Image: imagen de origen (misma para varios contenedores).
Command: instrucciones que mantienen vivo el contenedor.
Status: “Up” confirma que está en ejecución.
Ports: mapeo host ↔ contenedor, clave para gestión de accesos.
Name: el alias del contenedor.
Con docker ps -a también puedes listar contenedores detenidos.
Con docker ps --size, se agrega el uso de espacio real, revelando la diferencia entre consumo aparente (KB) y real (MB) de los contenedores.
⏹️ Gestión de Recursos: Detener y Eliminar Contenedores
Para optimizar recursos, detener contenedores es esencial:
Comando clave:docker stop container_id
Esto elimina al contenedor de la lista activa (docker ps), aunque puede seguir visible en Docker Desktop como detenido.
En entornos productivos, este hábito evita desperdiciar memoria y CPU en instancias que no aportan valor en ese momento.
📊 Monitoreo del Rendimiento
La gestión de contenedores no termina al ejecutarlos. Es vital monitorear su comportamiento en tiempo real.
Opciones disponibles:
Docker Desktop (gráficas): permite ver consumo de CPU, RAM y red de forma visual.
Ejemplo: refrescar varias veces http://localhost:8085 muestra un cambio inmediato en las gráficas de carga.
Docker stats (terminal): despliega un resumen tabular con métricas clave de uso de recursos.
Es exportable y más ágil para integraciones en pipelines de monitoreo.
🔁 El Ciclo Completo: De la Construcción a la Gestión
El recorrido de esta práctica cubre todo el ciclo de vida de un contenedor:
Construcción de Dockerfile.
Creación de una imagen.
Ejecución de un contenedor.
Administración: listar, detener, monitorear y gestionar instancias.
La recomendación final es clara: la práctica constante es el mejor método para dominar estas herramientas, tanto en terminal como en Docker Desktop.
✅ Conclusión y Recomendaciones
Usa nombres y puertos diferenciados para múltiples instancias.
Familiarízate con docker ps, sus variantes y docker stats para tener control operativo.
Integra el hábito de detener contenedores inactivos y optimizar recursos.
Combina la visión gráfica de Docker Desktop con la agilidad de la línea de comandos.
Recurre siempre a la documentación oficial de Docker para descubrir parámetros adicionales.
Al final, administrar contenedores no solo consiste en ejecutarlos, sino en orquestarlos de manera eficiente, garantizando estabilidad, rendimiento y un uso racional de los recursos.
Gracias por esta informacion valiosa compañero
Otra pregunta al usar docker stop desaparece el contenedor tanto de CLI como de Docker Desktop y aún colocando el comando docker ps -a el contenedor no aparece, intenté colocar el comando docker start con el mismo id del stop pero genera un error de que no se puede iniciar ese contenedor, entonces mi pregunta es ¿ docker stop elimina el contenedor? si no lo elimina ¿cómo se puede recuperar o visualizar de nuevo?, agradezco quien pueda responderme.
Si a alguien le sirve, busqué la solución a esta pregunta con ChatGPT y logre obtener la siguiente respuesta:
Si el contenedor no aparece al usar docker ps -a, es probable que haya sido eliminado accidentalmente. Aquí hay algunas posibles razones:
Eliminación manual o automática: Puede que se haya ejecutado accidentalmente un comando como docker rm que elimina el contenedor, o un contenedor creado con la opción --rm, la cual lo elimina automáticamente después de detenerse(Docker Documentation)(IOFlood).
Uso dedocker prune: Si alguien ejecutó docker system prune, esta operación limpia contenedores detenidos, imágenes no utilizadas, y volúmenes que no están en uso, lo que podría haber eliminado el contenedor.
Fallos en el sistema: Un fallo en Docker o el sistema operativo podría haber causado la desaparición del contenedor.
Para nuestro caso efectivamente al crear el contenedor utilizamos la opción --rm por lo que efectivamente al detener el contenedor este se elimina automáticamente.
No, el comando docker stop no elimina el contenedor; solo detiene su ejecución. Sin embargo, lo que describes podría deberse a la configuración y a la bandera --rm (que mencionaste anteriormente)
Estas imagenes publicadas en el Hub son de acceso publico? No es riesgoso? Se puden establecer contraseñas? Gracias
Es correcto, todas las imágenes que publicas en el Docker Hub son públicamente accesibles, no puedes agregar ningún candado de seguridad como contraseñas ni nada, sin embargo, lo que si puedes es usar un registro de contenedores privado. Todos los proveedores de nube cuentan con uno y de hecho también el Hub de Docker puede ser privado pero cuando estás pagando por ese servicio.
Buena pregunta
# Crear y ejecutar un contenedor: # -i (interactivo), -t (terminal), --rm (eliminar al salir), -d (modo detached/fondo) # -p (mapeo de puertos: hostPort:containerPort), --name (nombre del contenedor) docker run -it --rm -d -p 8080:número --name nombreImagen aminEspinosa/sitioWeb:1.0 # Mostrar solo los contenedores activos docker ps # Mostrar todos los contenedores (activos e inactivos) docker ps -a # Mostrar todos los contenedores con su tamaño real docker ps --size # Monitorear el consumo de recursos de los contenedores activos en tiempo real docker stats
Pausa para la pregunta:
Para desplegar la miisma imagen en otreo contenedor. seria servirla en otro puerto?
ME falto poner otro nombre al contenedor:
Entonces:
DOs instancias con la misma imagen:
- cambio de contenedor
- cambio de puerto