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にすることもできる。













