Conceptos básicos de Docker que los científicos de datos deben dominar

Hola a todos, Python y el conjunto Python de bibliotecas de análisis de datos y aprendizaje automático, como pandas y scikit-learn, pueden ayudarle a desarrollar aplicaciones de ciencia de datos fácilmente. Sin embargo, la gestión de dependencias en Python es un desafío y, cuando se trabaja en proyectos de ciencia de datos, lleva mucho tiempo instalar varias bibliotecas y realizar un seguimiento de las versiones de las bibliotecas que se utilizan.

Si otros desarrolladores quieren ejecutar su código y contribuir al proyecto, primero deben configurar el entorno del proyecto en sus máquinas antes de poder ejecutar el código. Incluso las pequeñas diferencias, como las diferentes versiones de la biblioteca, pueden ser perjudiciales para el proyecto. El código tiene efectos destructivos. Aquí es donde puede utilizar Docker, que simplifica el proceso de desarrollo y promueve una colaboración perfecta.

Este artículo cubrirá los conceptos básicos de Docker y cómo utilizar Docker para contener aplicaciones de ciencia de datos.

Definición de Docker

Docker es una herramienta de contenedorización que le permite crear y compartir aplicaciones portátiles llamadas imágenes.

Además del código fuente, su aplicación contendrá un conjunto de dependencias, configuración requerida, herramientas del sistema y más. Por ejemplo, en un proyecto de ciencia de datos, debe instalar todas las bibliotecas necesarias en un entorno de desarrollo (preferiblemente un entorno virtual) y asegurarse de que está utilizando la última versión de Python compatible con las bibliotecas.

Sin embargo, al intentar ejecutar la aplicación en otra máquina, es posible que aún encuentre problemas, que generalmente se deben a discrepancias en la configuración y las versiones de la biblioteca en el entorno de desarrollo entre las dos máquinas. Con Docker, se pueden empaquetar aplicaciones, sus dependencias y configuraciones. Por lo tanto, se puede definir un entorno aislado, reproducible y consistente para la aplicación en varias máquinas host.

Conceptos básicos de Docker

Primero, una breve introducción a algunos conceptos y terminología:

imagen acoplable

Las imágenes de Docker son componentes portátiles de aplicaciones.

contenedor acoplable

Cuando ejecuta una imagen, en realidad ejecuta la aplicación dentro de un entorno de contenedor. Por lo tanto, una instancia que ejecuta una imagen es un contenedor.

registro acoplable

El registro de Docker es el sistema utilizado para almacenar y distribuir imágenes de Docker. Una vez que las aplicaciones se contienen en imágenes de Docker, pueden ponerse a disposición de la comunidad de desarrolladores enviándolas a un registro de imágenes. DockerHub es el registro público más grande y todas las imágenes se extraen de DockerHub de forma predeterminada.

Cómo Docker simplifica el desarrollo

Dado que los contenedores proporcionan un entorno aislado para las aplicaciones, otros desarrolladores ahora sólo necesitan instalar Docker en sus propias máquinas. Pueden extraer la imagen de Docker e iniciar el contenedor en la máquina remota con un solo comando sin tener que preocuparse por el complicado proceso de instalación.

Al desarrollar una aplicación, es común crear y probar varias versiones de la misma aplicación. Si usa Docker, puede ejecutar varias versiones de la misma aplicación en diferentes contenedores en el mismo entorno sin ningún conflicto.

Además de simplificar el desarrollo, Docker también simplifica la implementación y ayuda a los equipos de desarrollo y operaciones a colaborar de manera efectiva. Del lado del servidor, el equipo de operaciones no necesita perder tiempo resolviendo conflictos complejos de versiones y dependencias. Simplemente utilizan imágenes de Docker para implementar sus aplicaciones, asegurándose de utilizar los mismos contenedores en producción que en desarrollo.

Comandos básicos de Docker

A continuación se ofrece un vistazo rápido a algunos comandos básicos de Docker, la mayoría de los cuales se utilizarán a lo largo de este artículo.

Orden Función
docker ps Listar todos los contenedores en ejecución
docker pull image-nameExtraer de DockerHub de forma predeterminadaimage-name
docker images Listar todas las imágenes disponibles
docker run image-name Iniciar contenedor desde la imagen
docker start container-id Reiniciar un contenedor detenido
docker stop container-id Detener un contenedor en ejecución
docker build path Utilice las instrucciones del Dockerfile para crear una imagen en la ruta especificada

NOTA: Si aún no ha creado dockerun grupo para el usuario, ejecute todos los comandos con sudoel prefijo.

Contenga aplicaciones de ciencia de datos con Docker

En esta sección, incluiremos en contenedores una aplicación de ciencia de datos simple utilizando Docker.

1. Modelo de predicción del precio de la vivienda

A continuación se muestra un modelo de regresión lineal que predice un valor objetivo en función de las características de entrada: precio medio de la vivienda. El modelo se construye utilizando el conjunto de datos de vivienda de California:

# house_price_prediction.py
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 加载加利福尼亚州住房数据集
data = fetch_california_housing(as_frame=True)
X = data.data
y = data.target

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 标准化特征
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 对测试集进行预测
y_pred = model.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"Mean Squared Error: {mse:.2f}")
print(f"R-squared Score: {r2:.2f}")

Sabemos scikit-learnque la dependencia es obligatoria y si miramos de cerca el código, al cargar el conjunto de datos, se configurará as_framepara True,que también sea obligatoria pandas. requirements.txtEl archivo se ve así:

pandas==2.0
scikit-learn==1.2.2

2. Crear un archivo Docker

Hasta ahora, hay archivos house_price_prediction.pyy requirements.txtarchivos de código fuente. Ahora es el momento de definir cómo construir la imagen desde la aplicación. El Dockerfile se utiliza para crear la definición de construcción de la imagen a partir de los archivos de código fuente de la aplicación. Un Dockerfile es un archivo de texto que contiene instrucciones paso a paso para crear una imagen de Docker.

El siguiente es un Dockerfile de muestra:

# 使用Python官方镜像作为基础镜像
FROM python:3.9-slim

# 设置容器中的工作目录
WORKDIR /app

# 将`requirements.txt`文件复制到容器中
COPY requirements.txt .

# 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt

# 将脚本文件复制到容器中
COPY house_price_prediction.py .

# 设置运行Python脚本的命令
CMD ["python", "house_price_prediction.py"]

A continuación, analice el contenido de Dockerfile:

  • Todos los Dockerfiles FROMcomienzan con instrucciones que especifican una imagen base. La imagen base es la imagen en la que se basa su imagen. Este ejemplo utiliza la imagen disponible para Python 3.9. FROMLa directiva le dice a Docker que cree la imagen actual a partir de la imagen base especificada.

  • WORKDIRappEl comando establece el directorio de trabajo para todos los comandos posteriores (en este caso ).

  • Luego, los archivos se requirements.txtcopian al sistema de archivos del contenedor.

  • El comando RUN ejecutará el comando especificado en el shell dentro del contenedor. El ejemplo utilizado aquí pipinstala todas las dependencias necesarias.

  • Luego copie el archivo de código fuente (script de Python house_price_prediction.py) en el sistema de archivos del contenedor.

  • Finalmente, CMDse refiere a las instrucciones a ejecutar cuando se inicia el contenedor. Este ejemplo requiere ejecutar house_price_prediction.pyun script. Dockerfile debe contener solo una CMDinstrucción.

3. Construye la imagen

Ahora que se ha definido el Dockerfile, puede docker buildcrear la imagen de Docker ejecutando:

docker build -t ml-app .

Las opciones -tpermiten al usuario especificar un nombre y una etiqueta para la imagen, en el formato name:tag. La etiqueta predeterminada es latest.

El proceso de generación dura aproximadamente unos minutos:

Sending build context to Docker daemon  4.608kB
Step 1/6 : FROM python:3.9-slim
3.9-slim: Pulling from library/python
5b5fe70539cd: Pull complete 
f4b0e4004dc0: Pull complete 
ec1650096fae: Pull complete 
2ee3c5a347ae: Pull complete 
d854e82593a7: Pull complete 
Digest: sha256:0074c6241f2ff175532c72fb0fb37264e8a1ac68f9790f9ee6da7e9fdfb67a0e
Status: Downloaded newer image for python:3.9-slim
 ---> 326a3a036ed2
Step 2/6 : WORKDIR /app
...
...
...
Step 6/6 : CMD ["python", "house_price_prediction.py"]
 ---> Running in 7fcef6a2ab2c
Removing intermediate container 7fcef6a2ab2c
 ---> 2607aa43c61a
Successfully built 2607aa43c61a
Successfully tagged ml-app:latest

Después de generar la imagen de Docker, ejecute docker imagesel comando y el usuario verá que ml-appla imagen también está incluida.

docker images

imagen

docker runLas imágenes de Docker se pueden ejecutar usando el comando ml-app:

docker run ml-app

imagen

Esto permite crear la primera aplicación de ciencia de datos dockermediante la creación de una cuenta DockerHub y las imágenes se pueden enviar a esa cuenta (o a un repositorio privado dentro de la organización).

En resumen, espero que este tutorial introductorio de Docker le resulte útil. Puede encontrar el código utilizado en el repositorio de códigos de GitHub. A continuación, instale Docker en su computadora y pruebe este ejemplo, o Dockerize la aplicación que prefiera. La forma más sencilla de instalar Docker en su computadora es usar Docker Desktop: obtiene un cliente CLI de Docker y una interfaz GUI para administrar contenedores fácilmente.

Supongo que te gusta

Origin blog.csdn.net/csdn1561168266/article/details/132343991
Recomendado
Clasificación