Crie e execute um aplicativo Web Python em contêiner localmente com o MongoDB

Este artigo faz parte de um tutorial sobre como contentorizar e implementar uma aplicação Web Python em contentores no Serviço de Aplicações do Azure. O Serviço de Aplicativo permite que você execute aplicativos Web em contêineres e implante por meio de recursos de integração contínua/implantação contínua (CI/CD) com o Docker Hub, o Registro de Contêiner do Azure e o Visual Studio Team Services. Nesta parte do tutorial, você aprenderá a criar e executar o aplicativo Web Python em contêiner localmente. Esta etapa é opcional e não é necessária para implantar o aplicativo de exemplo no Azure.

A execução de uma imagem do Docker localmente em seu ambiente de desenvolvimento requer uma configuração além da implantação no Azure. Pense nisso como um investimento que pode facilitar os ciclos de desenvolvimento futuros, especialmente quando você vai além de aplicativos de exemplo e começa a criar seus próprios aplicativos Web. Para implantar os aplicativos de exemplo para Django e Flask, você pode pular esta etapa e ir para a próxima etapa neste tutorial. Você sempre pode retornar após a implantação no Azure e seguir estas etapas.

O diagrama de serviço a seguir destaca os componentes abordados neste artigo.

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

1. Clone ou baixe o aplicativo de exemplo

Clone o repositório:

# 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

Em seguida, navegue até essa pasta:

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

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

2. Crie uma imagem do Docker

Se você estiver usando um dos aplicativos de exemplo de estrutura disponíveis para Django e Flask, você está pronto para ir. Se você estiver trabalhando com seu próprio aplicativo de exemplo, dê uma olhada para ver como os aplicativos de exemplo são configurados, em particular o Dockerfile no diretório raiz.

Estas instruções requerem o Visual Studio Code e a extensão Docker. Vá para a pasta de exemplo que você clonou ou baixou e abra o VS Code com o comando code ..

Nota

As etapas nesta seção exigem que o daemon do Docker esteja em execução. Em algumas instalações, por exemplo, no Windows, você precisa abrir o Docker Desktop, que inicia o daemon, antes de prosseguir.

Instruções Captura de ecrã
Abra a extensão Docker.

Se a extensão do Docker relatar um erro "Falha ao conectar", verifique se o Docker está instalado e em execução. Se esta for a primeira vez que você trabalha com o Docker, você provavelmente não terá contêineres, imagens ou registros conectados.
A screenshot showing how to open the Docker extension in Visual Studio Code.
Construa a imagem.
  • No Project Explorer mostrando os arquivos do projeto, clique com o botão direito do mouse no Dockerfile e selecione Build Image....

  • Como alternativa, você pode usar a Paleta de Comandos (F1 ou Ctrl+Shift+P) e digitar "Docker Images: Build Images" para invocar o comando.

Para obter mais informações sobre a sintaxe do Dockerfile, consulte a referência do Dockerfile.
A screenshot showing how to build the Docker image in Visual Studio Code.
Confirme se a imagem foi construída.
  • Vá para a seção IMAGENS da extensão Docker.

  • Procure uma imagem criada recentemente. O nome da imagem do contêiner é "msdocspythoncontainerwebapp", que é definido no arquivo .vscode/tasks.json .

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

Neste ponto, você construiu uma imagem localmente. A imagem que você criou tem o nome "msdocspythoncontainerwebapp" e a tag "latest". As tags são uma maneira de definir informações de versão, uso pretendido, estabilidade ou outras informações. Para obter mais informações, consulte Recomendações para marcação e controle de versão de imagens de contêiner.

As imagens criadas a partir do VS Code ou do uso direto da CLI do Docker também podem ser visualizadas com o aplicativo Docker Desktop .

3. Configurar o MongoDB

Para este tutorial, você precisa de um banco de dados MongoDB chamado restaurants_reviews e uma coleção chamada restaurants_reviews. As etapas nesta seção mostram como usar uma instalação local do MongoDB ou do Azure Cosmos DB para MongoDB para criar e acessar o banco de dados e a coleção.

Importante

Não use um banco de dados MongoDB que você usará na produção. Neste tutorial, você armazenará a cadeia de conexão MongoDB em uma variável de ambiente. Isso o torna observável por qualquer pessoa capaz de inspecionar seu contêiner (por exemplo, usando docker inspect).

Passo 1: Instale o MongoDB se ainda não estiver.

Você pode verificar a instalação do MongoDB usando o MongoDB Shell (mongosh).

  • O comando a seguir entra no shell e fornece a versão do servidor mongosh e mongoDB instalado no seu sistema:

    mongosh
    
  • O comando a seguir fornece apenas a versão do servidor MongoDB instalada no seu sistema:

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

Se esses comandos não funcionarem, talvez seja necessário instalar explicitamente o mongosh ou conectar o mongosh ao seu servidor MongoDB.

Uma alternativa em algumas instalações é invocar diretamente o daemon Mongo.

mongod --version

Passo 2: Edite o arquivo mongod.cfg para adicionar o endereço IP do seu computador.

O arquivo de configuração mongod tem uma bindIp chave que define nomes de host e endereços IP que o MongoDB escuta para conexões de cliente. Adicione o IP atual do seu computador de desenvolvimento local. O aplicativo de exemplo executado localmente em um contêiner do Docker se comunicará com a máquina host com esse endereço.

Por exemplo, parte do arquivo de configuração deve ter esta aparência:

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

Reinicie o MongoDB para pegar as alterações no arquivo de configuração.

Etapa 3: Crie um banco de dados e uma coleção no banco de dados MongoDB local.

Defina o nome do banco de dados como "restaurants_reviews" e o nome da coleção como "restaurants_reviews". Você pode criar um banco de dados e uma coleção com a extensão VS Code MongoDB, o MongoDB Shell (mongosh) ou qualquer outra ferramenta compatível com MondoDB.

Para o shell do MongoDB, aqui estão exemplos de comandos para criar o banco de dados e a coleção:

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

Neste ponto, sua cadeia de conexão MongoDB local é "mongodb://127.0.0.1:27017/", o nome do banco de dados é "restaurants_reviews" e o nome da coleção é "restaurants_reviews".

4. Execute a imagem localmente em um contêiner

Com informações sobre como se conectar a um MongoDB, você está pronto para executar o contêiner localmente. O aplicativo de exemplo espera que as informações de conexão do MongoDB sejam passadas em variáveis de ambiente. Há várias maneiras de obter variáveis de ambiente passadas para o contêiner localmente. Cada um tem vantagens e desvantagens em termos de segurança. Você deve evitar fazer check-in de qualquer informação sensível ou deixar informações confidenciais em código no contêiner.

Nota

Quando implantado no Azure, o aplicativo Web obterá informações de conexão de valores de ambiente definidos como definições de configuração do Serviço de Aplicativo e nenhuma das modificações para o cenário de ambiente de desenvolvimento local se aplica.

Instruções Captura de ecrã
Na pasta .vscode do aplicativo de exemplo, o arquivo settings.json define o que acontece quando você usa a extensão Docker e seleciona Executar ou Executar interativo no menu de contexto de uma tag. O arquivo settings.json contém dois modelos cada para os (MongoDB local) cenários e (MongoDB Azure) .

Se você estiver usando um banco de dados MongoDB local:
  • Substitua ambas as instâncias de <YOUR_IP_ADDRESS> pelo seu endereço IP.

  • Substitua ambas as instâncias de pela cadeia de conexão do banco de <CONNECTION_STRING> dados MongoDB.

Se você estiver usando um banco de dados do Azure Cosmos DB para MongoDB:
  • Substitua ambas as instâncias da pela cadeia de <CONNECTION_STRING> conexão do Azure Cosmos DB para MongoDB.
Defina a docker.dockerPath definição de configuração usada pelos modelos. Para definir docker.dockerPatho , abra a paleta de comandos VS Code (Ctrl+Shift+P), digite "Preferências: abrir configurações do espaço de trabalho" e digite "docker.dockerPath" na caixa Configurações de pesquisa. Digite "docker" (sem as aspas) para o valor da configuração.

Nota

Presume-se que o nome do banco de dados e o nome da coleção sejam restaurants_reviews.

A screenshot showing the settings.json file Visual Studio Code.
Execute a imagem.
  • Na seção IMAGENS da extensão Docker, localize a imagem construída.

  • Expanda a imagem para encontrar a tag mais recente, clique com o botão direito do mouse e selecione Executar interativo.

  • Você será solicitado a selecionar a tarefa apropriada para seu cenário, "Configuração de execução interativa (MongoDB local)" ou "Configuração de execução interativa (MongoDB Azure)".

Com a execução interativa, você verá todas as instruções de impressão no código, o que pode ser útil para depuração. Você também pode selecionar Executar , que não é interativo e não mantém a entrada padrão aberta.

Importante

Esta etapa falhará se o perfil de terminal padrão estiver definido como Prompt de Comando (Windows). Para alterar o perfil padrão, abra a paleta de comandos VS Code (Ctrl+Shift+P), digite "Terminal: Select Default Profile" e selecione um perfil diferente no menu suspenso, por exemplo, Git Bash ou PowerShell.

A screenshot showing how to run a Docker container in Visual Studio Code.
Confirme se o contêiner está em execução.
  • Na seção CONTAINERS da extensão do Docker, localize o contêiner.

  • Expanda o nó Contêineres Individuais e confirme se "msdocspythoncontainerwebapp" está em execução. Você verá um símbolo de triângulo verde ao lado do nome do contêiner se ele estiver em execução.

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
Teste o aplicativo Web clicando com o botão direito do mouse no nome do contêiner e selecionando Abrir no navegador.

O navegador será aberto no seu navegador padrão como "http://127.0.0.1:8000" para Django ou "http://127.0.0.1:5000/" para Flask.
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
Pare o contentor.
  • Na seção CONTAINERS da extensão do Docker, localize o contêiner em execução.

  • Clique com o botão direito do mouse no contêiner e selecione Parar.

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

Gorjeta

Você também pode executar o contêiner selecionando uma configuração de execução ou depuração. As tarefas de extensão do Docker em tasks.json são chamadas quando você executa ou depura. A tarefa chamada depende da configuração de inicialização selecionada. Para a tarefa "Docker: Python (MongoDB local)", especifique <YOUR-IP-ADDRESS>. Para a tarefa "Docker: Python (MongoDB Azure)", especifique <CONNECTION-STRING.>

Você também pode iniciar um contêiner a partir de uma imagem e pará-lo com o aplicativo Docker Desktop .

Próximo passo