本ハンズオンでは、以下のステップを通じてFastAPIで構築したシンプルなアプリケーションをDockerコンテナ化し、Azure Container Registry (ACR) にプッシュした後、Azure Container Appsを用いてデプロイする方法を学びます。
学習内容:
- FastAPIアプリケーションの作成とローカルでの動作確認
- シングルステージビルドを用いたDockerコンテナの作成
- Dockerイメージのビルドとローカル動作確認
- Azure Container Registry (ACR) の作成と管理者アクセスの有効化
- ACRへのDockerイメージのプッシュ
- Azure Container Appsへのデプロイと動作確認
ハンズオンを実施するために以下の環境とツールが必要です。
- Azureアカウント: Azureポータルでサインアップまたはサインインしてください。
- Azure CLI: 最新バージョンをインストールしてください。インストール方法はこちらを参照してください。
- Docker: Docker Desktopをインストールし、動作確認を行ってください。インストール方法はこちらを参照してください。
- GitHubアカウント: ソースコードの管理に使用します。
- Git: Gitをインストールしてください。インストール方法はこちらを参照してください。
- Python 3.11 (Option) またはそれ以上のバージョン
以下の手順に従って、FastAPIアプリケーションをDockerコンテナ化し、Azureにデプロイします。
-
サンプルコードの入ったリポジトリをクローンし、プロジェクトに移動します。
git clone https://github.com/marumaru1019/POC-Container-Handson.git cd POC-Container-Handson
-
依存関係のインストール
pip install -r requirements.txt
-
アプリケーションの起動
uvicorn main:app --reload
-
動作確認
- ブラウザで http://127.0.0.1:8000 にアクセスし、
{"message": "Hello, Container!"}
が表示されることを確認します。 - Swagger UIを確認するには http://127.0.0.1:8000/docs にアクセスします。
- ブラウザで http://127.0.0.1:8000 にアクセスし、
-
イメージをビルドするコマンド
docker build -t <イメージ名>:<タグ(例: v0)> .
例:
docker build -t myfastapiapp:v0 .
-
イメージの確認
docker images
-
コンテナの実行
docker run -d -p 80:80 --name <コンテナ名> <イメージ名>:<タグ(例: v0)>
例:
docker run -d -p 80:80 --name myfastapiapp_container myfastapiapp:v0
-
動作確認
- ブラウザで http://localhost にアクセスし、
{"message": "Hello, Container!"}
が表示されることを確認します。 - Swagger UIを確認するには http://localhost/docs にアクセスします。
- ブラウザで http://localhost にアクセスし、
-
コンテナの停止と削除
docker stop <コンテナ名> docker rm <コンテナ名>
例:
docker stop myfastapiapp_container docker rm myfastapiapp_container
-
Azure CLIを使用してACRを作成
# リソースグループの作成 az group create --name <リソースグループ名> --location <リージョン> # ACRの作成 az acr create --resource-group <リソースグループ名> --name <ACR名> --sku Basic
例:
az group create --name myResourceGroup --location japaneast az acr create --resource-group myResourceGroup --name myACRRegistry --sku Basic
-
ACRの管理者アクセスを有効にする
az acr update --name <ACR名> --admin-enabled true
例:
az acr update --name myACRRegistry --admin-enabled true
-
ACRにログイン
az acr login --name <ACR名>
例:
az acr login --name myACRRegistry
-
イメージのタグ付け
docker tag <イメージ名>:<タグ(例: v0)> <ACR名>.azurecr.io/<イメージ名>:<タグ(例: v0)>
例:
docker tag myfastapiapp:v0 myACRRegistry.azurecr.io/myfastapiapp:v0
-
イメージのプッシュ
docker push <ACR名>.azurecr.io/<イメージ名>:<タグ(例: v0)>
例:
docker push myACRRegistry.azurecr.io/myfastapiapp:v0
-
Azure Container Apps環境の作成
az containerapp env create --name <環境名> --resource-group <リソースグループ名> --location <リージョン>
例:
az containerapp env create --name myContainerAppEnv --resource-group myResourceGroup --location japaneast
-
ACRの認証シークレットの設定
az containerapp secret set --name <コンテナアプリ名> --resource-group <リソースグループ名> --secrets <シークレット名>=<ACRパスワード>
例:
az containerapp secret set --name myFastAPIApp --resource-group myResourceGroup --secrets arc11223azurecrio-acr11223=<your_acr_password>
-
コンテナアプリの作成
az containerapp create --name <コンテナアプリ名> --resource-group <リソースグループ名> --environment <環境名> --image <ACR名>.azurecr.io/<イメージ名>:<タグ(例: v0)> --target-port 80 --ingress 'external' --registry-server <ACR名>.azurecr.io --registry-username <ACRユーザー名> --registry-password $(az containerapp secret show --name <コンテナアプリ名> --resource-group <リソースグループ名> --query secrets.<シークレット名> --output tsv)
例:
az containerapp create --name myFastAPIApp --resource-group myResourceGroup --environment myContainerAppEnv --image myACRRegistry.azurecr.io/myfastapiapp:v0 --target-port 80 --ingress 'external' --registry-server myACRRegistry.azurecr.io --registry-username myACRRegistry --registry-password $(az containerapp secret show --name myFastAPIApp --resource-group myResourceGroup --query secrets.arc11223azurecrio-acr11223 --output tsv)
注:
<シークレット名>
は先ほど設定したシークレット名arc11223azurecrio-acr11223
と一致させてください。<ACRユーザー名>
はaz acr credential show --name <ACR名>
コマンドで取得できます。
-
デプロイされたアプリケーションのURL確認
az containerapp show --name <コンテナアプリ名> --resource-group <リソースグループ名> --query properties.configuration.ingress.fqdn --output tsv
例:
az containerapp show --name myFastAPIApp --resource-group myResourceGroup --query properties.configuration.ingress.fqdn --output tsv
-
ブラウザでアクセス
- 取得したURLにアクセスして、
{"message": "Hello, Container!"}
が表示されることを確認します。
- 取得したURLにアクセスして、
本ハンズオンでは、以下の一連の手順を通じて、FastAPIアプリケーションの作成からローカルでの動作確認、Dockerコンテナ化、Azure Container Registry (ACR) へのプッシュ、そしてAzure Container Appsへのデプロイまでを学習しました。
- FastAPIアプリケーションの作成とローカル動作確認
- シングルステージビルドを用いたDockerコンテナの作成
- Dockerイメージのビルドとローカル動作確認
- Azure Container Registry (ACR) の作成と管理者アクセスの有効化
- ACRへのDockerイメージのプッシュ
- Azure Container Appsへのデプロイと動作確認