Introducción
La compilación multietapa (Multi-stage Build) de Docker es una funcionalidad que te permite utilizar múltiples etapas en un Dockerfile para crear una imagen de Docker final. En este desafío, aprenderás a utilizar esta técnica para generar imágenes más ligeras y optimizadas.
Crear un Dockerfile con compilación multietapa
En esta sección, crearás un Dockerfile que utiliza una compilación multietapa.
Tareas
- Crea un nuevo
Dockerfileutilizando dos etapas. La primera etapa compila la aplicación instalando las dependencias necesarias y ejecutando el script de compilación. La segunda etapa crea la imagen final copiando el código compilado de la primera etapa, instalando únicamente las dependencias de producción y exponiendo el puerto necesario.
Ejemplo
Aquí tienes un ejemplo de los pasos que seguirás:
Crea un nuevo directorio llamado
myappy accede a él.mkdir myapp cd myappDescarga el código fuente de NodeJS desde
https://github.com/labex-labs/nodejs-example.git.git clone https://github.com/labex-labs/nodejs-example.gitMueve el código descargado al directorio
myapp.mv nodejs-example/* . rm -rf nodejs-exampleCrea un nuevo archivo llamado
Dockerfileen el directoriomyappcon el siguiente contenido:## Stage 1: Build the application FROM node:14-alpine AS base WORKDIR /app COPY . ./ RUN npm install ## Stage 2: Create the final image FROM node:14-alpine WORKDIR /app COPY --from=base /app/ . EXPOSE 3000 CMD [ "npm", "start" ]
Requisitos
Para completar este desafío, necesitarás:
- Crear un directorio llamado
myappen la ruta/home/labex/project. - Clonar el código fuente de NodeJS dentro del directorio
myapp. - Crear un
Dockerfileen el directoriomyappcon el contenido especificado.
Construir una imagen de Docker
En este paso, crearás una imagen utilizando el Dockerfile.
Tareas
- Construye una nueva imagen llamada
myapp.
Ejemplo
Aquí tienes un ejemplo de lo que deberías lograr:
Utiliza el comando
docker buildpara construir una nueva imagen llamadamyapp.docker build -t myapp .Verifica que la imagen se haya construido correctamente utilizando
docker images.
Requisitos
Para completar este desafío, necesitarás:
- Ejecutar el comando
docker builden el directorio/home/labex/project/myapp. - Nombrar la imagen como
myapp.
Ejecutar un contenedor de Docker
En este paso, utilizarás la imagen de Docker para ejecutar un contenedor.
Tareas
- Utiliza la imagen
myapppara ejecutar un contenedor. El contenedor debe exponer el puerto3000del contenedor al puerto3030del host, y luego accede a la aplicación desde tu navegador.
Ejemplo
Aquí tienes un ejemplo de lo que deberías lograr:
Inicia un nuevo contenedor de Docker llamado
my-app.docker run --name my-app -p 3030:3000 myappAbre un navegador web y dirígete a
http://localhost:3030para acceder a la aplicación en ejecución.
Requisitos
Para completar este desafío, necesitarás:
- Ejecutar el contenedor con el nombre
my-app. - Mapear el puerto
3000dentro del contenedor al puerto3030en el host.
Resumen
En este desafío, aprendiste a utilizar la compilación multietapa de Docker para crear una imagen de Docker más pequeña y eficiente. Al utilizar múltiples etapas en un Dockerfile, puedes separar los entornos de compilación y ejecución, reduciendo así el tamaño de la imagen final. Con este conocimiento, ahora puedes comenzar a construir tus propias imágenes de Docker utilizando la compilación multietapa.



