📦 Contenedores
Un contenedor es una unidad estándar de software que empaqueta el código y todas sus dependencias, permitiendo que una aplicación se ejecute de manera rápida y consistente en cualquier entorno. Gracias a su aislamiento, cada contenedor funciona independientemente del host y otros contenedores.
🔹 Características principales:
✔ Aislamiento → Cada contenedor opera de manera independiente, con su propio sistema de archivos, versión del sistema operativo y recursos de procesamiento.
✔ Eficiencia → A diferencia de las máquinas virtuales, los contenedores comparten el mismo kernel del sistema operativo del host, lo que los hace más ligeros y rápidos.
✔ Portabilidad → Se pueden ejecutar en cualquier sistema con Docker sin preocuparse por problemas de compatibilidad.
Diferencia con Máquinas Virtuales:
| Característica | Contenedores Docker 🚀 | Máquinas Virtuales 🖥️ |
|---|---|---|
| Aislamiento | Parcial (comparten el kernel del host) | Completo (cada VM tiene su propio sistema operativo) |
| Peso | Ligero (solo contiene la aplicación y dependencias) | Pesado (requiere SO completo) |
| Velocidad de arranque | Segundos | Minutos |
| Consumo de recursos | Bajo | Alto |
🏗️ ¿Cómo se crea un contenedor?
Para crear un contenedor, se necesita una imagen. La imagen es el punto de partida y contiene:
🔹 El sistema operativo base
🔹 Las librerías necesarias
🔹 Los archivos de la aplicación
Si deseas saber más sobre las imágenes, puedes leer más en 🖼️ Imágenes.
🔹 Ejemplo práctico:
Supongamos que tenemos una aplicación web que necesita:
✅ Un servidor web (Apache o Nginx).
✅ Un entorno de ejecución de PHP.
En lugar de instalar PHP y el servidor web directamente en el host, podemos utilizar dos contenedores de Docker:
1️⃣ Contenedor con PHP
2️⃣ Contenedor con el servidor web
Estos contenedores se comunican entre sí, pero permanecen aislados del sistema host, lo que evita problemas de compatibilidad y facilita la gestión de dependencias.
🛠️ Comandos para gestionar contenedores:
📌 Crear un contenedor
Docker create <la imagen>
Si descargamos una imagen desde DockerHub, Docker descargará tanto la imagen como el contenedor asociado.

📌 Añadir un nombre
docker create --name <nombre_del_contenedor> <imagen>
📌 Listar contenedores incluso las que están paradas
docker ps -a

📌 Crear y ejecutar un contenedor (con Docker pull si no se ha descargado)
docker run <nombre del contenedor>

📌 Iniciar y acceder a la terminal del contenedor
docker exec -it docker_name> /bin/bash

📂 Modificar archivos dentro del contenedor:
1️⃣ Descargar un archivo del contenedor a tu máquina local
docker cp <nombre_del_contenedor>:<ruta_del_contenedor> <ruta_local>
Ejemplo:
Si quieres traer el archivo /var/log/syslog al directorio /root en el host, el comando sería:
docker cp <nombre_del_contenedor>:/var/log/syslog /root
2️⃣ Subir el archivo editado de vuelta al contenedor
docker cp <ruta_local> <nombre_del_contenedor>:<ruta_del_contenedor>
Ejemplo:
Si editaste el archivo syslog en tu host y lo deseas subir al contenedor, usarías:
docker cp /root/syslog <nombre_del_contenedor>:/var/log
docker cp /root/syslog <nombre_del_contenedor>:/var/log
⚡ Gestionar el estado del contenedor:
📌 Detener un contenedor
docker stop <ID_DEL_CONTENEDOR>
docker stop <ID_DEL_CONTENEDOR>
📌 Iniciar un contenedor detenido
docker start <ID_DEL_CONTENEDOR>
📌 Eliminar un contenedor
docker rm <ID_DEL_CONTENEDOR>
⚠️ Consideraciones importantes:
Si reinicias un servicio dentro de un contenedor, es posible que el contenedor se detenga. Por eso, es importante verificar que el contenedor sigue en ejecución usando docker ps y, si no lo está, arrancarlo de nuevo con docker start.
🧰 Resumen de los comandos docker run
El comando docker run se utiliza para crear y ejecutar contenedores desde imágenes. Su estructura básica es:
docker run [OPCIONES] NOMBRE_IMAGEN [COMANDO] [ARGUMENTOS...]
| 🔧 Opción | 💡 ¿Qué hace? | 🧱 Instrucción relacionada (Dockerfile) | 🧪 Ejemplo de uso |
|---|---|---|---|
-d |
Ejecuta el contenedor en segundo plano (modo detached). Ideal para servicios o servidores. | N/A | docker run -d mi_web |
-it |
Ejecuta el contenedor de forma interactiva con terminal. Perfecto para usar la consola interna del contenedor. | N/A | docker run -it ubuntu bash |
-v |
Monta volúmenes (carpetas o archivos) del host dentro del contenedor. Útil para persistencia o compartir datos. | VOLUME |
docker run -v $(pwd):/data mi_app |
-p |
Mapea puertos del host al contenedor. Necesario para acceder a apps web desde fuera del contenedor. | EXPOSE |
docker run -p 8080:80 nginx |
--rm |
Elimina automáticamente el contenedor una vez que termina su ejecución. Útil para tareas temporales. | N/A | docker run --rm alpine echo "Hola mundo" |
--name |
Asigna un nombre personalizado al contenedor (en vez de un nombre aleatorio generado por Docker). | N/A | docker run --name servidor_web nginx |