24_25_GrIA_Redes_Práctica_1
24_25_GrIA_Redes_Práctica_1
24_25_GrIA_Redes_Práctica_1
Resumen
El objetivo de esta práctica es instalar el gestor de contenedores Docker y desarrollar habilidades
básicas en su manejo.
1. Indicaciones previas
Aunque esta práctica se realizará en pareja, la instalación de Docker deben realizarla los dos miembros.
No se puede utilizar internet para buscar ayuda sobre los comandos de Docker, sino que debes aprender
a utilizar la ayuda por lı́nea de comandos: docker --help o docker <comando> --help.
2. Instalación de Docker
En primer lugar, debemos acceder a la web oficial de Docker (https://www.docker.com/), desplegar el
menú “Developers”, y seleccionar la opción “Documentation”. A continuación, debemos pinchar sobre la
opción “Get Docker”, seleccionar el sistema operativo de nuestro equipo, y seguir las instrucciones. Es
muy importante asegurarnos de que, antes de comenzar la instalación de Docker, nuestro
PC cumpla los requisitos del sistema pertinentes, realizando las instalaciones/activaciones
que se indiquen. Los usuarios de Windows deberán utilizar Windows Subsystem for Linux
(WSL) 2
3. Hello World!
Tras la instalación, es indiferente si hemos instalado Docker Desktop (disponible en Windows, Mac,
Linux), o Docker Engine directamente (disponible solo en Linux); lo importante es que al final tendremos
Docker funcionando en nuestro PC. En el caso de Docker Desktop, la instalación incluye:
Una pequeña máquina virtual de Linux sobre la que ejecutar Docker Engine.
Docker Engine (parte central de Docker).
Un demonio del sistema operativo que se encarga de que Docker funcione.
Una interfaz de linea de comandos (CLI) que nos permitirá interactuar con Docker.
En caso de instalar Docker Engine directamente (solo Linux), se omite la máquina virtual al no ser
necesaria.
Pasemos ahora a crear nuestro primer contenedor, con el que validar la instalación previa de Docker.
Partiremos de los siguientes ficheros; revisad el contenido de los mismos para asegurar que todo está
acorde a estas indicaciones:
app.mjs: Una aplicación en Node.js que espera una conexión en un determinado path, el raı́z (/)
en nuestro caso, y en un determinado puerto, el 3000. Al mismo tiempo, la aplicación “simula” una
conexión a una base de datos, acorde al fichero database.mjs.
database.mjs: Código que simula la conexión con la base de datos; en realidad, lo único que hace
es esperar un tiempo determinado, 2 segundos en este caso, para dar la impresión de que realiza
operaciones por detrás.
package.json: Contiene todas las dependencias que deberı́amos instalar con el comando npm
install para que funcione la aplicación app.mjs.
Para desplegar esta aplicación en un contenedor de Docker, necesitamos crear antes una imagen, ya que
todo contenedor es una instancia de una imagen de Docker. Más adelante detallaremos la diferencia entre
contenedores e imágenes. Para crear la imagen, vamos a seguir los siguiente pasos:
1. Crear un fichero llamado Dockerfile: En él le indicaremos a Docker cómo deberı́a crearse nuestro
contenedor mediante una serie de instrucciones. Por simplicidad, para esta primera práctica utili-
zaremos el Dockerfile proporcionado por el profesor, el cual contiene las siguientes instrucciones:
FROM node:14 → Vamos a usar Node.js versión 14.
WORKDIR /app → Establecemos el directorio de trabajo dentro del sistema de ficheros del
contenedor (se crea si no existe). Aquı́ es donde se ejecutarán todas las posteriores instrucciones
del Dockerfile cuando no se especifique ningún otro directorio.
COPY package.json . → Copiamos el fichero package.json desde fuera del contenedor al
directorio de trabajo, representado por el punto (.)
RUN npm install → Instalamos las dependencias para que nuestra aplicacion funcione.
COPY . . → Copiamos todos los ficheros del directorio actual en el host (tu PC personal), al
directorio de trabajo en el contenedor.
EXPOSE 3000 → Indicamos el puerto a usar para escuchar peticiones (coincide con el que usa
nuestra aplicación).
CMD [‘‘node’’, ‘‘app.mjs’’] → Comando a ejecutar al lanzar el contenedor.
2. Situarnos en el directorio donde tenemos el Dockerfile y el resto de ficheros, y ejecutar el siguiente
comando:
docker build .
El punto final también es parte del comando, y le indica a Docker donde está el Dockerfile.
En la Figura 1 podemos ver un ejemplo de la salida del comando que construye la imagen. Si nos fijamos
en la última lı́nea (writing image sha256:c14455038acbb0b089339c6251174a28f38f514049f5a 0.0s),
veremos el ID asignado a la imagen que acabamos de crear, y que usaremos para crear nuestro contene-
dor. Ojo: el ID en vuestro PC será diferente, y deberéis usarlo en el resto de comandos de este guión,
sustituyendo el que aparece escrito como referencia.
Ahora vamos a lanzar nuestro contenedor a partir de la imagen construida. Para esto, utilizamos el
siguiente comando:
2
Figura 1: Salida del comando docker build .
¿Ha funcionado bien, o ha mostrado algún mensaje de error? En caso de que haya habido un problema,
seguramente sea por no haber seguido las instrucciones al pie de la letra. Interpreta el mensaje, soluciona
el problema, vuelve a crear la imagen, y vuelve a lanzar el contenedor.
Por otra parte, ¿por qué necesitamos utilizar el argumento -p 3000:3000 en el comando anterior? Pista:
Recuerda que un contenedor es una unidad de software aislada de nuestro host y del resto de contenedores.
Esto no impide que existan maneras de crear conexiones entre ellos.
Y el último paso es acceder, desde nuestro navegador, a la dirección http://localhost:3000/ para ver
el resultado. ¿Qué se muestra?
Ahora bien, ¿cómo podemos parar el contenedor?:
1. Desde otra terminal, ejecutamos docker ps para ver los contenedores que se están ejecutando.
Como se puede ver en la Figura 2, el contenedor que se lanzó aparece identificado con el nombre
hardcore_curran.
2. Desde esta nueva terminal abierta, ejecutamos el comando para deter este contenedor; puede que
3
Figura 2: Listado de contenedores activos.
4. Ejercicios
En el siguiente comando, ¿cuál es el puerto del host y cuál es el del contenedor?
Averı́gualo jugando con la instrucción docker run que usaste anteriormente para la imagen creada.
Mediante la lı́nea de comandos, consulta cuántas imágenes de Docker hay construidas en tu PC.
Mediante la lı́nea de comandos, consulta cuántos contenedores de Docker hay en funcionamiento.
Mediante la lı́nea de comandos, consulta cuántas imágenes hay en total en tu PC.
Mediante la lı́nea de comandos, consulta cuántos contenedores hay en total en tu PC.
Nota: Utiliza los comandos docker --help y docker <comando> --help para solicitar ayuda sobre
algunos comandos y responder las preguntas anteriores.