今回はPython + Flaskの開発環境をDocker上に持っていき
コンテナ上にあるソースをvscodeでデバッグしてみます。
#01. Flaskアプリをdocker上で動かしてみる
今回はこちら → #02. vscodeのRemote Developmentでデバッグしてみる
#03. 運用環境を構築してみる
拡張機能「Remote Development」をインストール
まずは拡張機能をインストールします。
Extension Packとなっており、インストールすると下記の3つがインストールされます。
・Remote - WSL
・Remote - Containers
・Remote - SSH
今回はコンテナ上のソースをデバッグするので「Remote - Containers」を使用。
ディレクトリ構成
flask-dev
├── .devcontainer
│ └── devcontainer.json
├── .vscode
│ └── launch.json
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
└── run.py
ソースコードはGithubにあります。
Dockerfile
前回と違い、今回は
project_dir
は宣言するだけで、値を指定しません。
# base image
FROM python:3.8.5
ARG project_dir
# workdir にファイル等追加
ADD requirements.txt $project_dir
# workdir
# なければ新規作成
WORKDIR $project_dir
# upgrade pip
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
docker-compose.yml
project_dir
をここで設定します。volumes
で作業場にマウントします。
version: '3'
services:
web:
container_name: dev_flask
build:
context: .
args:
project_dir: "/work/"
ports:
- "5000:5000"
volumes:
- ".:/work"
environment:
TZ: Asia/Tokyo
FLASK_ENV: "development"
command: "sleep infinity"
requirements.txt & run.py
前回のファイルそのままです。
devcontainer.json を追加
ウィンドウ左下の赤枠をクリックし、
「Remote-container: Add Development Container Configuration Files...」を選択
docker-compose.ymlから設定ファイルを作成するため
「From 'docker-compose.yml'」を選択
これでdevcontainer.jsonが作成されるので編集します。
dockerComposeFile
にyamlファイルが2つ指定されていますが、一つ上の階層にあるファイルのみ使用するため、
設定ファイルと同階層にあるdocker-compose.ymlは削除します。
{
"name": "RemoteDevFlask",
"dockerComposeFile": [
"../docker-compose.yml",
// "docker-compose.yml"
],
"service": "web",
"workspaceFolder": "/work",
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
"extensions": [
"ms-python.python",
"ms-python.vscode-pylance"
]
}
また、vscodeでPythonの開発するために必要な拡張機能を
コンテナにインストールするため、
extensions
にPython関連の拡張機能を指定します。指定する値は下記の赤枠のように、拡張機能名の右に表示されているIDです。
コンテナを開く
再度ウィンドウ左下にある赤枠部分をクリックし、
「Remote-Containers: Reopen in Container」を選択します。
無事にコンテナ上のProjectDir「work」を開くことができました。
vscodeの拡張機能を確認すると、コンテナ上には下記二つがインストールされていることがわかります。
(アイコン右下にリモートだと認識できるマークが付いている)
インストールされていないようであれば、通常と同様にコンテナに対して
画面から拡張機能をインストールすることが可能です。
デバッグ用設定ファイルを作成
vscodeのデバッグメニューを選択すると、まだデバッグするための設定ファイルがないため
下記のような表示になっています。
※ run.pyを開いた状態でデバッグメニューを選択する必要あり。
まずはlaunch.jsonを作成します。
今回はFlaskアプリのため「Flask」を選択
「run.py」を入力
ソースコードの任意の場所にブレークポイントをはり
いざデバッグ実行。
無事にデバッグできるようになりました。
開発環境をDocker化してしまえば、以下のようなメリットがありますね。
・自分のPCに無駄なものをインストールする必要がない
・メンバー全員が同じ環境で開発できる
・環境構築の手間が省ける
・運用環境と同じ環境でデバッグができる
ただイイことばかりではなく、WindowsPCだとDocker環境の構築が少しややこしそう?
Windows10のバージョン2004からはWSL2(Windows subsystem for linux 2)のおかげで
Hyper-VなしでもLinuxコンテナを動かせるようになったとか?
まだ2004にアップデートしてないのでアップデートしたら試してみようと思います。
以上、もりもりでした。
0 件のコメント:
コメントを投稿