PyCharm Flask Docker compose HelloWorld

今回は、FlaskをDocker上で動作させて、HelloWorldを表示するメモとなります。

以下と近い内容となっています。今回はDocker Composeを利用します。

Flask docker HelloWorld PyCharm

Docker Composeを利用した理由

今回Docker Composeを利用する理由は、複数のコンテナを利用したい場合に対応しただけでなく、

以下の問題を解決できなかったので、Docker Composeを利用しました。

  • デバッグ実行できない
  • ソース修正後、サービスに反映させる場合、コンテナの作り直しが必要

故に、DockerとDocker Composeが動作可能な前提の内容となっています。

https://docs.docker.com/get-started/

https://docs.docker.jp/compose/toc.html

 

また、有償版のPyCharmを利用した内容になりますが(特にDockerの部分)、

無償版のPyCharmや他のIDEでも、

Docker Composeコマンドを実行頂ければ、再現できると思います。

JetBrains公式で紹介されている以下を参考にしています。

https://pleiades.io/help/pycharm/using-docker-as-a-remote-interpreter.html

環境

  • macOS:Big Sur 11.5.2
  • PyCharm:2022.2.2 (Professional Edition)
  • Docker:20.10.12
  • docker-compose version 1.29.2

事前準備

はじめにPyCharmのプロジェクトを作成する前に、4つのファイルを用意します。

4つのファイルは、後にPyCharmのプロジェクトのディレクトリとして指定する場所に配置します。

※事前に用意する理由は、後述の補足に記載しています。

・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"]

Flask Dockerfile sample

・docker-compose.yml

version: "3.9"
services:
app:
build: .
ports:
- "5000:5000"

Flask docker-compose.yml sample

・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)

PyCharm Flask Sample


プロジェクト作成

事前にファイルを準備したら、PyCharmより新規プロジェクトを作成します。

PyCharm New Project

Locationの部分は、事前にファイルを用意したディレクトリを指定して、Createボタンをクリックします。

PyCharm New Project

Directory Is Not Empty の確認メッセージが表示されたら、

Open Projectをクリックします。

Create from Existing Sourcesでも良いですが、

今回は不要なPython実行用のenvフォルダが生成されます。

PyCharm Open Project

以下の様にプロジェクトが作成されます。

PyCharm Open Project

[参考]

DockerHub:https://hub.docker.com/_/python

Flask:https://flask.palletsprojects.com/en/2.2.x/changes/


Current Interpreter設定・Docker Compose設定

次に、Pythonの実行を担うInterpreterの設定と、Docker Composeの設定を行います。

(Interpreterの設定時にDocker Composeの設定も必要となるため、同時に行います)

こちらの設定は、Docker Composeを実行可能な状態で行ってください。

 

まず、画面下部のCurrent Interpreter(プロジェクト生成時に指定したPython実行名が

表示されている場合もあります)をクリックします。

PyCharm Current Interpreter

その後、Add New Interpreter -> On Docker Compose… をクリックします。

PyCharm Current Interpreter

New Target: Docker Composeが表示されたら、以下の内容で指定します。

Server:接続済みのDocker設定

Configuration files:事前に用意済みのdocker-compose.yml

Service:docker-compose.ymlで設定しているServiceのapp

PyCharm Servics docker-compose.yml

尚、Docker設定が存在しない場合、以下の様に設定を行ってからServiceを指定します。

PyCharm Service Docker

+プラスマークをクリックします。

PyCharm Docker docker-compose.yml

Nameに任意の識別名称を入力し、Connect to Docker daemon with の部分を指定します。

私の場合、Docker for Mac を利用しているのでそのままOKボタンをクリックしました。

※OKを押す前に、Dockerが動いていないとエラーになります。

PyCharm Docker docker-compose.yml

それぞれ指定してNextボタンをクリックすると、コンテナのビルドが行われます。

正常にFinishしたら、更にNextボタンをクリックします。

PyCharm Docker docker-compose.yml

そして、Python実行のInterpreter設定が表示されたら、

実行に利用したいPythonを指定します。

時に理由が無ければ、そのままでCreateボタンをクリックします。

PyCharm Python

正常に登録されて設定されれば、右下のCurrent Interpreterの表示が変わります。

PyCharm Interpreter


Docker Compose 起動 動作確認

プロジェクトが開けて、Current Interpreterの設定も済んだら、

Dockerコンテナを起動して動作確認を行います。

まず、画面下部のServicesの部分を開きます。

先ほど登録したDockerの名称が表示されていますので、

そちらを選択し、右クリックメニューのDeployをクリックします。

PyCharm Service Deploy

Deploy Configurationでは、Create Docker-compose Deployment…をクリックします。

PyCharm Service Docker-compose Deployment

Create Docker-compose Deploymentが開いたら、

Nameを任意の識別名称で指定します。

Serverは、先ほど設定したDockerの設定のままにしておきます。

PyCharm Service Docker

Compose filesは、事前に用意したdocker-compose.ymlを指定します。

PyCharm docker-compose.yml

Compose filesも指定できたら、Runボタンをクリックして起動します。PyCharm Docker Compose run

正常に起動すると、Serviceに表示され、Log出力されます。

PyCharm Service Log

Logに出力されているエンドポイントにアクセスして、

app.pyの戻り値が表示されれば正常に動作しています。

PyCharm Service app.py

 

 

 

右クリックで、Stop Containerで停止できます。(コンテナ・イメージの削除は行われません)

PyCharm Container stop


デバッグ確認

今度は試しに、ステップ実行を行えるか確認します。

デバッグ実行を実施する際に、コンテナも自動的に起動するため、

コンテナとサービスが停止している状態で行います。
(既に動作している場合、起動に失敗します)

Flask docker compose

実行したいPythonファイルのmain関数部分より、デバッグ実行ボタンをクリックします。

PyCharm docker debug run

自動的にコンテナが立ち上がり、

Docker PyCharm debug run

サービスが起動してDebugの部分にログが出力されます。

先ほどと同様のエンドポイントにアクセスします。

PyCharm Flask Debug

ブレークポイントで停止し、ステップ実行できた場合、デバッグ実行も正常に動作しています。

PyCharm Flask Debug

停止ボタンをクリックすると、サービスとコンテナが自動停止します。


補足 PyCharm Interpreter エラー

手元で確認している際に、Current Interpreterの設定が上手くいかない現象を確認しました。

内容をメモしておこうと思います。

PyCharmでプロジェクトを新規作成する際に、Current Interpreterの設定を同時に行うと、

以下のエラーメッセージが表示され、プロジェクトを生成出来ませんでした。

This interpreter type does not support remote project creation

PyCharm This interpreter type does not support remote project creation

色々と試してみましたが解消できず、

プロジェクトを生成した後に、Current Interpreterを設定すると上手くいきました。


今回のメモは以上となります。

動作させるコンテナが1つの場合、

なるべく、docker-composeは利用せず、Dockerのみで動作させたいですが、

デバッグ実行、ソースの即時反映が行われないと不便ですので、

参考に頂ければと思います。

都内でエンジニアをやっています。 2017年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 171

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る