Share via


MongoDB を使用してローカル環境でコンテナー化された Python Web アプリをビルドして実行する

この記事は、Python Web アプリをコンテナー化し、そのコンテナー化されたアプリを Azure App Service にデプロイする方法に関するチュートリアルの一部です。 App Service を使用すると、コンテナー化された Web アプリを実行すること、および Docker Hub、Azure Container Registry、Visual Studio Team Services を使用した継続的インテグレーション/継続的デプロイ (CI/CD) 機能を通じてデプロイを行うことができます。 チュートリアルのこの部分では、コンテナー化された Python Web アプリをローカルでビルドして実行する方法について説明します。 "この手順は省略可能であり、サンプル アプリを Azure にデプロイする必要はありません。"

開発環境で Docker イメージをローカル実行するには、Azure へのデプロイ以外のセットアップが必要です。 これは、今後の開発サイクルを簡単にすることができる投資と考えてください (特にサンプル アプリを超えた独自の Web アプリを作成開始する場合)。 DjangoFlask 用のサンプル アプリをデプロイする場合、この手順はスキップして、このチュートリアルの次の手順に進むことができます。 Azure へのデプロイ後、いつでも戻ってこれらの手順を実行できます。

次のサービス図では、この記事で説明するコンポーネントが強調表示されています。

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

1. サンプル アプリを複製またはダウンロードする

リポジトリを複製します。

# 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

次に、そのフォルダーに移動します。

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

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

2. Docker イメージをビルドする

DjangoFlask で使用できるフレームワーク サンプル アプリのいずれかを使用する場合は、次の手順に進んでください。 独自のサンプル アプリを使用する場合、サンプル アプリの設定方法 (特にルート ディレクトリ内の Dockerfile) を確認してください。

これらの手順では、Visual Studio CodeDocker 拡張機能が必要です。 複製またはダウンロードしたサンプル フォルダーに移動し、コマンド code . を使用して VS Code を開きます。

Note

このセクションの手順では、Docker デーモンを実行する必要があります。 Windows などの一部のインストールでは、続行する前に、デーモンを起動する Docker Desktop を開く必要があります。

手順 Screenshot
Docker 拡張機能を開きます。

Docker 拡張機能で "接続に失敗しました" というエラーが報告された場合は、Docker がインストールされ、実行されていることを確認します。 Docker を初めて使用する場合は、コンテナー、イメージ、または接続されたレジストリがない可能性があります。
A screenshot showing how to open the Docker extension in Visual Studio Code.
イメージをビルドします。
  • プロジェクト ファイルが表示されているプロジェクト エクスプローラーで、Dockerfile を右クリックし、[Build Image...] (イメージのビルド...) を選択します。

  • また、コマンド パレット (F1 または Ctrl + Shift + P) を使用し、「Docker Images: Build Images」と入力してコマンドを呼び出すこともできます。

Dockerfile の構文について詳しくは、Dockerfile のリファレンスに関するページを参照してください。
A screenshot showing how to build the Docker image in Visual Studio Code.
イメージがビルドされたことを確認します。
  • Docker 拡張機能の [IMAGES] (イメージ) セクションに移動します。

  • 最近ビルドされたイメージを探します。 コンテナー イメージの名前は "msdocspythoncontainerwebapp" で、.vscode/tasks.json ファイルで設定されています。

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

この時点で、イメージをローカルにビルドしています。 作成したイメージの名前は "msdocspythoncontainerwebapp" で、タグは "latest" です。 タグは、バージョン情報、使用目的、安定性、またはその他の情報を定義するための方法です。 詳細については、「コンテナー イメージのタグ付けとバージョン管理に関する推奨事項」を参照してください。

VS Code からビルドされたイメージ、または Docker CLI を直接使用してビルドされたイメージは、Docker Desktop アプリケーションでも表示できます。

3. MongoDB を設定する

このチュートリアルでは、restaurants_reviewsという名前の MongoDB データベースと、restaurants_reviewsという名前のコレクションが必要です。 このセクションの手順では、MongoDB または MongoDB 用 Azure Cosmos DB のローカル インストールを使用して、データベースとコレクションを作成してアクセスする方法について説明します。

重要

運用環境で使用する MongoDB データベースは使用しないでください。 このチュートリアルでは、MongoDB 接続文字列を環境変数に格納します。 これにより、コンテナーを検査できるすべてのユーザーが観察できるようになります (たとえば、使用 docker inspect)。

手順 1:MongoDB がまだインストールされていない場合はインストールします。

MongoDB シェル (mongosh) を使用して、MongoDB のインストールにチェックできます。

  • 次のコマンドはシェルを入力し、システムにインストールされている mongosh サーバーと mongoDB サーバーの両方のバージョンを提供します。

    mongosh
    
  • 次のコマンドは、システムにインストールされている MongoDB サーバーのバージョンのみを示しています。

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

これらのコマンドが機能しない場合は、mongosh を明示的にインストールするか、MongoDB サーバーに mongosh を接続する必要があります。

一部のインストールでは、Mongo デーモンを直接呼び出す方法もあります。

mongod --version

手順 2:mongod.cfg ファイルを編集してコンピューターの IP アドレスを追加します。

mongod 構成ファイルには、MongoDB がクライアント接続をリッスンするホスト名と IP アドレスを定義する bindIp キーがあります。 ローカル開発コンピューターの現在の IP を追加します。 Docker コンテナーでローカル実行されるサンプル アプリは、このアドレスを使用してホスト コンピューターと通信します。

たとえば、構成ファイルの一部は次のようになります。

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

構成ファイルへの変更を有効にするために、MongoDB を再起動します。

手順 3: ローカル MongoDB データベースでデータベースとコレクションを作成します。

データベース名を "restaurants_reviews" に設定し、コレクション名を "restaurants_reviews" に設定します。 VS Code MongoDB 拡張機能、MongoDB シェル (mongosh)またはその他の MondoDB 対応ツールを使用して、データベースとコレクションを作成できます。

MongoDB Shell でデータベースとコレクションを作成するコマンドの例を次に示します。

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

この時点で、ローカル MongoDB の接続文字列は "mongodb://127.0.0.1:27017/"、データベース名は "restaurants_reviews"、コレクション名は "restaurants_reviews" です。

4. コンテナーでイメージをローカル実行する

MongoDB への接続方法に関する情報があれば、コンテナーをローカルで実行する準備は完了です。 サンプル アプリには、MongoDB 接続情報を環境変数で渡す必要があります。 環境変数をコンテナーにローカルで渡すには、いくつか方法があります。 セキュリティという点で、それぞれに長所と短所があります。 機密情報のチェックインは避ける必要がありますし、機密情報がコンテナー内のコードに残らないようにする必要があります。

Note

Web アプリを Azure にデプロイすると、その Web アプリは、App Service 構成設定として設定されている環境値から接続情報を取得し、ローカル開発環境シナリオの変更は適用されません。

手順 Screenshot
サンプル アプリの .vscode フォルダーでは、settings.json ファイルによって、Docker 拡張機能を使用し、タグのコンテキスト メニューから [実行] または [対話型の実行] を選択した場合の動作が定義されます。 settings.json ファイルには、シナリオごとに 2 つのテンプレートが(MongoDB local)(MongoDB Azure)含まれています。

ローカル MongoDB データベースを使用している場合:
  • 両方のインスタンスを実際の <YOUR_IP_ADDRESS> IP アドレスに置き換えます。

  • 両方のインスタンスを MongoDB データベースの<CONNECTION_STRING>接続文字列に置き換えます。

MongoDB 用 Azure Cosmos DB データベースを使用している場合:
  • 両方の<CONNECTION_STRING>インスタンスを Azure Cosmos DB for MongoDB 接続文字列に置き換えます。
テンプレートで docker.dockerPath 使用される構成設定を設定します。 設定docker.dockerPathするには、VS Code コマンド パレット (Ctrl + Shift + P) を開き、「Preferences: Open Workspace 設定」と入力し、[検索設定] ボックスに「docker.dockerPath」と入力します。 設定の値として「docker」と入力します (引用符なし)。

Note

データベース名とコレクション名の両方が restaurants_reviews.

A screenshot showing the settings.json file Visual Studio Code.
イメージを実行します。
  • Docker 拡張機能の [IMAGES] (イメージ) セクションで、ビルドされたイメージを見つけます。

  • イメージを展開して [最新] タグを見つけ、右クリックして [対話型の実行] を選択します。

  • シナリオに適したタスク、つまり、[Interactive run configuration (MongoDB local)] (対話型実行構成 (MongoDB ローカル)) と [Interactive run configuration (MongoDB Azure)] (対話型実行構成 (MongoDB Azure)) のいずれかを選択するように求められます。

対話型実行では、コード内に print ステートメントが表示されます。これはデバッグに役立ちます。 また、非対話型で標準入力を開いたままにしない [実行] も選択できます。

重要

既定のターミナル プロファイルが (Windows) コマンド プロンプトに設定されている場合、この手順は失敗します。 既定のプロファイルを変更するには、VS Code コマンド パレット (Ctrl + Shift + P) を開き、「ターミナル: 既定のプロファイルの選択」と入力し、ドロップダウン メニューから別のプロファイル (Git BashPowerShell など) を選択します。

A screenshot showing how to run a Docker container in Visual Studio Code.
コンテナーが実行されていることを確認します。
  • Docker 拡張機能の [CONTAINERS] (コンテナー) セクションで、コンテナーを見つけます。

  • [Individual Containers] (個々のコンテナー) ノードを展開し、"msdocspythoncontainerwebapp" が実行されていることを確認します。 実行されている場合、コンテナー名の横に緑色の三角形の記号が表示されます。

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
コンテナー名を右クリックし、[ブラウザーで開く] を選択して、Web アプリをテストします。

既定のブラウザーでコンテナーが開きます (Django の場合は http://127.0.0.1:8000"、Flask の場合は http://127.0.0.1:5000/")。
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
コンテナーの停止
  • Docker 拡張機能の [CONTAINERS] (コンテナー) セクションで、実行中のコンテナーを見つけます。

  • コンテナーを右クリックし、[停止] を選択します。

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

ヒント

実行またはデバッグの構成を選択してコンテナーを実行することもできます。 実行またはデバッグすると、tasks.json 内の Docker 拡張機能タスクが呼び出されます。 呼び出されるタスクは、選択した起動構成によって異なります。 タスク [Docker: Python (MongoDB local)] (Docker: Python (MongoDB ローカル)) では、<YOUR-IP-ADDRESS> を指定します。 タスク [Docker: Python (MongoDB Azure)] (Docker: Python (MongoDB Azure)) では、<CONNECTION-STRING> を指定します。

イメージからコンテナーを開始し、Docker Desktop アプリケーションでそれを停止することもできます。

次のステップ