初心者が挑戦!Docker公式サイト「クイックスタート: ComposeとDjango」でWebアプリを作ってみた

Docker

Dockerを使ったことがない人でも気軽に挑戦できる公式チュートリアル「クイックスタート: ComposeとDjango」をやってみました!
この記事は、公式チュートリアルでの不明点や変更箇所を含めて解説しながら進めています。
Dockerを使ったDjangoアプリの構築方法を一緒に学びましょう。

クイックスタートの概要

Docker Composeを使ってDjangoアプリを構築するチュートリアルです。
この流れを学べば、DjangoとPostgreSQLを使ったWebアプリケーション開発環境を簡単に構築できるようになります。

Djangoって何?

Django(ジャンゴ)は、Pythonで作られたWebアプリケーションフレームワークです。

  • 初心者に優しい: シンプルな構造でWebアプリを作りやすい。
  • 便利な機能が充実: 管理画面や認証機能が最初から組み込まれている。
  • スピーディーな開発: 短時間でWebアプリを作れる。
    (例 Youtube、Dropbox、Instagram)

Djangoを使うと、ログイン機能やデータベース操作のような面倒な作業が簡単になります。
例えば、ブログやECサイトのようなWebサービスを作るのに適しています。

PostgreSQLって何?

PostgreSQL(ポストグレス)は、データを管理するためのデータベース管理システム(RDBMS)です。以下が特徴です。

  • 信頼性が高い: 大量のデータを安全に管理できる。
  • 高性能: 高速なデータ検索が可能。
  • Djangoとの相性が良い: Djangoのデータ管理機能(ORM)と簡単に連携できる。

今回のチュートリアルでは、Djangoを使ったWebアプリのデータ(例:ユーザー情報やブログ投稿)をPostgreSQLで保存します。

クイックスタートに基づいてDjangoWebアプリを作成する

必要な準備

準備するもの

作業の開始

作業ディレクトリの作成

プロジェクト用のディレクトリを作成し、その中に必要なファイルを配置します。

Dockerfileの作成

Djangoイメージを生成するファイルです。
(エラーが発生したため、Pythonのバージョンを 3.10 に変更しています。)

requirements.txt

Djangoに必要なPythonパッケージを指定します。
(最新のDjangoバージョン(3.2以上、または4.x)を使用するように変更しています。)

docker-compose.ymlの作成

DjangoとPostgreSQLの連携を設定するComposeファイルです。
(version:は非推奨なため削除してあります。)

Djangoプロジェクトを作成する

以下のコマンドを実行して、Djangoプロジェクトを作成します。

なぜこのコマンドが必要?

を実行すると、Djangoの基本ファイル(manage.py や settings.py)がカレントディレクトリに作成されます。

  1. エラーを防ぐ
    sudo docker-compose up では、manage.py を実行しています。
    このコマンドを事前に実行しないと、以下のようなエラーが発生します。
    python: can’t open file ‘manage.py’: [Errno 2] No such file or directory
  2. ボリューム同期を正しく機能させる
    docker-compose.yml では、 volumes でホストディレクトリ(ローカル環境)とコンテナディレクトリを同期しています。
    しかし、ホスト側が空の場合、コンテナも空ディレクトリとして扱われてしまうため、Djangoプロジェクトの生成が必要です。
コマンド実行後のファイル構成

このコマンド実行後、カレントディレクトリに以下のようなDjangoプロジェクトの基本ファイルが作成されます。

Djangoプロジェクト作成後の権限修正

Djangoプロジェクトのディレクトリとファイルの権限を適切に設定します。

データベース接続設定を変更

DjangoとPostgreSQLを接続するために、composeexample/settings.py を編集します。

composeexample/settings.pyを変更

デフォルトのデータベース設定を以下のように書き換えます。

エラーを回避するため、composeexample/settings.pyファイルの先頭に以下の行を追加します。

これにより、docker-compose.yml で指定した環境変数に基づいてPostgreSQLに接続できます。

コンテナを起動する

以下のコマンドを実行して、DjangoとPostgreSQLのコンテナを起動します。

起動後のコンテナ構成

以下は、コンテナ起動後のDjangoとPostgreSQLコンテナの関連図です。

構成の説明

web コンテナ
Djangoアプリケーションが動作するコンテナ。
ローカルPCのポート 8000 を介してブラウザからアクセスできます。
PostgreSQL(db コンテナ)にデータベース接続を行います。

db コンテナ
PostgreSQLデータベースが動作するコンテナ。
コンテナ内のポート 5432 でDjangoからの接続を受け付けます。

ローカルPCのブラウザ
ユーザーがDjangoアプリにアクセスするためのインターフェース。
URL http://localhost:8000 を通じてDjangoアプリケーションに接続します。

Djangoアプリの起動と確認

コンテナが正常に起動していることを確認し、ブラウザで以下のURLにアクセスします。

Djangoの初期画面が表示されれば成功です。

トラブルシューティング

権限エラー

composeexample ディレクトリや manage.py の権限が正しく設定されていない場合、以下のエラーとなります。

  • composeexample/settings.py の編集でPermissionError が発生

環境変数を取得できない

Djangoの設定ファイル composeexample/settings.py のデータベース設定で os.environ.get() を使用していますが、os モジュールが定義されていないため、Pythonが NameError をスローする。

エラー箇所

解決方法

まとめ

チュートリアル通り進めると、エラーが発生する箇所もありましたが、作業する上でいろいろと勉強になります。
作業完了後は、Docker Composeを使うことで、ローカル環境にDjangoやPostgreSQLを直接インストールする手間もなくなり、簡単にDjangoを起動できるようになりました。

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