¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Ejecuta una aplicación en un contenedor (Docker)

Después de esta lección: Puedo ejecutar una aplicación en un contenedor y mirar dentro de él.

Lección de 50 min11 comandosLaboratorio de Docker: aprende contenedores, registros y reinicios arreglando un servicio roto

En mi portátil funcionaba

Una desarrolladora termina la web de una ferretería. En su portátil va perfecta. En el servidor de la empresa falla, porque allí hay una versión más antigua de una librería.

Nadie se equivocó. Las dos máquinas eran distintas. Un contenedor lleva la aplicación junto con todo lo que necesita, y así funciona igual en cualquier sitio.

Al terminar esta lección

Nota

Puedo ejecutar una aplicación en un contenedor y mirar dentro de él.

Palabras clave

PalabraQué significaEjemplo
Imagenpaquete de solo lectura con un programa y lo que necesita
Contenedorcopia en marcha de una imagen, con sus propios archivos y procesos
Etiquetanombre que indica la versión de una imagen1.27-alpine
Puertopuerta numerada donde un programa espera visitas80
Volumencarpeta guardada fuera del contenedor, que sobrevive

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Imagen es receta, contenedor es plato

Una imagen es un paquete. Contiene un programa, los archivos que necesita y una nota sobre cómo arrancarlo. Una imagen nunca cambia.

Un contenedor es lo que obtienes al arrancar una imagen. Puedes arrancar muchos contenedores desde una sola imagen, como haces muchas tortillas con una sola receta.

Tu laboratorio tiene tres contenedores. Ejecuta el comando para listarlos.

Lista todos los contenedores

Comando
docker ps -a

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: leer una línea

ColumnaQué te diceEn tu laboratorio
IMAGEde qué imagen salió el contenedorweb usa nginx, cache usa valkey
STATUSen marcha, parado o con problemasUp, Exited o healthy
PORTSlas puertas donde espera el programa80/tcp en web
NAMESel nombre que escribes en otros comandosweb, cache, worker

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un contenedor tiene su propia vista

Dentro de un contenedor, el programa ve sus propios archivos y su propia lista de procesos. No ve los archivos de los otros contenedores.

docker exec ejecuta un comando dentro de un contenedor que está en marcha. Los tres comandos siguientes miran dentro de web, el contenedor que sirve una página.

Lista los procesos dentro de web

Comando
docker exec web ps

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pregunta su versión al servidor

Comando
docker exec web nginx -v

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lista la carpeta de la página

Comando
docker exec web ls /usr/share/nginx/html

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que un contenedor es una máquina virtual pequeña. No lo es. Un contenedor es un proceso normal del anfitrión, con sus propios archivos y su lista de procesos. Comparte el núcleo del anfitrión. Elige una máquina virtual cuando necesites otro sistema operativo.

¿De qué sistema vienen los archivos de web?

Comando
docker exec web head -n 1 /etc/os-release

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pregunta a web en qué núcleo funciona

Comando
docker exec web uname -r

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pregunta lo mismo en tu terminal

Comando
uname -r

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Los puertos dejan entrar, los volúmenes guardan

Un servidor web espera en el puerto 80. Los demás contenedores de la red del laboratorio lo encuentran por su nombre, web.

Los archivos propios de un contenedor duran lo que dura el contenedor. Si lo cambias o paras el laboratorio, desaparecen.

Un volumen es una carpeta guardada fuera del contenedor. El laboratorio tiene una en /settings.

Visita el puerto web por su nombre

Comando
curl -s -o /dev/null -w "%{http_code}\n" http://web

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea un archivo en la carpeta del contenedor

Comando
docker exec web touch /tmp/nota.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprueba que está ahí

Comando
docker exec web ls /tmp

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mira el volumen sin cambiarlo

Comando
docker exec web ls /settings

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos

Cuenta las líneas nginx: worker process que mostró docker exec web ps. Después ejecuta docker exec web nproc, que dice cuántos procesadores ve el contenedor.

Compara los dos números. Explica por qué nginx elige ese número de procesos y de quién son esos procesadores.

Sobre este laboratorio y su código: Laboratorio de Docker: aprende contenedores, registros y reinicios arreglando un servicio roto

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.