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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Imagen | paquete de solo lectura con un programa y lo que necesita | |
| Contenedor | copia en marcha de una imagen, con sus propios archivos y procesos | |
| Etiqueta | nombre que indica la versión de una imagen | 1.27-alpine |
| Puerto | puerta numerada donde un programa espera visitas | 80 |
| Volumen | carpeta 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
docker ps -aSe 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
| Columna | Qué te dice | En tu laboratorio |
|---|---|---|
| IMAGE | de qué imagen salió el contenedor | web usa nginx, cache usa valkey |
| STATUS | en marcha, parado o con problemas | Up, Exited o healthy |
| PORTS | las puertas donde espera el programa | 80/tcp en web |
| NAMES | el nombre que escribes en otros comandos | web, 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
docker exec web psSe 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
docker exec web nginx -vSe 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
docker exec web ls /usr/share/nginx/htmlSe 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?
docker exec web head -n 1 /etc/os-releaseSe 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
docker exec web uname -rSe 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
uname -rSe 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
curl -s -o /dev/null -w "%{http_code}\n" http://webSe 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
docker exec web touch /tmp/nota.txtSe 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í
docker exec web ls /tmpSe 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
docker exec web ls /settingsSe 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.