Dockerとコンテナに新しくなった方へ、Docker上でPython Flask APIアプリケーションをデプロイすることは、はじめる良い方法です。Dockerを使用すると、軽量な技術とセキュリティにより、アプリケーションの迅速なデプロイが可能となります。
このチュートリアルでは、Python Flask APIアプリケーションをDockerコンテナに設定してデプロイする方法を学びます。
準備をして、デプロイを開始しましょう!
前提条件
ステップバイステップで進めるために、以下をインストールする必要があります:
- DockerがインストールされたUbuntuマシン。このチュートリアルでは、Docker v19.03.8を使用したUbuntu 18.04.5 LTSを使用します。
- UbuntuマシンにインストールされたPython v3.9以降。このチュートリアルでは、Ubuntuマシン上でPython v3.9.2を使用します。
- このチュートリアルでは、APIをテストするために使用するUbuntuマシンにElinksパッケージがインストールされている必要があります。
Python Flask APIアプリケーションの作成(GETおよびPOST API)
このチュートリアルでは、Python Flaskアプリケーションを作成します。FlaskはPythonで書かれた軽量なWSGIマイクロWebアプリケーションフレームワークです。FlaskはPythonでWebアプリケーションを作成する際に便利なツールと機能を提供しています。
Python Flaskアプリケーションを作成する前に、Python Flaskと実行されるアプリケーションを実行するためのPython仮想環境をインストールします。
1.お気に入りのSSHクライアントを使用してUbuntuマシンにログインします。
2.次に、以下のコマンドを実行して、ディレクトリ~/docker_python_flask_demoを作成し、それに切り替えます。このディレクトリには、PythonとDockerがアプリケーションを実行するために必要なすべてのファイルが含まれます。
3.以下のコマンドを実行して、Flaskがアプリケーションを実行するために必要なPython仮想環境(virtualenv)をインストールします。Python仮想環境は、独自のPythonバイナリとアプリケーションごとにインストールされたパッケージを提供し、他のアプリケーションとの競合を避けるためのものです。

4.以下のコマンドを実行して、venvモジュールを使用して仮想環境を作成およびアクティブ化します。

5.次に、以下のコマンドを実行して、pipパッケージマネージャを使用してPythonのflaskパッケージをインストールします。
6. インストールまたは使用する前に、仮想環境でパッケージをアクティベートするために以下のコマンドを実行してください。これにより、VIRTUAL_ENV
環境変数が仮想環境を指すように変更され、仮想環境のPythonバイナリがパスに先頭に追加され、正しいバイナリが実行されます。
7. さらに、requirements.txtという名前のファイルを作成し、以下に示すようにFlaskアプリケーションの依存関係を定義してください。
8. テキストファイル ~/docker_python_flask_demo/app.py を作成し、以下のPythonコードでファイルを埋めてください。
以下のPythonコードは、Pythonのflask
クラスをインポートし、app
という名前のクラスインスタンスを作成します。app
クラスインスタンスには、ユーザーが/login
ページにリクエストを送信したときに実行される2つのlogin()
関数が含まれています。
その後、success()
関数が実行され、ブラウザにようこそ “ユーザー名” のメッセージが表示されます。
9. もう一つのファイルを作成してください。~/docker_python_flask_demo/form.html としてください。以下のコードをコピーして貼り付けてください。
以下のHTMLコードを実行すると、名前を入力するためのテキスト入力と、送信ボタンのあるフォームが作成されます。
ユーザー名を入力し、送信ボタンをクリックすると、POSTリクエストが送信され、Flaskが別の関数を実行し、http://localhost:5000/success/<username>という新しいウェブページを開きます。
10. 最後に、次のPython
コマンドを実行してアプリケーション(app.py
)がローカルシステムで正常に動作していることを確認してください。
以下のように、アプリケーションはUbuntuマシンでは正常に動作していますが、Dockerでは動作していません。次のセクションで同じアプリケーションをDocker上で起動します。

Python Flask APIアプリケーションをデプロイするためのDockerfileの作成
Python Flaskアプリケーションがローカルマシンで作成され、確認されました。しかし、アプリケーションをDocker上でデプロイする前に、Dockerfileを作成して、Dockerイメージをビルドするためのすべての手順を定義します。
~/docker_python_flask_demoディレクトリにDockerfileという名前のファイルを作成し、以下の内容をコピーしてください。
Dockerは、このDockerfileを使用して、ベースイメージ(ubuntu:18.04
)の上に新しいDockerイメージをビルドするために必要なすべての指示またはコマンドを実行します。
では、以下のtree
コマンドを実行して、Python Flaskアプリケーションの実行に必要なすべてのファイルが作業ディレクトリ(~/docker_python_flask_demo)に含まれていることを確認します。

Python Flask APIアプリケーションのDockerイメージのビルド
必要なファイルを備えたPython Flaskアプリケーションをデプロイするためには、ファイルだけでは何も動作しません。Dockerfileで設定した指示に基づいてDockerイメージをビルドするために、docker build
コマンドを実行します。
以下のdocker build
コマンドを実行して、作業ディレクトリ(.
)にDockerイメージをビルドします。このコマンドはイメージをflask-image
バージョン1(:v1
)としてタグ付けします。

次に、以下のdocker
コマンドを実行して、利用可能なすべてのイメージをリストします。
以下に、REPOSITORYなどのさまざまな属性が返されることがわかります。REPOSITORYの名前はflask-imageであり、バージョン(v1)とタグ付けされていることが以下に示されています。

DockerコンテナでPython Flaskアプリケーションを実行する
Dockerイメージを作成した後、Python FlaskアプリケーションをDockerコンテナ内で実行できます。Dockerコンテナは、コードとその依存関係をまとめてアプリケーションを迅速に実行するためのものです。
1. 以下のdocker run
コマンドを実行して、次の操作を行います:
- コンテナをデタッチモード(
-d
)で起動し、バックグラウンドプロセスとして実行し、作成時のコンソール出力を返します。 - Dockerホストのポート(
-p 5000:5000
)をコンテナのポートにマッピングします。 - Dockerコンテナ(
flask-image:v1
)を起動します。
2. 次に、以下のdocker
コマンドを実行して、Dockerエンジン内のすべてのコンテナをリストします。Dockerが正常にコンテナを作成したか確認してください。

3. 最後に、以下のコマンドを実行して、elinksを使用してUbuntuマシンでウェブブラウザを開きます。
このコマンドは、ターミナル上でウェブブラウザを開き、以下のように名前を入力するように求めます。
名前を入力し、[Submit]ボタンをクリックしてください。

4. 以下のように、[Submit]ボタンをクリックすると、Flaskアプリケーション内の成功関数にリダイレクトされることがわかります。

結論
このチュートリアルでは、Dockerイメージを使用してPython Flask API Dockerコンテナを設定するプロセスについて説明しました。また、Dockerfileを使用してPython Flaskコンテナを起動する方法にも触れました。これにより、編集してカスタマイズしたコンテナを作成およびビルドすることができます。
では、他にどのようなアプリケーションをDockerコンテナにデプロイする予定ですか?おそらく、Docker MongoDBコンテナですか?