Imágenes y Contenedores en Práctica
Como vimos en la introducción, para interactuar con Docker necesitas entender el ciclo de vida entre Imágenes y Contenedores.
Imágenes (El Molde)
Una imagen es una plantilla de solo lectura que contiene un conjunto de instrucciones para crear un contenedor que pueda correr en la plataforma Docker. Proporciona una forma conveniente de empaquetar aplicaciones y entornos de servidores preconfigurados.
Existen millones de imágenes ya preconstruidas (como un Ubuntu puro, una versión oficial de Node.js, una base de datos MySQL lista para usarse, etc.) alojadas de forma pública en Docker Hub (el "GitHub" de las imágenes Docker).
Descargando Imágenes (docker pull)
Si necesitas descargar la imagen oficial de Nginx (un servidor web), ejecutas:
docker pull nginx
Ese comando descargará la última versión estable (apenas unos ~15MB) a tu computadora local.
Contenedores (La Aplicación Viva)
Si la imagen es la clase en POO, el contenedor es el objeto instanciado. Un contenedor es una unidad ejecutable de software. Al iniciar uno a partir de una de tus imágenes descargadas, se creará un entorno aislado en tu ordenador donde la aplicación se ejecutará de manera encapsulada.
Levantar un Contenedor (docker run)
El comando más importante y usado diariamente es run. Si ejecutas docker run nginx, Docker levantará un servidor web en vivo.
Sin embargo, como los contenedores están totalmente aislados de la computadora que los aloja (host), tú no podrás acceder al sitio web a menos que expongas los puertos (la "ventana") intencionalmente.
En lugar de un comando desnudo, un despliegue útil se ve así:
docker run -d -p 8080:80 --name mi-sitio-web nginx
Desglosando la magia:
-d(Detached): Le dice al contenedor que corra "en segundo plano", para que no secuestre y bloquee tu consola. De esta manera puedes seguir usando la terminal.-p 8080:80(Port): Esto es un "Mapeo de Red". Establece un túnel seguro. Significa: "Cuando escribalocalhost:8080en el navegador de mi laptop, redirige ese tráfico al puerto80DENTRO del contenedor".--name mi-sitio-web: Le das un apodo fácil de recordar. Si no se lo pones, Docker inventará un nombre aleatorio absurdo (ej.brave_hawking).nginx: El nombre de la Imagen prefabricada de la cual este contenedor va a nacer.
Comandos Esenciales de Gestión
Conforme avanzas, terminarás teniendo decenas de contenedores a lo largo del tiempo. Es vital saber qué está pasando.
1. ¿Qué está ejecutándose ahora mismo?
docker ps
Este comando te lista todos los contenedores activos, sus IDs, su nombre, cuánto llevan corriendo y qué puertos tienen ocupados. (Usa docker ps -a para ver también los contenedores que están apagados).
2. Detener un Contenedor activo
Para parar (como apagar la PC) un contenedor que ya no necesitamos y liberar su puerto, usamos el comando stop seguido del ID (solo los primeros 3 números bastan) o del nombre que le asignaste.
docker stop mi-sitio-web
3. Borrar un Contenedor
Detenerlo no lo borra del disco duro. Para destruirlo por completo (lo que implica arrancar uno nuevo de cero la próxima vez que necesites Nginx), usa:
docker rm mi-sitio-web
# O añadir -f si está encendido y quieres matarlo a la fuerza:
# docker rm -f mi-sitio-web