Desafío de compilación multietapa (Multi-stage Build) de Docker

DockerIntermediate
Practicar Ahora

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 Dockerfile utilizando 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:

  1. Crea un nuevo directorio llamado myapp y accede a él.

    mkdir myapp
    cd myapp
    
  2. Descarga el código fuente de NodeJS desde https://github.com/labex-labs/nodejs-example.git.

    git clone https://github.com/labex-labs/nodejs-example.git
    

    Mueve el código descargado al directorio myapp.

    mv nodejs-example/* .
    rm -rf nodejs-example
    
  3. Crea un nuevo archivo llamado Dockerfile en el directorio myapp con 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 myapp en la ruta /home/labex/project.
  • Clonar el código fuente de NodeJS dentro del directorio myapp.
  • Crear un Dockerfile en el directorio myapp con 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:

  1. Utiliza el comando docker build para construir una nueva imagen llamada myapp.

    docker build -t myapp .
    
  2. Verifica que la imagen se haya construido correctamente utilizando docker images.

Requisitos

Para completar este desafío, necesitarás:

  • Ejecutar el comando docker build en 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 myapp para ejecutar un contenedor. El contenedor debe exponer el puerto 3000 del contenedor al puerto 3030 del host, y luego accede a la aplicación desde tu navegador.

Ejemplo

Aquí tienes un ejemplo de lo que deberías lograr:

  1. Inicia un nuevo contenedor de Docker llamado my-app.

    docker run --name my-app -p 3030:3000 myapp
    
  2. Abre un navegador web y dirígete a http://localhost:3030 para 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 3000 dentro del contenedor al puerto 3030 en 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.

✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar