Share via


Compilación y ejecución de una aplicación web de Python en contenedores localmente con MongoDB

Este artículo forma parte de un tutorial sobre cómo incluir e implementar una aplicación web de Python en contenedor en App de Azure Service. App Service le permite ejecutar aplicaciones web en contenedor e implementarlas mediante funcionalidades de integración continua e implementación continua (CI/CD) con Docker Hub, Azure Container Registry y Visual Studio Team Services. En esta parte del tutorial, aprenderá a compilar y ejecutar la aplicación web de Python en contenedores localmente. Este paso es opcional y no es necesario para implementar la aplicación de ejemplo en Azure.

La ejecución de una imagen de Docker localmente en el entorno de desarrollo requiere la instalación más allá de la implementación en Azure. Piense en ella como una inversión que pueda facilitar los ciclos de desarrollo futuros, especialmente cuando se mueve más allá de las aplicaciones de ejemplo y se empieza a crear sus propias aplicaciones web. Para implementar las aplicaciones de ejemplo para Django y Flask, puede omitir este paso y ir al siguiente paso de este tutorial. Siempre puede volver después de implementar en Azure y trabajar con estos pasos.

En el diagrama de servicio siguiente se resaltan los componentes descritos en este artículo.

A screenshot of the Tutorial - Containerized Python App on Azure with local part highlighted.

1. Clonar o descargar la aplicación de ejemplo

Clone el repositorio:

# Django
git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git

# Flask
git clone https://github.com/Azure-Samples/msdocs-python-flask-container-web-app.git

Después, vaya a esa carpeta:

# Django
cd msdocs-python-django-container-web-app

# Flask
cd msdocs-python-flask-container-web-app

2. Compilación de una imagen de Docker

Si usa una de las aplicaciones de ejemplo de marco disponibles para Django y Flask, está configurado para ir. Si está trabajando con su propia aplicación de ejemplo, eche un vistazo a cómo se configuran las aplicaciones de ejemplo, en particular el Dockerfile en el directorio raíz.

Estas instrucciones requieren Visual Studio Code y la extensión de Docker. Vaya a la carpeta de ejemplo que ha clonado o descargado y abra VS Code con el comando code ..

Nota:

Los pasos de esta sección requieren que se ejecute el demonio de Docker. En algunas instalaciones, por ejemplo, en Windows, debe abrir Docker Desktop, que inicia el demonio, antes de continuar.

Instrucciones Instantánea
Abra la extensión de Docker.

Si la extensión de Docker notifica un error "No se pudo conectar", asegúrese de que Docker está instalado y en ejecución. Si esta es la primera vez que trabaja con Docker, probablemente no tendrá ningún contenedor, imágenes ni registros conectados.
A screenshot showing how to open the Docker extension in Visual Studio Code.
Compile la imagen.
  • En el Explorador de proyectos que muestra los archivos del proyecto, haga clic con el botón derecho en dockerfile y seleccione Compilar imagen....

  • Como alternativa, puede usar la paleta de comandos (F1 o Ctrl+Mayús+P) y escribir "Docker Images: Build Images" para invocar el comando.

Para obtener más información sobre la sintaxis de Dockerfile, consulte la referencia de Dockerfile.
A screenshot showing how to build the Docker image in Visual Studio Code.
Confirme que se ha compilado la imagen.
  • Vaya a la sección IMAGES de la extensión de Docker.

  • Busque la imagen compilada recientemente. El nombre de la imagen de contenedor es "msdocspythoncontainerwebapp", que se establece en el archivo .vscode/tasks.json .

A screenshot showing how to confirm the built image in Visual Studio Code.

En este punto, ha creado una imagen localmente. La imagen que creó tiene el nombre "msdocspythoncontainerwebapp" y etiqueta "latest". Las etiquetas son una manera de definir información de versión, uso previsto, estabilidad u otra información. Para más información, consulte Recomendaciones para el etiquetado y control de versiones de las imágenes de contenedor.

Las imágenes compiladas a partir de VS Code o desde el uso de la CLI de Docker directamente también se pueden ver con la aplicación Docker Desktop .

3. Configuración de MongoDB

Para este tutorial, necesita una base de datos de MongoDB denominada restaurants_reviews y una colección denominada restaurants_reviews. Los pasos de esta sección muestran cómo usar una instalación local de MongoDB o Azure Cosmos DB para MongoDB para crear y acceder a la base de datos y la colección.

Importante

No use una base de datos de MongoDB que usará en producción. En este tutorial, almacenará el cadena de conexión de MongoDB en una variable de entorno. Esto hace que sea observable por cualquier persona capaz de inspeccionar el contenedor (por ejemplo, mediante docker inspect).

Paso 1: Instale MongoDB si aún no lo está.

Puede comprobar la instalación de MongoDB mediante el Shell de MongoDB (mongosh).

  • El siguiente comando escribe el shell y proporciona la versión del servidor mongosh y mongoDB instalado en el sistema:

    mongosh
    
  • El siguiente comando proporciona solo la versión del servidor de MongoDB instalado en el sistema:

    mongosh --quiet --exec 'db.version()'
    

Si estos comandos no funcionan, es posible que tenga que instalar explícitamente mongosh o conectar mongosh al servidor de MongoDB.

Una alternativa en algunas instalaciones es invocar directamente el demonio de Mongo.

mongod --version

Paso 2: Edite el archivo mongod.cfg para agregar la dirección IP del equipo.

El archivo de configuración mongod tiene una bindIp clave que define los nombres de host y las direcciones IP que MongoDB escucha para las conexiones de cliente. Agregue la dirección IP actual del equipo de desarrollo local. La aplicación de ejemplo que se ejecuta localmente en un contenedor de Docker se comunicará con la máquina host con esta dirección.

Por ejemplo, parte del archivo de configuración debe tener este aspecto:

net:
  port: 27017
  bindIp: 127.0.0.1,<local-ip-address>

Reinicie MongoDB para recoger los cambios en el archivo de configuración.

Paso 3: Crear una base de datos y una colección en la base de datos local de MongoDB.

Establezca el nombre de la base de datos en "restaurants_reviews" y el nombre de la colección en "restaurants_reviews". Puede crear una base de datos y una colección con la extensión mongoDB de VS Code, el shell de MongoDB (mongosh) o cualquier otra herramienta compatible con MondoDB.

Para el shell de MongoDB, estos son comandos de ejemplo para crear la base de datos y la colección:

> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit

En este momento, el cadena de conexión local de MongoDB es "mongodb://127.0.0.1:27017/", el nombre de la base de datos es "restaurants_reviews" y el nombre de la colección es "restaurants_reviews".

4. Ejecutar la imagen localmente en un contenedor

Con información sobre cómo conectarse a mongoDB, está listo para ejecutar el contenedor localmente. La aplicación de ejemplo espera que la información de conexión de MongoDB se pase en variables de entorno. Hay varias maneras de obtener las variables de entorno que se pasan al contenedor localmente. Cada uno tiene ventajas y desventajas en términos de seguridad. Debe evitar la comprobación de cualquier información confidencial o dejar información confidencial en el código del contenedor.

Nota:

Cuando se implementa en Azure, la aplicación web obtendrá información de conexión de los valores de entorno establecidos como opciones de configuración de App Service y ninguna de las modificaciones del escenario del entorno de desarrollo local se aplica.

Instrucciones Instantánea
En la carpeta .vscode de la aplicación de ejemplo, el archivo settings.json define lo que sucede cuando se usa la extensión de Docker y se selecciona Ejecutar o Ejecutar interactivo en el menú contextual de una etiqueta. El archivo settings.json contiene dos plantillas para los (MongoDB local) escenarios y (MongoDB Azure) .

Si usa una base de datos local de MongoDB:
  • Reemplace ambas instancias de <YOUR_IP_ADDRESS> por la dirección IP.

  • Reemplace ambas instancias de por el cadena de conexión de la base de <CONNECTION_STRING> datos de MongoDB.

Si usa una base de datos de Azure Cosmos DB para MongoDB:
  • Reemplace ambas instancias de <CONNECTION_STRING> por el cadena de conexión de Azure Cosmos DB para MongoDB.
Establezca la docker.dockerPath configuración usada por las plantillas. Para establecer docker.dockerPath, abra la paleta de comandos de VS Code (Ctrl+Mayús+P), escriba "Preferencias: Abrir área de trabajo Configuración", escriba "docker.dockerPath" en el cuadro Configuración de búsqueda. Escriba "docker" (sin las comillas) para el valor de la configuración.

Nota:

Se supone que tanto el nombre de la base de datos como el nombre de la colección son restaurants_reviews.

A screenshot showing the settings.json file Visual Studio Code.
Ejecute la imagen.
  • En la sección IMAGES de la extensión docker, busque la imagen compilada.

  • Expanda la imagen para buscar la etiqueta más reciente, haga clic con el botón derecho y seleccione Ejecutar interactiva.

  • Se le pedirá que seleccione la tarea adecuada para su escenario, ya sea "Configuración de ejecución interactiva (local de MongoDB)" o "Configuración de ejecución interactiva (Azure de MongoDB)".

Con la ejecución interactiva, verá las instrucciones de impresión en el código, lo que puede resultar útil para la depuración. También puede seleccionar Ejecutar que no es interactivo y no mantiene abierta la entrada estándar.

Importante

Este paso produce un error si el perfil de terminal predeterminado está establecido en (Windows) Símbolo del sistema. Para cambiar el perfil predeterminado, abra la paleta de comandos de VS Code (Ctrl+Mayús+P), escriba "Terminal: Seleccionar perfil predeterminado" y, a continuación, seleccione otro perfil en el menú desplegable; por ejemplo, Git Bash o PowerShell.

A screenshot showing how to run a Docker container in Visual Studio Code.
Confirme que el contenedor se está ejecutando.
  • En la sección CONTENEDORES de la extensión de Docker, busque el contenedor.

  • Expanda el nodo Contenedores individuales y confirme que se está ejecutando "msdocspythoncontainerwebapp". Debería ver un símbolo de triángulo verde junto al nombre del contenedor si se está ejecutando.

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
Pruebe la aplicación web haciendo clic con el botón derecho en el nombre del contenedor y seleccionando Abrir en el explorador.

El explorador se abrirá en el explorador predeterminado como "http://127.0.0.1:8000" para Django o "http://127.0.0.1:5000/" para Flask.
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
Detención del contenedor .
  • En la sección CONTENEDORES de la extensión de Docker, busque el contenedor en ejecución.

  • Haga clic con el botón derecho en el contenedor y seleccione Detener.

A screenshot showing how to stop a running Docker container in Visual Studio Code.

Sugerencia

También puede ejecutar el contenedor seleccionando una configuración de ejecución o depuración. Se llama a las tareas de extensión de Docker en tasks.json al ejecutar o depurar. La tarea a la que se llama depende de la configuración de inicio que seleccione. Para la tarea "Docker: Python (mongoDB local)", especifique <YOUR-IP-ADDRESS>. Para la tarea "Docker: Python (MongoDB Azure)", especifique <CONNECTION-STRING>.

También puede iniciar un contenedor desde una imagen y detenerlo con la aplicación Docker Desktop .

Paso siguiente