De los Fundamentos a las Construcciones Multi-etapa

DockerBeginner
Practicar Ahora

Introducción

Docker ha revolucionado la forma en que desarrollamos, distribuimos y ejecutamos aplicaciones. En el núcleo de la funcionalidad de Docker se encuentra la capacidad de crear imágenes personalizadas adaptadas a nuestras necesidades específicas. En este desafío, explorarás la potencia y flexibilidad del comando docker build, aprendiendo a generar imágenes de Docker para una gran variedad de escenarios.

Desde aplicaciones sencillas hasta configuraciones más complejas que involucran dependencias y variables de entorno, obtendrás experiencia práctica con los conceptos fundamentales de la creación de imágenes. Al finalizar este desafío, tendrás una base sólida para construir imágenes de Docker eficientes y efectivas, una habilidad crucial en los flujos de trabajo modernos de desarrollo y despliegue de software.

¡Comencemos nuestro viaje en el mundo de la construcción de imágenes de Docker!

Construcción Básica en Docker

Comenzaremos con lo fundamental. En este paso, crearás una imagen de Docker sencilla que imprima un mensaje de "Hello, World!". Esto te servirá para familiarizarte con la estructura básica de un Dockerfile y el uso del comando docker build.

Tareas

  1. Dirígete al directorio hello-world ubicado en /home/labex/project.
  2. Abre el archivo Dockerfile en este directorio y añade las instrucciones necesarias.
  3. Construye una imagen de Docker llamada hello-world utilizando el comando docker build.

Requisitos

  • Realiza todas las operaciones dentro del directorio /home/labex/project/hello-world.
  • Utiliza la imagen base de Alpine Linux en tu Dockerfile.
  • La imagen de Docker debe imprimir "Hello, World!" al ejecutarse.

Ejemplo

Tras completar este paso, deberías poder ejecutar el siguiente comando y ver el resultado:

$ docker run hello-world
Hello, World!

¡Buen trabajo al crear tu primera imagen de Docker! Este ejemplo sencillo demuestra los principios básicos de creación de imágenes. En el siguiente paso, ampliaremos este conocimiento para crear una imagen más compleja con dependencias.

✨ Revisar Solución y Practicar

Construcción de una Imagen con Dependencias

Ahora que dominas lo básico, enfrentemos un escenario más realista. En este paso, crearás una imagen de Docker para una aplicación Python que utiliza el framework web Flask. Esto te introducirá en el concepto de gestión de dependencias dentro de tus imágenes.

Tareas

  1. Dirígete al directorio flask-app en /home/labex/project.
  2. Abre el Dockerfile en este directorio y añade las instrucciones necesarias para instalar las dependencias.
  3. Examina el archivo requirements.txt para comprender qué dependencias se requieren.
  4. Construye una imagen de Docker llamada flask-app mediante el comando docker build.

Requisitos

  • Realiza todas las operaciones en el directorio /home/labex/project/flask-app.
  • Utiliza la imagen base python:3.7-alpine en tu Dockerfile.
  • Asegúrate de que las dependencias listadas en requirements.txt queden instaladas en la imagen.
  • El Dockerfile debe copiar el archivo requirements.txt e instalar las dependencias.

Ejemplo

Al terminar este paso, deberías ver la imagen flask-app al listar tus imágenes de Docker:

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
flask-app    latest    abcdef123456   2 minutes ago   55.8MB

¡Excelente trabajo! Has creado una imagen de Docker que incluye dependencias externas. Este es un escenario muy común en aplicaciones del mundo real. En el siguiente paso, exploraremos cómo usar variables de entorno para que nuestras imágenes sean más flexibles y configurables.

✨ Revisar Solución y Practicar

Construcción de una Imagen con Variables de Entorno

La gestión de la configuración es un aspecto crucial en las aplicaciones contenedorizadas. En este paso, crearás una imagen de Docker que utiliza una variable de entorno para definir el número de puerto de una aplicación Flask. Esto demostrará cómo hacer que tus imágenes sean más dinámicas y adaptables a diferentes entornos.

Tareas

  1. Dirígete al directorio flask-app-env en /home/labex/project.
  2. Abre el Dockerfile y añade las instrucciones para definir una variable de entorno.
  3. Modifica el archivo app.py para que utilice dicha variable de entorno para el puerto.
  4. Construye una imagen de Docker llamada flask-app-env usando el comando docker build.

Requisitos

  • Realiza todas las operaciones en el directorio /home/labex/project/flask-app-env.
  • Utiliza la imagen base python:3.7-alpine en tu Dockerfile.
  • Define una variable de entorno PORT con un valor por defecto de 5000 en el Dockerfile.
  • Modifica la aplicación Flask para que use la variable de entorno PORT al establecer el puerto de escucha.
  • Asegúrate de instalar todos los paquetes de Python necesarios listados en requirements.txt.

Ejemplo

Tras completar este paso y ejecutar el contenedor, deberías poder acceder a la aplicación:

$ docker run -d -p 5000:5000 flask-app-env
$ curl http://127.0.0.1:5000
Hello, World!

¡Genial! Has creado una imagen de Docker más flexible que puede adaptarse a distintos entornos mediante variables de entorno. Esta es una técnica poderosa para crear imágenes de contenedor reutilizables. En nuestro paso final, exploraremos una característica avanzada de Docker: las construcciones multi-etapa (multi-stage builds).

✨ Revisar Solución y Practicar

Construcción de una Imagen con Múltiples Etapas

Para nuestro desafío final, profundizaremos en las construcciones multi-etapa (multi-stage builds). Esta técnica avanzada permite crear imágenes de Docker mucho más eficientes al utilizar varias fases en el proceso de construcción. Crearás una imagen para una aplicación en Go, usando una etapa para compilar el código y otra para generar una imagen final ligera y lista para producción.

Tareas

  1. Dirígete al directorio go-app en /home/labex/project.
  2. Abre el Dockerfile y añade las instrucciones para una construcción multi-etapa.
  3. Examina el archivo main.go para entender esta sencilla aplicación en Go.
  4. Construye una imagen de Docker llamada go-app con el comando docker build.

Requisitos

  • Realiza todas las operaciones en el directorio /home/labex/project/go-app.
  • Usa golang:1.14-alpine como imagen base para la etapa de construcción (build stage) y alpine como imagen base para la etapa final.
  • La aplicación Go debe imprimir "Hello, World!" al ejecutarse.
  • La aplicación Go debe compilarse usando el comando go build.
  • La imagen de Docker final solo debe contener el binario compilado, no el entorno de desarrollo de Go.

Ejemplo

Tras completar este paso, deberías poder ejecutar el siguiente comando y ver el resultado:

$ docker run go-app
Hello, World!
✨ Revisar Solución y Practicar

Resumen

¡Felicidades por completar este desafío integral de construcción de imágenes de Docker! Has recorrido el camino desde la creación de una imagen básica hasta la implementación de técnicas avanzadas como las construcciones multi-etapa. A lo largo del proceso, has aprendido a:

  1. Crear una imagen de Docker sencilla con un Dockerfile básico.
  2. Gestionar dependencias dentro de tus imágenes.
  3. Utilizar variables de entorno para dotar a tus imágenes de mayor flexibilidad.
  4. Implementar construcciones multi-etapa para obtener imágenes eficientes y optimizadas para producción.

Estas habilidades constituyen la base de un uso eficaz de Docker y te serán de gran utilidad en diversos escenarios, desde el desarrollo y las pruebas hasta los despliegues en producción. Has adquirido experiencia práctica con la interfaz de línea de comandos (CLI) de Docker y la sintaxis de Dockerfile, algo invaluable para cualquier profesional que trabaje con aplicaciones contenedorizadas.

A medida que continúes tu camino con Docker, recuerda que estas operaciones básicas son los pilares de flujos de trabajo mucho más complejos. Practica estas habilidades con regularidad y ganarás fluidez en la creación y gestión de imágenes, lo que te permitirá optimizar y agilizar tus procesos de desarrollo y despliegue.

¡Sigue explorando las capacidades de Docker y no dudes en experimentar con diferentes imágenes base, estrategias de construcción y técnicas de optimización! El mundo de la contenedorización es inmenso y está lleno de posibilidades, ¡y ahora estás bien equipado para navegarlo con confianza!