今回は、FlaskをDocker上で動作させて、HelloWorldを表示するメモとなります。
IDEはPyCharmを利用していますので、以下のDocker版となります。
Dockerが動作可能な前提の内容となっています。
https://docs.docker.com/get-started/
また、有償版のPyCharmを利用した内容になりますが(特にDockerの部分)、
無償版のPyCharmや他のIDEでも、Dockerコマンドを実行頂ければ、再現できると思います。
目次
環境
- macOS:Big Sur 11.5.2
- PyCharm:2022.2.2 (Professional Edition)
-
Docker:20.10.12
事前準備
PyCharmのプロジェクトを作成する前に、2つのファイルを用意します。
2つのファイルは、後にPyCharmのプロジェクトのディレクトリとして指定する場所に配置します。
※事前に用意する理由は、後述の補足②に記載しています。
-
app/app.py
import os from flask import Flask port = int(os.environ['PORT']) app = Flask(__name__) @app.route('/') def index(): return 'Hello World! Start Flask on Docker using Pycharm.' if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)
-
Dockerfile
FROM python:3.10.8-slim-buster RUN pip install --upgrade pip RUN pip install flask==2.2.2 ENV PORT 5000 WORKDIR /app COPY ./app /app CMD ["python", "app.py"]
[参考]
DockerHub:https://hub.docker.com/_/python
Flask:https://flask.palletsprojects.com/en/2.2.x/changes/
新規プロジェクト作成
事前にファイルを準備したら、
PyCharmより新規プロジェクトを作成します。
Locationの部分は、事前にファイルを用意したディレクトリを指定して、Createボタンをクリックします。
Directory Is Not Empty の確認メッセージが表示されたら、
Open Projectをクリックします。
Create from Existing Sourcesでも良いですが、不要なPython実行用のenvフォルダが生成されます。
以下の様にプロジェクトが作成されます。
Current Interpreter設定・Docker設定
次に、Pythonの実行を担うInterpreterの設定と、Dockerの設定を行います。
(Interpreterの設定時にDockerの設定も必要となるため、同時に行ってしまいます)
こちらの設定は、Dockerを実行可能な状態で行ってください。
画面下部の現在のCurrent Interpreter(プロジェクト生成時に指定したPythonの実行名)をクリックします。
(もしかしたら、No interpreterと表示されている場合もあるかもしれません)
その後、Add New Interpreter -> On Docker… をクリックします。
NewTarget: Docker画面が表示されたら、
Docker serverの「…」ボタンをクリックして、Dockerの設定を追加します。
+プラスマークをクリックします。
Nameに任意の識別名称を入力し、Connect to Docker daemon with の部分を指定します。
私の場合、Docker for Mac を利用しているのでそのままOKボタンをクリックしました。
※OKを押す前に、Dockerが動いていないとエラーになります。
Docker server の準備ができたら、
Dockerfileの部分を、用意済みのDockerfileで指定します。
指定ができたらNextボタンをクリックします。
正常にDockerイメージのビルドが済むと、右下のCurrent Interpreterの部分に反映されます。
Docker コンテナ起動 動作確認
プロジェクトが開けて、Current Interpreterの設定も済んだら、
Dockerコンテナを起動して動作確認を行います。
まず、画面下部のServicesの部分を開きます。
先ほど登録したDockerの名称が表示されていますので、
そちらを選択し、右クリックメニューのDeployをクリックします。
Deploy Configurationが表示されたら、Create Dockerfile Deployment…をクリックします。
Create Dockerfile Deployment画面が表示されたら、
ServerとDockerfileが、用意したものになっている事を確認します。
(異なるものが指定されている場合、変更します。)
続けてModifyのメニューを表示し、Run optionsをクリックします。
Run optionsの欄が表示されたら、以下の様に入力してOKボタンをクリックします。
OKボタンをクリックすると、Dockerコンテナのビルドが行われます。
-p 5000:5000
コンテナがビルドされて起動すると、Logのコンソールに起動ログが表示されます。
ログに表示されているエンドポイントにブラウザでアクセスして、
app.pyの戻り値が正常に表示されていれば、起動確認も完了です。
停止は、Servicesのところから行えます。
補足① ソース修正・反映
Python・Flaskはコンテナ内で動作しておりますので、
app.pyのソースを変更して、コンテナを再起動などしても内容は反映されません。
内容を反映させたい場合には、Serviceのところで起動しているコンテナを選択し、
Recreate Containerを行います。
コンテナを再作成後、再度アクセスすると、内容が反映されています。
補足② PyCharm Interpreter エラー
手元で確認している際に、Current Interpreterの設定が上手くいかない現象を確認しましたので、
内容をメモしておこうと思います。
PyCharmでプロジェクトを新規作成する際に、Current Interpreterの設定を同時に行うと、
以下のエラーメッセージが表示され、プロジェクトを生成出来ませんでした。
This interpreter type does not support remote project creation
色々と試してみましたが解消できず、
プロジェクトを生成した後に、Current Interpreterを設定すると上手くいきました。
以上が、今回のメモとなります。
個人的には、Dockerはコマンド実行した方が何かとしっくりくるのですが、
きちんとDockerfileを用意しておけば、ボタンで実行できるので楽かもしれません。
ただ、色々と試していると、
ついつい、コンテナとイメージが乱立・残留してしまうと思いますので、
こまめに削除頂いた方が良いかと思います。
(右クリックメニューから削除なども行えます)
また、こちらの内容では以下の対応を行えませんでした。
- デバッグ実行できない
- ソース修正後、サービスに反映させる場合、コンテナの作り直しが必要
Docker Composeを利用した場合、これらに対応できたため、その内容もメモさせて頂きました。