Compartilhar via


Criar e executar um aplicativo Web Python em contêineres localmente com o MongoDB

Este artigo faz parte de um tutorial sobre como conteinerizar e implantar um aplicativo Web Python em contêineres no Serviço de Aplicativo 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êineres 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 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 dos 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 ignorar esta etapa e ir para a próxima etapa neste tutorial. Você sempre pode retornar após a implantação no Azure e trabalhar com essas 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

Clonar 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, acesse esta pasta:

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

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

2. Criar 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 estão configurados, em particular o Dockerfile no diretório raiz.

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

Observação

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 continuar.

Instruções Captura de tela
Abra a extensão do 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 sua primeira vez trabalhando 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.
Crie a imagem.
  • No Project Explorer mostrando os arquivos de 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 IMAGES da extensão do Docker.

  • Procure a 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ê criou 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 mais informações, vejaRecomendaçõ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 exibidas 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 do 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 em seu sistema:

    mongosh
    
  • O comando a seguir fornece apenas a versão do servidor MongoDB instalada em 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 chave que define nomes de host e endereços IP que o MongoDB escuta conexões de bindIp cliente. Adicione o IP atual do 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 obter alterações no arquivo de configuração.

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

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 os comandos de exemplo para criar o banco de dados e a coleção:

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

Neste ponto, a cadeia de conexão local do MongoDB é "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 confidencial ou deixar informações confidenciais em código no contêiner.

Observação

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 tela
Na pasta .vscode do aplicativo de exemplo, o arquivo settings.json define o que acontece quando você usa a extensão do Docker e seleciona Executar ou Executar interativo no menu de contexto de uma Tag. O arquivo settings.json contém dois modelos 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 do MongoDB.

Se você estiver usando um banco de dados do Azure Cosmos DB para MongoDB:
  • Substitua ambas as instâncias de 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 do 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.

Observação

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 IMAGES da extensão do Docker, localize a imagem criada.

  • 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 (Windows) Prompt de Comando. Para alterar o perfil padrão, abra a Paleta de Comandos do VS Code (Ctrl+Shift+P), digite "Terminal: Selecionar Perfil Padrão" 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 em 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 contêiner .
  • 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.

Dica

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 interrompê-lo com o aplicativo Docker Desktop .

Próxima etapa