特に難しいところはありませんが /workspace にプロジェクトを作らない構成にしています。
Dockerfile
Dockerfile は Python3.9ベースです。 Azure Functions Core Tools の3系をインストールするために Node.js と npm を先にインストールしています。
特に意味はありませんが、 yarn もインストールしています。不要なら yarn の文字を削除してください。
FROM python:3.9-bullseye
RUN apt-get update && apt-get install -y \
nodejs \
npm
RUN npm install -g yarn @anthonychu/funcvm && funcvm use 3
ENTRYPOINT tail -f /dev/null
docker-compose.yml
Remote Container の 既定では /workspace に対して Bind Mount する(ホストと同期する)設定になっていて、そこにプロジェクトを作ることを暗に促されますが、パフォーマンスがすごく悪いのでプロジェクトは /home 配下にディレクトリを作ってそこに作成することにします。個人的な趣味です。
docker-compose.yml にて /home 配下に作成するプロジェクトを永続化するために Volume を home という名前で作成しています。
/workspace の Bind Mount 設定はホストとのファイルをやり取りするために特に変更しません。
version: '3.8'
services:
python:
build: .
ports:
- 7071:7071
volumes:
- .:/workspace:cached
- home:/home
volumes:
home:
devcontainer.json
手動で作る必要なんてありません。上記2つのファイルを同階層に置き、そのフォルダを VSCode で開いて画面左下の Remote Container のアイコンをクリックします。
Add Development Container Configuration Files...を選択します。
From 'docker-compose.yml' を選択します。
devcontainer.json ファイルが自動的に生成されます。このファイルの "workspaceFolder" の値を次のように編集します。この編集は必須ではありませんが、これで Remote Container に接続時に開く既定のディレクトリは /home になります。
"workspaceFolder": "/home",
devcontainer.json に VSCode のプラグインを Remote 先で使用するように二つ設定します。
画面左のプラグインアイコンをクリックし、 Python を検索したら Python プラグインを右クリックし、Add to devcontainer.json を選択します。
devcontainer.json に次のようにプラグイン設定が反映されます。
"extensions": [
"ms-python.python"
]
同じようにして、 Azure Functions プラグインを設定します。
"extensions": [
"ms-python.python",
"ms-azuretools.vscode-azurefunctions"
]
準備完了です。Remote Container へ接続します。画面左下の Remote Container のアイコンをクリックします。
無事に接続したら、Azure Functions を Python で作れることを確認してみてください。デバッグ実行も問題なくできるはずです。
後始末
作成した Container と Image を削除します。また docker 管理の Volume も作成されているので削除が必要です。
docker volume rm <VOLUME NAME>
Container との紐づけがもう無くなってしまった幽霊 Volume は prune コマンドでまとめて削除できます。
docker volume prune
ソース管理について
/home 配下にプロジェクトを作成するようにしたのは /workspace 配下にプロジェクトを作るよりも圧倒的にパフォーマンスが良いからです。ソースをホストから見ることはできませんが、GitHub などの Git リポジトリに Push する運用が昨今は主流だと思いますので特に問題はないと思います。
ホストと同期する /workspace 配下にプロジェクトを作ればソースファイルをホストから修正することもできますが、もしかしたら起こるかもしれない程度の頻度のホストからのソースファイルを修正のために、普段の開発時のパフォーマンスの極度の劣化を受け入れることなど考えられません。
どうしてもそのような状況が起こった場合は、 GitHub などの Git リポジトリから Clone すればいいのです。そもそも、ホスト環境で開発できるようになっていなければホストからソースを修正するなど恐ろしくてできないはずです。そしてホストでソースを修正できる環境が整っているのであれば、Remote Container など不要です。