Saltar al contenido principal

10 ideas de proyectos Docker: De principiante a avanzado

Aprende Docker con estas ideas de proyectos prácticos para todos los niveles, desde principiante a avanzado, centrados en la creación y optimización de aplicaciones de ciencia de datos.
Actualizado 9 oct 2024  · 22 min de lectura

La experiencia práctica es esencial para dominar Docker. Docker es una herramienta básica en el desarrollo moderno de software y ciencia de datos, que te permite construir, desplegar y gestionar aplicaciones en contenedores.

En este artículo, proporciono ejemplos de proyectos Docker para principiantes, intermedios y avanzados, centrados en compilaciones multietapa, optimización de imágenes Docker y aplicación de Docker en la ciencia de datos. Estos proyectos están diseñados para profundizar en tus conocimientos sobre Docker y mejorar tus habilidades prácticas.

Introducción a los proyectos Docker

Antes de lanzarte a los proyectos, asegúrate de que tienes Docker instalado en tu máquina. Dependiendo de tu sistema operativo (Windows, macOS, Linux), puedes descargar Docker desde el sitio web oficial de Docker.

También necesitarás conocimientos básicos de:

  • Dockerfiles (para definir lo que hay dentro de tus contenedores)
  • Docker Compose (para aplicaciones multicontenedor)
  • Comandos básicos de la CLI como docker build, docker run, docker-compose up, etc.

Si necesitas refrescar tus conocimientos sobre los conceptos anteriores, consulta los cursos Introducción a Docker o Conceptos de Containerización y Virtualización.

¡Empecemos!

Proyectos Docker para principiantes

Al empezar con Docker, es importante elegir proyectos que se ajusten a tu nivel de habilidad y que, al mismo tiempo, te desafíen a aprender nuevos conceptos. Aquí tienes algunas ideas de proyectos para empezar:

Proyecto 1: Configurar un servidor web sencillo

En este proyecto, crearás un contenedor Docker que ejecute un servidor web básico utilizando Nginx. Nginx es uno de los servidores web de código abierto más populares para el proxy inverso, el equilibrio de carga y mucho más. Al final de este proyecto, habrás aprendido a crear y ejecutar contenedores con Docker y a exponer puertos para que se pueda acceder a la aplicación desde tu máquina local.

Nivel de dificultad: Beginner

Tecnologías utilizadas: Docker, Nginx

Instrucciones paso a paso

  • Instala Docker: Asegúrate de que Docker está instalado en tu sistema.
  • Crea el directorio del proyecto: Crea una nueva carpeta y un archivo index.html dentro de ella que será servido por Nginx.
  • Escribe el archivo Dockerfile: Un Dockerfile es un script que define el entorno del contenedor. Indica a Docker qué imagen base debe utilizar, qué archivos debe incluir y qué puertos debe exponer:
FROM nginx:alpine
COPY ./index.html /usr/share/nginx/html
EXPOSE 80
  • Construye la imagen Docker: Navega hasta la carpeta de tu proyecto y construye la imagen utilizando:
docker build -t my-nginx-app .
  • Ejecuta el contenedor: Inicia el contenedor y asigna el puerto 80 del contenedor al puerto 8080 de tu máquina:
docker run -d -p 8080:80 my-nginx-app
  • Accede al servidor web: Abre tu navegador y navega hasta http://localhost:8080 para ver la página que has creado.

Proyecto 2: Dockerizar un script Python

Este proyecto consiste en contenerizar un sencillo script de Python que procesa datos de un archivo CSV utilizando la biblioteca pandas. El objetivo es aprender a gestionar dependencias y ejecutar scripts Python dentro de contenedores Docker, haciendo que el script sea portable y ejecutable en cualquier entorno.

Nivel de dificultad: Beginner

Tecnologías utilizadas: Docker, Python, pandas

Instrucciones paso a paso

  • Escribe el script de Python: Crea un script llamado process_data.py que lea y procese un archivo CSV. Aquí tienes un script de ejemplo:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.describe())
  • Crea un archivo requirements.txt: Este archivo enumera las bibliotecas Python que necesita el script. En este caso, sólo necesitamos pandas:
pandas
  • Escribe el archivo Dockerfile: Este archivo definirá el entorno para el script Python:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "process_data.py"]
  • Construye la imagen Docker:
docker build -t python-script .
  • Ejecuta el contenedor:
docker run -v $(pwd)/data:/app/data python-script

Proyecto 3: Construir una aplicación multicontenedor sencilla

Este proyecto te ayudará a familiarizarte con Docker Compose construyendo una aplicación multicontenedor. Crearás una aplicación web sencilla utilizando Flask como frontend y MySQL como base de datos backend. Docker Compose te permite gestionar varios contenedores que trabajan juntos.

Nivel de dificultad: Beginner

Tecnologías utilizadas: Docker, Docker Compose, Flask, MySQL

Instrucciones paso a paso

  • Escribe la aplicación Flask: Crea una sencilla aplicación Flask que se conecte a una base de datos MySQL y muestre un mensaje. He aquí un ejemplo:
from flask import Flask
import mysql.connector
 
app = Flask(__name__)
 
def get_db_connection():
 	connection = mysql.connector.connect(
	 host="db",
	 user="root",
	 password="example",
	 database="test_db"
 	)
 	return connection
 
@app.route('/')
def hello_world():
 	connection = get_db_connection()
 	cursor = connection.cursor()
 	cursor.execute("SELECT 'Hello, Docker!'")
 	result = cursor.fetchone()
 	connection.close()
 	return str(result[0])
 
if __name__ == "__main__":
 	app.run(host='0.0.0.0')
  • Crea el archivo docker-compose.yml: Docker Compose define y ejecuta aplicaciones Docker multicontenedor. En este archivo, definirás la aplicación Flask y los servicios de la base de datos MySQL:
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: test_db
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - db
    environment:
      FLASK_ENV: development
    volumes:
      - .:/app

volumes:
  db_data:
  • Escribe el Dockerfile para Flask: Esto creará la imagen Docker para la aplicación Flask:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
  • Construye y ejecuta los contenedores: Utiliza Docker Compose para que aparezca toda la aplicación:
docker-compose up --build

Conviértete en Ingeniero de Datos

Conviértete en un ingeniero de datos mediante el aprendizaje avanzado de Python
Empieza a aprender gratis

Proyectos Docker de nivel intermedio

Los siguientes proyectos son para quienes tienen un sólido conocimiento de los fundamentos de Docker. En ellos se introducirán conceptos más complejos, como las construcciones multietapa y las técnicas de optimización.

Proyecto 4: Creación en varias fases de una aplicación Node.js

Las compilaciones multietapa ayudan a reducir el tamaño de las imágenes Docker al separar los entornos de compilación y ejecución. En este proyecto, vas a contenerizar una aplicación Node.js utilizando compilaciones multietapa.

Nivel de dificultad: Intermediate

Tecnologías utilizadas: Docker, Node.js, Nginx

Instrucciones paso a paso

  • Crea una aplicación Node.js sencilla: Escribe un servidor Node.js básico que devuelva un mensaje sencillo. He aquí un ejemplo:
const express = require('express');
const app = express();
 
app.get('/', (req, res) => res.send('Hello from Node.js'));
 
app.listen(3000, () => console.log('Server running on port 3000'));
  • Escribe el archivo Dockerfile con construcción multietapa: La primera etapa construye la aplicación, y la segunda la ejecuta con una imagen base más ligera.
# Stage 1: Build
FROM node:14 as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
# Add the following line if there's a build step for the app
# RUN npm run build

# Stage 2: Run
FROM node:14-slim
WORKDIR /app
COPY --from=build-stage /app .
EXPOSE 3000
ENV NODE_ENV=production
CMD ["node", "server.js"]
  • Construye la imagen:
docker build -t node-multi-stage .
  • Ejecuta el contenedor:
docker run -p 3000:3000 node-multi-stage

Proyecto 5: Dockerizar un modelo de aprendizaje automático con TensorFlow

Este proyecto consistirá en contenerizar un modelo de aprendizaje automático utilizando TensorFlow. El objetivo es crear un entorno portátil en el que puedas ejecutar modelos TensorFlow en varios sistemas sin preocuparte de la configuración subyacente.

Nivel de dificultad: Intermediate

Tecnologías utilizadas: Docker, TensorFlow, Python

Instrucciones paso a paso

  • Instala TensorFlow en un script de Python: Crea un script Python model.py que cargue y ejecute un modelo TensorFlow preentrenado:
import tensorflow as tf
model = tf.keras.applications.MobileNetV2(weights='imagenet')
print("Model loaded successfully")
  • Escribe el archivo Dockerfile: Define el entorno para TensorFlow dentro de Docker:
FROM tensorflow/tensorflow:latest
WORKDIR /app
COPY . .
CMD ["python", "model.py"]
  • Construye la imagen:
docker build -t tensorflow-model .
  • Ejecuta el contenedor:
docker run tensorflow-model

Proyecto 6: Crear un entorno de ciencia de datos con Jupyter y Docker

Este proyecto se centra en crear un entorno reproducible de ciencia de datos utilizando Docker y cuadernos Jupyter. El entorno incluirá bibliotecas populares de Python como pandas, NumPy y scikit-learn.

Nivel de dificultad: Intermediate

Tecnologías utilizadas: Docker, Jupyter, Python, scikit-learn

Instrucciones paso a paso

  • Crea el archivo docker-compose.yml: Define el servicio Jupyter Notebook y las bibliotecas necesarias. He aquí un ejemplo:
version: '3'
services:
  jupyter:
    	image: jupyter/scipy-notebook
    	ports:
    	- "8888:8888"
    	volumes:
    	- ./notebooks:/home/joelwembo/work
  • Inicia el Cuaderno Jupyter: Utiliza Docker Compose para iniciar Jupyter Notebook.
docker-compose up
  • Accede al Cuaderno Jupyter: Abre tu navegador y ve a http://localhost:8888.

Proyectos Docker de nivel avanzado

Estos proyectos de nivel avanzado se centrarán en aplicaciones del mundo real y conceptos avanzados de Docker, como canalizaciones de aprendizaje profundo y canalizaciones de datos automatizadas.

Proyecto 7: Reducir el tamaño de una imagen Docker para una aplicación Python

En este proyecto, optimizarás una imagen Docker para una aplicación Python utilizando imágenes base mínimas como Alpine Linux e implementando compilaciones multietapa para mantener el tamaño de la imagen lo más pequeño posible.

Nivel de dificultad: Avanzado

Tecnologías utilizadas: Docker, Python, Alpine Linux

Instrucciones paso a paso

  • Escribe el script de Python: Crea un script que analice datos utilizando pandas. Aquí tienes un script de ejemplo:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.head())
  • Optimiza el archivo Dockerfile: Utiliza compilaciones multietapa y Alpine Linux para crear una imagen ligera.
# Stage 1: Build stage
FROM python:3.9-alpine as build-stage
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY script.py .

# Stage 2: Run stage
FROM python:3.9-alpine
WORKDIR /app
COPY --from=build-stage /app/script.py .
CMD ["python", "script.py"]
  • Construye la imagen:
docker build -t optimized-python-app .

Proyecto 8: Dockerizar un pipeline de aprendizaje profundo con PyTorch

Este proyecto consiste en contenerizar una canalización de aprendizaje profundo utilizando PyTorch. El objetivo es optimizar el Dockerfile en cuanto a rendimiento y tamaño, facilitando la ejecución de modelos de aprendizaje profundo en distintos entornos.

Nivel de dificultad: Avanzado

Tecnologías utilizadas: Docker, PyTorch, Python

Instrucciones paso a paso

  • Instala PyTorch en un script de Python: Crea un script que cargue un modelo PyTorch preentrenado y realice la inferencia. He aquí un ejemplo:
import torch
model = torch.hub.load('pytorch/vision', 'resnet18', pretrained=True)
print("Model loaded successfully")
  • Escribe el archivo Dockerfile: Define el entorno para PyTorch:
FROM pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY model.py .
CMD ["python", "model.py"]
  • Construye la imagen:
docker build -t pytorch-model .
  • Ejecuta el contenedor:
docker run pytorch-model 

Proyecto 9: Automatización de canalizaciones de datos con Apache Airflow y Docker

En este proyecto, configurarás y pondrás en contenedores un entorno Apache Airflow para automatizar canalizaciones de datos. Apache Airflow es una popular herramienta para orquestar flujos de trabajo complejos muy utilizada en ingeniería de datos.

Nivel de dificultad: Avanzado

Tecnologías utilizadas: Docker, Apache Airflow, Python, PostgreSQL

Instrucciones paso a paso

  • Crea el archivo docker-compose.yml: Define los servicios Airflow y la base de datos PostgreSQL:
version: '3'
services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: airflow
      POSTGRES_PASSWORD: airflow
      POSTGRES_DB: airflow
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  webserver:
    image: apache/airflow:latest
    environment:
      AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
      AIRFLOW__CORE__EXECUTOR: LocalExecutor
    depends_on:
      - postgres
    ports:
      - "8080:8080"
    volumes:
      - ./dags:/opt/airflow/dags
    command: ["webserver"]

  scheduler:
    image: apache/airflow:latest
    environment:
      AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
      AIRFLOW__CORE__EXECUTOR: LocalExecutor
    depends_on:
      - postgres
      - webserver
    volumes:
      - ./dags:/opt/airflow/dags
    command: ["scheduler"]

volumes:
  postgres_data:
  • Inicia el entorno Flujo de aire: Utiliza Docker Compose para activar el entorno Airflow:
docker-compose up

Proyecto 10: Desplegar una API de ciencia de datos con FastAPI y Docker

Construye y despliega una API de ciencia de datos utilizando FastAPI. Containerizarás la API utilizando Docker y te centrarás en optimizarla para entornos de producción.

Nivel de dificultad: Avanzado

Tecnologías utilizadas: Docker, FastAPI, Python, scikit-learn

Instrucciones paso a paso

  • Escribe la aplicación FastAPI: Crea una API sencilla que utilice un modelo de aprendizaje automático para las predicciones. He aquí un ejemplo:
from fastapi import FastAPI
import pickle
 
app = FastAPI()
with open("model.pkl", "rb") as f:
   model = pickle.load(f)
 
@app.post("/predict/")
def predict(data: list):
   return {"prediction": model.predict(data)}
  • Escribe el archivo Dockerfile: Crea un Dockerfile que defina el entorno para FastAPI:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
  • Construye la imagen:
docker build -t fastapi-app .
  • Ejecuta el contenedor:
docker run -p 8000:8000 fastapi-app

Consejos para trabajar en proyectos Docker

Mientras trabajas en estos proyectos, ten en cuenta los siguientes consejos:

  • Empieza poco a poco: Empieza con proyectos poco exigentes, y luego pasa a tareas más complejas. Crear confianza con tareas más sencillas es fundamental.
  • Documenta tus progresos: Lleva un registro detallado de tus proyectos para realizar un seguimiento de tu aprendizaje y utilizarlo como referencia para futuros esfuerzos.
  • Únete a las comunidades Docker: Participa en foros en línea y reuniones locales para compartir tus experiencias, hacer preguntas y aprender de los demás.
  • Experimenta y personaliza: No tengas miedo de modificar los proyectos, probar distintos enfoques y explorar nuevas funciones de Docker.
  • Sigue aprendiendo: Sigue ampliando tus conocimientos sobre Docker explorando temas y herramientas avanzados como Kubernetes, Docker Swarm o la arquitectura de microservicios.

Conclusión

Dominar Docker implica algo más que aprender comandos y configuraciones. Se trata de comprender cómo encaja Docker en el desarrollo de aplicaciones modernas, en los flujos de trabajo de la ciencia de datos y en la gestión de infraestructuras.

Los proyectos que he compartido en esta guía proporcionan algunas ideas para desarrollar las habilidades básicas y la experiencia práctica necesarias para sobresalir finalmente en escenarios del mundo real.

Llegados a este punto, te sugiero que solidifiques tus conocimientos siguiendo estos cursos:

Conviértete en Ingeniero de Datos

Demuestra tus habilidades como ingeniero de datos preparado para el trabajo.

Preguntas frecuentes

¿Cuáles son las mejores prácticas para escribir archivos Docker eficientes?

Las mejores prácticas para escribir archivos Docker eficientes incluyen minimizar el número de capas combinando comandos, utilizar compilaciones multietapa para reducir el tamaño de la imagen, seleccionar imágenes base ligeras, almacenar en caché las dependencias y evitar incluir archivos innecesarios en la imagen final.

¿Qué es una compilación multietapa en Docker?

Una compilación en varias fases es un método para optimizar las imágenes Docker separando los entornos de compilación y de ejecución. Así se obtienen imágenes más pequeñas y seguras.

¿Cómo puedes reducir el tamaño de una imagen Docker?

Utiliza imágenes base mínimas, gestiona eficazmente las dependencias y emplea compilaciones multietapa para reducir el tamaño de la imagen y mejorar el rendimiento.

¿Cómo puedo solucionar errores comunes al crear imágenes Docker?

Los errores más comunes al construir imágenes Docker incluyen problemas de permisos, sintaxis incorrecta del archivo Dockerfile y fallos en la instalación de dependencias. Para solucionar el problema, comprueba los registros de compilación de Docker, asegúrate de que estás utilizando la imagen base correcta y confirma que las rutas o los permisos de los archivos están configurados correctamente. Herramientas como docker build --no-cache pueden ayudar a identificar problemas de caché.

¿Puedo utilizar Docker con Kubernetes para estos proyectos?

Sí, una vez que te sientas cómodo con Docker, Kubernetes puede ser el siguiente paso. Kubernetes ayuda a gestionar aplicaciones en contenedores a escala. Puedes desplegar tus proyectos Docker en un clúster Kubernetes para gestionar múltiples instancias, manejar el escalado y automatizar los despliegues.

¿Cuáles son las mejores prácticas para gestionar volúmenes Docker y datos persistentes?

Cuando trabajes con volúmenes Docker, es importante utilizar volúmenes con nombre para garantizar la persistencia de los datos en los reinicios de los contenedores. Haz copias de seguridad periódicas de tus volúmenes y vigila cualquier cuello de botella en el rendimiento debido a la E/S del disco. Evita almacenar datos sensibles en contenedores directamente; utiliza en su lugar soluciones de almacenamiento seguras o bases de datos externas.

¿Para qué sirve la directiva ENTRYPOINT en un archivo Dockerfile?

La directiva ENTRYPOINT de un Dockerfile especifica el comando que se ejecutará siempre que se inicie un contenedor. Permite tratar el contenedor como un ejecutable, al que se le pueden pasar argumentos durante el tiempo de ejecución, lo que aumenta la flexibilidad.

¿Cuál es la diferencia entre CMD y ENTRYPOINT en un archivo Docker?

Tanto CMD como ENTRYPOINT especifican los comandos que se ejecutarán cuando se inicie un contenedor. Sin embargo, CMD proporciona argumentos por defecto que se pueden anular, mientras que ENTRYPOINT define el comando que siempre se ejecuta. ENTRYPOINT es útil para crear contenedores que actúan como ejecutables, mientras que CMD es más flexible para especificar comandos por defecto.

Temas

¡Aprende más sobre Docker con estos cursos!

curso

Introduction to Docker

4 hr
19.3K
Gain an introduction to Docker and discover its importance in the data professional’s toolkit. Learn about Docker containers, images, and more.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

Los 13 mejores proyectos de AWS: De principiante a profesional

Explora 13 proyectos prácticos de AWS para todos los niveles. Mejora tus conocimientos sobre la nube con aplicaciones prácticas del mundo real y la orientación de expertos.
Joleen Bothma's photo

Joleen Bothma

12 min

blog

20 proyectos de análisis de datos para todos los niveles

Explora nuestra lista de proyectos de análisis de datos para principiantes, estudiantes de último curso y profesionales. La lista consta de proyectos guiados/no guiados y tutoriales con código fuente.
Abid Ali Awan's photo

Abid Ali Awan

17 min

R Project

blog

Las 8 mejores ideas de proyectos R para 2023

Descubra qué es R y todas las ventajas de utilizarlo, a la vez que ofrece ejemplos y nuevas ideas para un proyecto.
Elena Kosourova's photo

Elena Kosourova

16 min

Ver másVer más