FlaskアプリをDocker Composeで管理する方法!複数サービス対応の完全ステップガイド
生徒
「Flaskだけじゃなくて、データベースとかも一緒に動かしたいです。どうしたらいいですか?」
先生
「Docker Compose(ドッカー・コンポーズ)を使うと、Flaskアプリとデータベースなど複数のサービスをまとめて一つのシステムとして管理できますよ。」
生徒
「Docker Composeって難しそうですが、初心者でもできますか?」
先生
「できます。今回は、FlaskアプリとPostgreSQLを例に、Docker Composeを初心者向けにわかりやすく丁寧に解説しますね。」
1. Docker Composeとは?初心者向けにかんたん解説
Docker Composeは、複数のDockerコンテナ(箱)を一つの設定ファイル(docker-compose.yml)でまとめて管理できるツールです。Flaskアプリやデータベースなど「別々に動かす箱」を一緒に起動したり止めたりできます。
たとえば、学校で机と椅子をセットで使うように、必要な部品を揃えて一括で使いたいイメージです。
2. Docker Composeを使うメリットは?
初心者におすすめの理由:
- コマンド一つで複数サービスをまとめて起動できる
- 設定がテキスト(ymlファイル)なので何を使っているか一目でわかる
- 他の人と同じ環境を簡単に再現できる(環境構築の失敗が減る)
3. FlaskアプリとPostgreSQLのDocker Compose構成例
まず、これから使うファイル構成を見てみましょう:
├── app/
│ ├── app.py
│ └── requirements.txt
└── docker-compose.yml
FlaskはPythonで作るウェブアプリ、PostgreSQLはデータベースです。docker-compose.ymlで両方を一緒に起動します。
4. Flaskアプリのサンプルコード
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "こんにちは!Docker ComposeでFlaskとDBを一緒に動かしています。"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
このコードは、「こんにちは!」を表示する簡単なWebサイトです。
5. docker-compose.ymlの書き方
version: "3"
services:
web:
build: ./app
ports:
- "5000:5000"
db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: flaskdb
ポイント解説:
services::ここにサービス(webやdb)を列挙します。build::Flaskアプリを指定フォルダから作ります。ports::コンテナの中のポート(5000)をパソコンの同じ番号に繋ぎます。image::あらかじめ用意されたPostgreSQLの箱を使います。environment::DBに使う名前やパスワードなどを設定します。
6. Docker Composeでサービスを起動しよう
docker-compose up -d
-dは「デタッチドモード」の略で、バックグラウンドで起動します。
7. 動いているか確認してみよう
次のコマンドで動いているかチェックします:
docker-compose ps
ブラウザで http://localhost:5000 を開くと、Flaskの画面が表示されます。
8. サービスを止める方法
docker-compose down
これで起動した箱すべてがまとめて止まります。
9. よくある失敗と確認ポイント
- DockerやCompose未インストール:公式サイトから導入し、再起動を。
- ポート衝突:5000ポートが使えない場合、別の番号(例:8000:5000)を使いましょう。
- スペルミス:“docker-compose.yml”の名前やインデント(字下げ)は正確に。
- 環境変数がない:POSTGRESの設定が正しいか確認してください。
10. Flaskアプリを変更したら?
コードを修正したら、再度ビルドと起動をします:
docker-compose down
docker-compose up -d --build
これで新しいコードが反映されます。
11. Docker Composeの学び方まとめ
- 複数サービスをまとめて管理できる
- 環境構築の失敗を減らせる
- チーム開発でも同じ環境を共有しやすい
初心者でも、Flaskとデータベースなど複数の部品を一つにまとめて動かせるのがDocker Composeの魅力です。
まとめ
FlaskアプリケーションをDocker Composeで管理する方法を通して、複数のサービスを効率よく扱うための基本的な仕組みと手順を理解することができました。特に、FlaskとPostgreSQLのように役割の異なるサービスを、ひとつの構成ファイルでまとめて動かす利便性は、開発環境の統一やトラブルシューティングの効率化に大きく貢献します。さらに、docker-compose.ymlの設定によって、サービスごとの依存関係や環境変数をまとめて管理できるため、開発チーム全体で同じ動作環境を再現しやすい点も大きな魅力です。複数サービスを扱う際は、ポート設定やスペルミス、環境変数の書き忘れなど細かい点がトラブルにつながりやすいため、設定ファイルの見直しやログの確認を習慣にするとより安定した開発が行えるでしょう。
また、Flaskアプリ側の変更があった場合には、再ビルドを行うことで常に最新の状態を保つことができます。Docker Composeの基本的なコマンドである up、down、ps を覚えておけば、開発環境の起動や停止、状態確認もスムーズに進めることができます。環境の再現性と管理の効率化という観点でも、Docker Composeは学習しておいて損のない重要な技術です。Flaskアプリを用いた簡単なAPI構築からデータベース連携、さらにはログ解析ツールやキャッシュサービスとの連携まで、今後の開発に幅広く応用できる知識となるでしょう。
下記では、記事内で扱った設定と同じ形式のサンプルコードを改めて掲載します。実際に自分の環境で動かしながら、もう一度流れを確認してみてください。
Docker Compose構成のサンプル(再掲・応用版)
version: "3"
services:
web:
build: ./app
ports:
- "5000:5000"
environment:
FLASK_ENV: development
db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: flaskdb
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Flaskアプリの確認用サンプル
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "ようこそ!Docker Compose環境で動くFlaskサンプルです。"
@app.route("/health")
def health():
return {"status": "ok", "message": "サービスが正常に動いています。"}
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
このような構成を活用することで、ウェブアプリケーションとデータベースを同時に管理しながら、安定した開発環境を簡単に整えることができます。特に学習段階では、設定の変更と挙動の違いを比較しながら取り組むと理解が深まりやすくなります。Docker Composeを身につけることで、今後のプロジェクトでも役立つ幅広い基盤技術の理解につながるはずです。
生徒
「今日の内容で、Flaskとデータベースを一緒に動かす仕組みがようやく理解できました。docker-compose.ymlって最初は複雑に見えましたが、実際はサービスをまとめて書くだけなんですね。」
先生
「そうですね。Composeは慣れるととても便利ですし、環境を崩すことなく何度でも同じ構成を再現できます。開発チームで共有する場合にも強い味方になりますよ。」
生徒
「Flaskのコードを書き換えたら再ビルドしないと反映されないのも体験して覚えました。ログの確認やポートの設定もちゃんと理解しておかないといけないですね。」
先生
「ええ。特に複数サービスを扱うときは、小さな設定の違いが思わぬトラブルにつながることがあります。今日学んだ流れを復習しながら、自分で小さなサービスを追加して動作確認するのもおすすめですよ。」
生徒
「はい!次はRedisやNginxも追加して複数サービスの構成を試してみたいです。」
先生
「とても良いですね。Composeの理解が深まるほど大規模な構成にも対応できるようになります。焦らず一つずつ進めていきましょう。」