Inicio

Codificación en Python con VS Code mediante Contenedor Docker

¿Alguna vez intentó compartir su código Python con un colega solo para pasar horas depurando problemas del tipo “funciona en mi máquina”? Los contenedores Docker son como contenedores de envío para código: empaquetan su entorno Python, bibliotecas y dependencias en una caja sellada que funciona igual en todas partes. Además, obtiene acceso a decenas de miles de imágenes preconstruidas en Docker Hub, donde los desarrolladores publican entornos listos para usar, evitando la instalación manual de software. Este tutorial muestra cómo ejecutar Python en un entorno aislado y reproducible usando VS Code y Docker Desktop.

Conceptos Clave

Lo Que Necesitará

Paso 1: Instalar Docker Desktop

Paso 2: Instalar la Extensión Dev Containers

Paso 3: Crear una Carpeta de Proyecto Python

Paso 4: Crear el Dockerfile

# Choose the official Python slim image
FROM python:3.12-slim

# 1. Install system dependencies
RUN apt-get update && apt-get install -y \
    git curl build-essential && \
    rm -rf /var/lib/apt/lists/*

# 2. Install Python packages for data science and web apps
RUN pip install --no-cache-dir \
    pandas matplotlib seaborn streamlit jupyter

# 3. Install Node.js LTS from NodeSource
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g npm@latest

# 4. Install Claude Code globally
RUN npm install -g @anthropic-ai/claude-code

# 5. Expose Streamlit port
EXPOSE 8501

Paso 5: Crear la Configuración del Dev Container

{
  "name": "Python in Docker",
  "build": {
    "dockerfile": "Dockerfile"
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-python.python",
        "ms-python.debugpy"
      ]
    }
  },
  "forwardPorts": [8501],
  "postCreateCommand": "python3 --version"
}

Paso 6: Crear un Script de Análisis de Datos en Python

# Simple data analysis using the iris dataset
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

# Load the iris dataset
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = iris.target

# Display first few rows
print(df.head())

# Summary statistics
print("\nSummary statistics:")
print(df.describe())

# Create histograms
plt.figure(figsize=(10, 6))
plt.hist(df['sepal length (cm)'], bins=20, alpha=0.7, label='Sepal Length')
plt.hist(df['sepal width (cm)'], bins=20, alpha=0.7, label='Sepal Width')
plt.xlabel('Measurement (cm)')
plt.ylabel('Frequency')
plt.title('Iris Sepal Measurements')
plt.legend()
plt.show()

Paso 7: Crear una Aplicación Web Streamlit

import streamlit as st
import numpy as np
import matplotlib.pyplot as plt

st.title("Old Faithful Geyser Data")

# Slider for number of bins
bins = st.slider("Number of bins:", min_value=5, max_value=50, value=30)

# Generate sample data (simulating Old Faithful eruption durations)
np.random.seed(42)
data = np.concatenate([
    np.random.normal(2, 0.5, 100),
    np.random.normal(4.5, 0.5, 150)
])

# Create histogram
fig, ax = plt.subplots()
ax.hist(data, bins=bins, edgecolor='black')
ax.set_xlabel('Eruption Duration (minutes)')
ax.set_ylabel('Frequency')
ax.set_title(f'Histogram with {bins} bins')

st.pyplot(fig)

Paso 8: Reabrir en Contenedor

Paso 9: Comprender el Entorno del Contenedor

Ahora está codificando dentro de un contenedor Linux. Exploremos lo que esto significa.

pwd

Verá /workspaces/python-docker-demo - esta es su carpeta de proyecto dentro del contenedor.

ls

Verá las carpetas que creó: .devcontainer/, python/, etc.

cd ..
ls

Solo verá python-docker-demo/ - el contenedor está aislado. No puede acceder a otras carpetas de su computadora, Escritorio o Documentos. Este aislamiento garantiza que su entorno Python sea limpio y reproducible.

cd python-docker-demo

Paso 10: Ejecutar Código Python Línea por Línea

El contenedor tiene Python preinstalado con paquetes de ciencia de datos. Ejecutemos el script de análisis.

Paso 11: Ejecutar la Aplicación Streamlit

El proyecto incluye una aplicación Streamlit de demostración que crea un histograma interactivo.

cd python
streamlit run app.py

Paso 12: Hacer un Cambio Sencillo

Modifiquemos la aplicación para ver cómo funciona el desarrollo.

st.title("My First Python Docker App")

Paso 13: Comprender el Dockerfile (Opcional)

Partes clave:

Otras imágenes Python que puede usar:

Después de cambiar la imagen base, reconstruya el contenedor para aplicar los cambios.

Paso 14: Instalar Paquetes Python en la Imagen Docker (Opcional)

Los paquetes instalados mediante pip en la terminal (pip install package) son temporales y desaparecen cuando reconstruye el contenedor. Para hacer permanentes los paquetes, agréguelos al Dockerfile.

RUN pip install --no-cache-dir \
    pandas matplotlib seaborn streamlit jupyter scikit-learn
import sklearn
print(sklearn.__version__)

Si muestra la versión sin errores, el paquete está instalado permanentemente.

Próximos Pasos

Solución de Problemas

Descripción General del Flujo de Trabajo

Esta configuración proporciona un entorno de desarrollo Python profesional:

Flujo de Trabajo Diario

Una vez configurado todo, esta es su rutina diaria:

  1. Iniciar Docker Desktop - Abra la aplicación y espere el indicador de estado verde (Docker debe estar ejecutándose)
  2. Abrir VS Code - Inicie VS Code y abra su carpeta de proyecto
  3. Reabrir en Contenedor - Si no está ya en el contenedor, haga clic en el ícono verde (inferior izquierdo) y seleccione Reopen in Container
  4. Escribir y ejecutar código - Edite archivos .py, ejecute línea por línea con Shift+Enter, o ejecute aplicaciones con streamlit run app.py
  5. Guardar su trabajo - Sus archivos de código (.py, .ipynb) se guardan en su computadora y persisten entre sesiones
  6. Confirmar y enviar - Use GitHub Desktop para confirmar sus cambios y enviarlos al repositorio

Creado por Steven Ge el 7 de diciembre de 2025.