Azure Functions上でDockerイメージを利用してPythonアプリケーションを構築する際、Dockerイメージの配置先を(Docker Hubでなく)Container Registryにすることもできる。
今回は、DockerイメージをContainer Registryに配置してみたので、その手順を共有する。
前提条件
下記サイトの手順に従って、Azure Functions上で動作するDockerコンテナを利用したPythonアプリケーションの作成が完了していること。
やってみたこと
Azure PortalでContainer Registryの作成
Container Registryの作成は、Azure Portal上で行える。その手順は、以下の通り。
1) Azure Portalにログインし、「Container Registry」を検索し選択する。
2) Container Registryを作成するための、以下の画面が表示される。
6) 作成するContainer Registryの内容を確認し、「作成」ボタンを押下する。
8) 完了すると以下の画面が表示されるため、「リソースに移動」ボタンを押下する。
9) Container Registryが作成され、以下の画面が表示されることが確認できる。ここで管理者ユーザーを有効にするため、「設定」メニューの「アクセスキー」を押下する。
11) Dockerイメージを反映する方法を確認するため、「イメージをプッシュする」ボタンを押下する。
12) 以下のように、Dockerイメージを反映する方法が確認できる。
Azure PortalでContainer Registryの作成
Azure Functionsから作成したDockerイメージを参照できるよう、DockerイメージをContainer Registryに保存する。その手順は、以下の通り。
1) 前提条件の記事の「function_app.py」に、以下赤枠の「Updated!!」という文言を追加する。
2) Azure上にAzure Functionsアプリをデプロイするため、「az login –tenant (既定のディレクトリのテナントID)」コマンドを実行し、Azure環境にログインする。
3) 以下の画面が表示されるため、アカウントを選択し「続行」ボタンを押下する。
5) 以下のように、Azure環境にログインされたことが確認できる。
6) Docker Desktopを起動し、「az acr login –name funccontainer」コマンドを実行する。
7)「docker build –tag
8)「docker run -p 8081:80 -it
9) ブラウザ上で「http://localhost:8081/api/HttpExample」にアクセスすると、以下のように、function_app.pyで定義していたHttpResponseが返却されることが確認できる。なお、8081は、dockerコマンド起動時に利用したポート番号を表している。
10)「docker push <Container Registry名>.azurecr.io/azurefunctionsimage:v1.0.0」コマンドを実行すると、作成したDockerイメージがContainer Registryに保存される。
11) Dockerイメージ配置後にContainer Registryを確認すると、以下のように、作成したDockerイメージがContainer Registryに保存されたことが確認できる。
Azure FunctionsへのDockerイメージ反映
Azure FunctionsへのDockerイメージ反映は、Azure Portal上で行える。その手順は、以下の通り。
1) Dockerイメージを配置するAzure Functionsを開き、「設定」の「構成」メニューを押下する。
2) イメージのソースで「Azure Container Registry」を選択する。
3) レジストリ・イメージ・イメージタグを順次選択した後で、「保存」ボタンを押下する。
4) 保存が完了すると、以下のような完了メッセージが表示されることが確認できる。
5) Azure Functionsの動作確認を行うURLにアクセスすると、以下のように、function_app.pyで定義していたHttpResponseに「Updated!! 」を追加し返却されることが確認できる。
要点まとめ
- Azure Functions上でDockerイメージを利用してPythonアプリケーションを構築する際、Dockerイメージの配置先をContainer Registryにすることもできる。