このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:開発環境コンテナ:Django+PostgrSQL②


🐍 開発環境コンテナ:Django+PostgreSQL②

前回の記事「開発環境コンテナ:Django+PostgreSQL①」では、
Docker Composeを使ってDjango+PostgreSQLの構成ファイルを作成しました。
 今回はその続きとして、実際にDjangoプロジェクトを作成し、コンテナを起動してブラウザで動作確認するところまでを解説します。

今回構成する開発環境コンテナの構成は下図の通りです。

🚀 Djangoプロジェクトを作成しよう!

Djangoを動かすには「プロジェクト」を作成する必要があります。
 このプロジェクトには、アプリの設定・データベース接続情報・ルーティングなど、アプリの基盤が含まれています。

Djangoのプロジェクトを作るには、django-admin コマンドを使用します。
 ただし、今回はローカル環境ではなくDjangoコンテナ内で実行するので、Docker Compose経由でコマンドを実行します。

🧩 「docker compose run」コマンドの実行

コマンド

docker compose run django django-admin startproject myproject .

コマンド解説

項目説明
docker compose runDocker Composeの指定したサービス内でコマンドを実行する。
django実行対象のサービス名(compose.yamlで定義したdjangoサービス)。
django-adminDjangoの管理ツール。プロジェクト作成やマイグレーション管理に使う。
startproject新しいDjangoプロジェクトを作成するサブコマンド。
myproject作成するプロジェクトの名前。
.(ドット)現在のディレクトリに作成する指定。

💬 ポイント
 このコマンドは、djangoコンテナ内でdjango-adminを実行して、新しいプロジェクトを自動生成します。
 作成後、ローカル側(ホストPC)にも「myproject」フォルダと「manage.py」ファイルが反映されます。

実行結果

PS C:\Users\joeac\Desktop\docker\django1> docker compose run django django-admin startproject myproject .
[+] Running 14/14
 ✔ postgres Pulled                                                           13.3s
(省略)
 => resolving provenance for metadata file                                    0.0s
PS C:\Users\joeac\Desktop\docker\django1>

💡 コマンドの動作を理解しよう

 このコマンドは、docker compose を使って Djangoコンテナ内で django-admin startproject を実行しています。
つまり、ローカル環境ではなくコンテナの中でプロジェクトを生成しているわけです。

その結果、カレントディレクトリ(例:C:\Users\ユーザー名\Desktop\docker\django1)に
次の2つのファイル・フォルダが自動で作られます👇

ファイル/フォルダ説明
myproject/Djangoのメインプロジェクトディレクトリ。設定ファイルやURL定義などが入る。
manage.pyDjango全体を操作するためのコマンドツール。サーバ起動やマイグレーションで使用。

「myproject」フォルダの確認

「myproject 」ディレクトリの中身を確認します。

「settings.py」ファイルがあります。このファイルを、この後で編集していきます。

🧱 コマンド実行の流れをイラストで見る

🧹 一時コンテナを停止・削除しよう

プロジェクトを作成したら、Djangoコンテナは一時的に動いているだけなので
不要なコンテナやキャッシュをきれいにします。

実行するコマンドは次の2つです👇

docker compose stop
docker system prune -a
コマンド説明
docker compose stop実行中のコンテナを停止します。
docker system prune -a不要なコンテナ・ネットワーク・イメージを削除してディスクを整理します。

💬 ポイント
prune -a を実行すると全ての未使用リソースが削除されるので、実行前に必ず確認しましょう!

実行結果

PS C:\Users\joeac\Desktop\docker\django1> docker compose stop
[+] Stopping 1/1
 ✔ Container postgres_container  Stopped                                      0.3s
PS C:\Users\joeac\Desktop\docker\django1> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y

⚙️ settings.pyの編集(PostgreSQL接続設定)

Djangoはデフォルトで「SQLite」を使用します。
今回はPostgreSQLを使うため、接続設定を変更します。

まず、生成された「myproject」フォルダを開きます。
中にある settings.py を編集しましょう。

コマンド

code ./myproject/settings.py

VSCodeが開いたら、次のように書き換えます👇
赤枠の「DATABASES」の内容を書き換えます。

書き換える内容

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'test-db',
        'USER': 'test-user',
        'PASSWORD': 'test-pass',
        'HOST': 'postgres',
        'PORT': 5432,
    }
}

設定内容の説明

項目説明
ENGINE使用するデータベースエンジンを指定(PostgreSQLの場合は django.db.backends.postgresql)。
NAMEデータベース名(compose.yamlで設定した POSTGRES_DB)。
USERデータベースユーザー名。
PASSWORDデータベースのパスワード。
HOST接続先ホスト名(コンテナ名の postgres を指定)。
PORTPostgreSQLの通信ポート番号(デフォルト5432)。

💬 補足
Composeでは同一ネットワーク内にあるコンテナ同士が、サービス名で通信可能です。
ここでの HOST: postgres は、compose.yamlで定義したPostgreSQLコンテナ名を指しています。

🏗️ コンテナを起動してみよう!

いよいよ、DjangoとPostgreSQLを同時に起動します。

コマンド

docker compose up -d

コマンド解説

オプション説明
-dデタッチモード(バックグラウンド)で実行する。

💬 ポイント
compose.yaml ファイルがあるディレクトリで実行する必要があります。
 実行後、DjangoとPostgreSQLが自動的に連携し、Djangoアプリがポート8000で待ち受け状態になります。

実行結果

PCの環境にもよりますが、コマンドの実行には2分程度かかります。

PS C:\Users\joeac\Desktop\docker\django1> docker compose up -d
[+] Running 14/14
(省略)
[+] Running 4/4
 ✔ django1-django                Built                                        0.0s
 ✔ Network django1_default       Created                                      0.0s
 ✔ Container postgres_container  Started                                      0.7s
 ✔ Container django_container    Started                                      0.9s
PS C:\Users\joeac\Desktop\docker\django1>

🔍 Djangoコンテナの状態確認

コマンド

docker compose ps

実行結果

PS C:\Users\joeac\Desktop\docker\django1> docker compose ps
NAME                 IMAGE            COMMAND                   SERVICE    CREATED              STATUS              PORTS
django_container     django1-django   "python manage.py ru…"   django     About a minute ago   Up About a minute   0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp
postgres_container   postgres:14.2    "docker-entrypoint.s…"   postgres   About a minute ago   Up About a minute   5432/tcp
名前状態ポート
postgres_containerUp5432/tcp
django_containerUp0.0.0.0:8000->8000/tcp

💬 両方が Up になっていればOKです!

🌐 ブラウザでDjangoを確認

Djangoコンテナが起動したら、
ブラウザのアドレスバーに以下を入力してアクセスします👇

http://localhost:8000

DjangoのTOPページ(Welcome画面) が表示されれば成功です!

✅ まとめ

ステップ内容
1️⃣docker compose run django django-admin startproject myproject . でプロジェクト作成
2️⃣settings.py を編集してPostgreSQLへ接続設定
3️⃣docker compose up -d でコンテナを起動
4️⃣http://localhost:8000 にアクセスしてDjango起動確認

💬 これで、Django+PostgreSQLの開発環境が完成!