Docker Compose を初心者が試してみた!PythonとRedisで簡単なアプリを作るまで

Flask

Docker Compose を使えば、複数のコンテナを簡単に管理できると聞いて、公式ドキュメントの「Docker Compose をはじめよう」にチャレンジしてみました。
今回は、Python(Flask)と Redis を使った簡単なウェブアプリを構築してみたので、その手順と初心者目線での気づきをまとめました!

前提条件
以下のソフトウェアがインストールされていることを確認してください:

  • Docker Engine
  • Docker Compose

PythonやRedisはDockerイメージとして提供されるため、事前のインストールは不要です。

Docker Compose を試してみた手順

プロジェクトの準備

まずは作業用ディレクトリを作成し、必要なファイルを用意しました。

ディレクトリの作成と移動

Pythonのコード(app.py)を作成

以下のコードを app.py に書き込みました。アクセスするたびにカウンターを増やす機能が入っています。

ポイント:

Redisとは、インメモリ型のデータストア(Key-Valueデータベース)の一種。

Flask(フラスク)とは、Pythonで作られた軽量なWebアプリケーションフレームワーク

app.pyの説明
  • get_hit_count()関数
    アクセスカウンターを管理します。
  • 詳細な処理
    1. cache.incr('hits'):
      • Redis のキー hits の値を 1 増加させます。
      • 初回アクセスの場合、キーが作成され初期値 0 から増加します。
    2. リトライ機能:
      • Redis サーバーが利用できない場合、5回リトライします。
      • リトライごとに0.5秒待機 (time.sleep(0.5)) します。
    3. 例外処理:
      • 5回リトライしても接続できない場合は、例外を投げます。
  • @app.route('/')
    /(ルートURL、トップページ)にアクセスしたときに、関数 hello() が実行されます。

必要なライブラリをリスト化(requirements.txt)

依存関係を記載するファイルを作成しました。

初心者メモ:
 requirements.txt は Python パッケージをリスト化したファイルで、環境構築を楽にしてくれるんですね。

初心者メモ:
Redis(Remote Dictionary Server)は、高速なデータアクセスを実現するオープンソースのインメモリ型データストアです。
主にキャッシュ、セッション管理、リアルタイム分析などに利用され、データをキーと値の形式で保存します。

Dockerfile を作成

次にアプリケーションをコンテナ化するための Dockerfile を作成しました。

ポイント:

  • FROM python:3.7-alpine で軽量なPythonイメージを指定。
  • Flask アプリを動かす準備をこのファイルにすべて記載しました。

初心者メモ:
Dockerfileは、イメージを作るための「レシピ」みたいなものでした。

Docker Compose ファイルを作成

Docker Compose でサービス全体を定義するため、docker-compose.yml を作りました。

構成のポイント:

  • web: Flask アプリ用のサービス。
  • redis: Redis データベース用のサービス。

初心者メモ: 
8000:5000 という書き方で、ホストのポート8000をコンテナのポート5000に紐付けることができるんですね!

composetest ディレクトリ内ファイル構成

コンテナ構成図

実行してみた!

準備が整ったので、いよいよ実行です。

コンテナのビルドと起動

以下のコマンドでアプリを立ち上げました。

実行すると、いろいろなログが表示されて、コンテナが起動。ドキドキしながらブラウザで http://localhost:8000 にアクセスすると…

ちゃんと表示されました!さらにページをリロードするとカウントが増えていきます。

Redis がちゃんとデータを保持しているのが確認できました。

サービスの停止とクリーンアップ

アプリを終了するには以下のコマンドを実行します。

これでコンテナが停止し、ネットワークも削除されました。

初心者が試してみて感じたこと

  1. 意外と簡単!
    初めての Docker Compose でしたが、公式ドキュメントに従って進めれば迷わずにできました。
  2. Docker Compose の便利さを実感
    docker-compose.yml に必要な構成を書くだけで、複数のコンテナが連携するアプリを簡単に管理できるのは感動ものです。
  3. トラブルシューティングがカギ
    最初、redis が動かず、コンテナのログを確認する必要がありました。docker-compose logs コマンドで原因を追えたので、基本操作を覚えるのが大切だと感じました。

まとめ

Docker Compose を使うことで、複数のコンテナが必要なアプリケーションも簡単に構築できることが分かりました。
公式ドキュメント「Docker Compose をはじめよう」は初心者にも分かりやすい内容なので、これから Docker を学びたい方にもおすすめです!


出典情報
本記事の内容は以下のページを参考にしています:

タイトルとURLをコピーしました