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
- Dirígete al directorio
hello-worldubicado en/home/labex/project. - Abre el archivo
Dockerfileen este directorio y añade las instrucciones necesarias. - Construye una imagen de Docker llamada
hello-worldutilizando el comandodocker 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.
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
- Dirígete al directorio
flask-appen/home/labex/project. - Abre el
Dockerfileen este directorio y añade las instrucciones necesarias para instalar las dependencias. - Examina el archivo
requirements.txtpara comprender qué dependencias se requieren. - Construye una imagen de Docker llamada
flask-appmediante el comandodocker build.
Requisitos
- Realiza todas las operaciones en el directorio
/home/labex/project/flask-app. - Utiliza la imagen base
python:3.7-alpineen tuDockerfile. - Asegúrate de que las dependencias listadas en
requirements.txtqueden instaladas en la imagen. - El
Dockerfiledebe copiar el archivorequirements.txte 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.
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
- Dirígete al directorio
flask-app-enven/home/labex/project. - Abre el
Dockerfiley añade las instrucciones para definir una variable de entorno. - Modifica el archivo
app.pypara que utilice dicha variable de entorno para el puerto. - Construye una imagen de Docker llamada
flask-app-envusando el comandodocker build.
Requisitos
- Realiza todas las operaciones en el directorio
/home/labex/project/flask-app-env. - Utiliza la imagen base
python:3.7-alpineen tuDockerfile. - Define una variable de entorno
PORTcon un valor por defecto de 5000 en elDockerfile. - Modifica la aplicación Flask para que use la variable de entorno
PORTal 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).
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
- Dirígete al directorio
go-appen/home/labex/project. - Abre el
Dockerfiley añade las instrucciones para una construcción multi-etapa. - Examina el archivo
main.gopara entender esta sencilla aplicación en Go. - Construye una imagen de Docker llamada
go-appcon el comandodocker build.
Requisitos
- Realiza todas las operaciones en el directorio
/home/labex/project/go-app. - Usa
golang:1.14-alpinecomo imagen base para la etapa de construcción (build stage) yalpinecomo 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!
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:
- Crear una imagen de Docker sencilla con un
Dockerfilebásico. - Gestionar dependencias dentro de tus imágenes.
- Utilizar variables de entorno para dotar a tus imágenes de mayor flexibilidad.
- 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!



