DockerでDjango環境構築。dockerfileの書き方

Container

あなたは今、開発環境の構築で以下のような課題を抱えていませんか?

「Djangoを学習したいが、Pythonのインストールやパスの設定でつまずいてしまった」 「インターネットの記事通りにコマンドを入力しても、Windows環境ではエラーが発生して進めない」 「環境構築に時間がかかり、プログラミングの学習が始められない」

Windows上に直接Pythonをインストールする方法では、ライブラリのバージョンの競合や、環境変数の設定などで多くの時間を費やすことがあります。これは、プログラミング学習における大きな障壁となりがちです。

そこで有効な解決策となるのが Docker(ドッカー) です。

この記事では、Windowsユーザー向けに、Dockerを使ってDjangoの開発環境を構築する手順を解説します。PCの環境への影響を最小限に抑え、いくつかのファイルを用意するだけで、動作するDjango環境を構築できます。

煩雑なインストール作業を省略し、コマンド操作で開発環境を立ち上げる方法を学びましょう。エラーを回避し、ブラウザにHello Worldを表示させて、すぐにコードを書き始められる状態を目指します。

この記事では、具体的なコードとその仕組みについて、初心者の方にも理解しやすいように解説します。このガイドに従って、Djangoの開発環境を構築してみましょう。

この記事の内容
  • Dockerの基本的な利用方法
  • Docker上でDjangoを利用する方法
  1. 1. なぜWindowsユーザーにDocker × Djangoが適しているのか?
    1. 環境構築におけるDockerの利点
    2. 開発効率を向上させる「バインドマウント」の仕組み
    3. WSL2によるWindows開発環境の進化
  2. 2. 【解説】WindowsでDocker × Django環境を構築する5ステップ
    1. 事前準備:Docker Desktopのインストール
    2. ステップ1:ディレクトリ構成の設計
    3. ステップ2:requirements.txt の作成
    4. ステップ3:Dockerfile の作成と解説
      1. 【推奨】 .dockerignore ファイルの作成
    5. ステップ4:docker-compose.yml の作成と環境変数の管理
      1. ① .env ファイルの作成
      2. ② docker-compose.yml の作成
    6. ステップ5:Djangoプロジェクトの生成コマンド
  3. 3. Hello Worldを表示させて開発サイクルを確認する
    1. 設定の修正:アクセス許可を与える
    2. 最小構成での記述:urls.pyの編集
    3. サーバーの起動
    4. ホットリロード体験:Dockerの外から修正する
    5. 便利なコマンド一覧と終了・再起動方法
    6. トラブルシューティング
  4. 4. 本番運用を見据えたセキュリティ設定 (.env)
    1. なぜ .env が必要なのか?
    2. settings.py の書き換え
    3. .env は Git にコミットしない
  5. 5. Pythonライブラリを追加する手順
    1. 手順1: requirements.txt の追記
    2. 手順2: コンテナの再ビルド
    3. 手順3: 再起動
    4. 【解説】なぜ直接 pip install してはいけないのか?
    5. 補足:コンテナ内での操作(docker-compose exec)の正しい使い道
  6. 6. ログの確認と永続化(ファイル出力)
    1. 手順1: settings.py の修正
    2. 手順2: ログフォルダの確認
  7. まとめ:ここからWeb開発が始まります

1. なぜWindowsユーザーにDocker × Djangoが適しているのか?

環境構築におけるDockerの利点

WindowsでWeb開発を行う場合、Dockerの利用は非常に有効です。

その理由は、Dockerを使うことで「自分のPC(ホストOS)」と「開発環境(コンテナ)」を分離できるからです。これには開発者にとって大きなメリットがあります。

従来の方法では、Windows上に直接Pythonをインストールし、仮想環境(venv)を作成し、データベースソフトをインストールする手順が必要でした。しかし、これにはリスクが伴います。「プロジェクトAではPython 3.8が必要だが、プロジェクトBでは3.11を使いたい」「一度インストールしたデータベースの削除が難しく、ファイルが残ってしまう」といった、PC環境への影響です。特にWindowsは、MacやLinuxと異なり、ファイルパスの扱いやコマンドの違いによるトラブルが発生しやすい傾向にありました。

Dockerはこの問題を解決します。

Dockerは「コンテナ」と呼ばれる仮想的な箱の中に、OS(Linux)、Python、ライブラリなどをまとめて格納します。Windows上で開発していても、実際にはコンテナ内のLinux環境でプログラムが動作します。これにより、「Windows環境特有の問題」を回避できます。さらに、プロジェクトごとにコンテナを作成・削除できるため、PC環境を清潔に保てます。この 「隔離性」と「再現性」 が、Dockerを利用する大きな理由です。

開発効率を向上させる「バインドマウント」の仕組み

「コンテナ内のファイルを編集するには、毎回アップロードが必要なのか?」と疑問に思うかもしれません。

しかし、その必要はありません。Dockerには 「バインドマウント(Volumes)」 という機能があります。

今回の構築でも採用しているこの機能は、「Windows上の特定のフォルダ」と「コンテナ内の特定のフォルダ」を同期させる 技術です。

例えば、Windowsのデスクトップにある src フォルダを、コンテナ内の /app フォルダにマウント(同期)させたとします。使い慣れたエディタ(VSCodeなど)でWindows上の views.py を編集して保存すると、即座にコンテナ内の views.py も更新されます。Djangoはファイルの変更を検知して自動で再起動するため、ブラウザを更新するだけで修正が反映されます。

つまり、「ファイルはWindows上で管理し、実行はDockerに行わせる」 という効率的な開発スタイルが実現できます。これが、「pyファイルやhtmlはDockerの外に配置するのですか?」という問いへの答えであり、推奨される構成です。

WSL2によるWindows開発環境の進化

かつて、WindowsでのDocker動作は遅く、不安定な時期がありました。しかし、WSL2 (Windows Subsystem for Linux 2) の登場により、状況は大きく改善しました。

WSL2は、Windows内で「Linuxカーネル」を動作させる技術です。現在のDocker Desktop for Windowsは、このWSL2を利用して動作します。これにより、ファイルシステムへのアクセス速度が向上し、Linux環境との互換性が高まりました。

これから紹介する手順は、このDocker Desktop環境を前提としています。DockerとWSL2を利用できる現在のWindowsは、開発に適した環境となっています。

2. 【解説】WindowsでDocker × Django環境を構築する5ステップ

ここからは、実際に環境を作成する手順を説明します。手順はシンプルですが、各ファイルの意味を理解することで、応用力が身につきます。

事前準備:Docker Desktopのインストール

まず、Windows PCに Docker Desktop をインストールして、起動を確認してください。タスクバーにアイコンが表示されていれば準備完了です。コマンドプロンプトやPowerShellといったコマンドラインで、コンテナの作成が可能となります。

インストールについては、次の記事を参考にしてください。

ステップ1:ディレクトリ構成の設計

プロジェクトの基盤となるフォルダを作成します。トラブルを避けるため、ログ用のフォルダもこの段階で作っておきましょう。 デスクトップなど、任意の場所に django-hello という親フォルダを作成し、以下の構成を作ってください。

django-hello/          # プロジェクトルート
├── src/               # ソースコード置き場(空フォルダを作成)
├── logs/              # ログ保存場所(空フォルダを作成)
├── Dockerfile         # コンテナの設計図
├── .dockerignore      # 除外ファイル設定
├── .env               # 環境変数ファイル
├── docker-compose.yml # 起動の設定ファイル
└── requirements.txt   # ライブラリ一覧

ポイント: src フォルダと logs フォルダをあらかじめ作成しておきましょう。

ステップ2:requirements.txt の作成

インストールしたいPythonライブラリを記述します。今回は最小構成としてDjangoのみを指定します。

ファイル名: requirements.txt

Django>=4.2

解説: バージョンを指定しないことも可能ですが、実務では互換性を保つために Django>=4.2 のように指定するのが一般的です。これで4.2以上の最新版がインストールされます。

ステップ3:Dockerfile の作成と解説

次に、コンテナの「設計図」となる Dockerfile を作成します。 【重要】 ここでセキュリティ対策とログ出力設定を行います。Dockerコンテナはデフォルトで root ユーザーで動作しますが、これはセキュリティ上リスクがあります。そこで、一般ユーザーを作成して実行するように設定します。

ファイル名: Dockerfile

# 1. ベースイメージの指定
FROM python:3.11-slim

# 2. 環境変数の設定
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# 3. 作業ディレクトリの作成
WORKDIR /app

# 【セキュリティ対策 & ログ設定】
# root以外の一般ユーザー 'developer' を作成します (ID: 1000)
# -m: ホームディレクトリを作成
RUN useradd -m -u 1000 developer

# ログ出力用のディレクトリを作成し、developerユーザーに書き込み権限を付与
RUN mkdir -p /var/log/django && chown developer:developer /var/log/django

# 4. ライブラリのインストール
# pipインストールはシステム全体に行うためrootのまま実行します
COPY requirements.txt /app/
RUN pip install --upgrade pip && pip install -r requirements.txt

# 5. ソースコードのコピーと権限設定
# 本番用記述ですが、コピーするファイルの所有者を 'developer' に変更します
COPY --chown=developer:developer ./src /app/

# 【ユーザー切り替え】
# これ以降のコマンド(runserverなど)は 'developer' ユーザーとして実行されます
USER developer

解説:

  • セキュリティ対策 (useradd, USER): コンテナが万が一乗っ取られた際、root 権限で動いているとホストOSへの被害が大きくなる可能性があります。そのため、実務では専用の一般ユーザー(ここでは developer)を作成し、そのユーザーでアプリケーションを動かすのが鉄則です。
  • ログディレクトリの設定: RUN mkdir -p /var/log/django ... で、ログファイルを保存する場所を作成し、一般ユーザーが書き込めるように権限を設定しています。
  • ENV PYTHONDONTWRITEBYTECODE=1: (.pycを作らない設定 Pythonは通常、起動を速くするために .pyc というキャッシュファイルを作成します。しかし、Docker開発ではフォルダ内が散らかったり、予期せぬエラーの原因になったりするのを防ぐため、この設定で作成を停止します。
    • 本番環境では: サーバーの起動速度を最優先するため、この設定を削除して .pyc ファイルを作成させる(キャッシュを有効にする)ことが一般的です。
  • ENV PYTHONUNBUFFERED=1: (ログをすぐ出す設定) これを設定しないと、エラーが起きてもログが表示されるまで時間がかかることがあります。
    • 設定しない方が良い場合: 本番環境などで、極めて大量のログが出るシステムの場合です。その際は、ログをまとめて書き出す(バッファする)方がコンピュータへの負荷が下がるため、この設定を外すことがあります。

【推奨】 .dockerignore ファイルの作成

Dockerfile と同じ階層に .dockerignore という名前のファイルを作成することをおすすめします。これはGitの .gitignore のDocker版のようなもので、Dockerイメージのビルド時にコンテナへ転送したくないファイルを指定します。

ファイル名: .dockerignore

# Git管理ファイル
.git
.gitignore

# 環境変数(絶対にイメージに含めない)
.env

# Pythonキャッシュ
__pycache__
*.pyc

# 仮想環境
venv
env

# IDE設定ファイル
.vscode
.idea

ステップ4:docker-compose.yml の作成と環境変数の管理

ここで、機密情報を管理するための .env ファイルの作成と、docker-compose.yml の設定を行います。

① .env ファイルの作成

プロジェクトのルート(docker-compose.yml と同じ場所)に .env という名前のファイルを作成し、以下の内容を記述します。 ここには、外部に漏れてはいけないパスワードやAPIキーなどを記述します。

ファイル名: .env

# 開発用設定
DEBUG=True
SECRET_KEY=django-insecure-dummy-key-for-dev-only
ALLOWED_HOSTS=*

② docker-compose.yml の作成

.env ファイルを読み込む設定(env_file)を追加した docker-compose.yml を作成します。

ファイル名: docker-compose.yml

version: '3.8'

services:
  web:
    # 現在のディレクトリ(.)にあるDockerfileを使ってビルドする
    build: .
    # サーバー起動コマンド。0.0.0.0を指定することで外部(ホスト)からのアクセスを許可する
    command: python manage.py runserver 0.0.0.0:8000
    
    # 【重要】環境変数ファイルの読み込み
    # .envファイルの内容をコンテナ内の環境変数として展開します
    env_file:
      - .env
    
    # 【重要】マウント設定
    # ホストの ./src を コンテナの /app に同期する
    # ホストの ./logs を コンテナの /var/log/django に同期する(ログ永続化)
    volumes:
      - ./src:/app
      - ./logs:/var/log/django
    
    # ポートフォワーディング
    # ホストの8000番ポートへのアクセスを、コンテナの8000番へ流す
    ports:
      - "8000:8000"

解説:

  1. version: '3.8' (バージョンの指定)
    • Docker Composeファイルの記述形式(構文)のバージョンを指定します。使用するDocker Engineのバージョンによってサポートされる機能が異なるため、明示します。’3.8′ は多くの環境で動く安定したバージョンです。
  2. services: (構成要素の定義)
    • アプリケーションを動かすために必要な「部品(コンテナ)」を定義するセクションです。Webサーバー、データベース、キャッシュサーバーなどをここに列挙して管理します。
  3. web: (サービス名)
    • 作成するコンテナにつける名前(IDのようなもの)です。appdjango など自由に決められます。コマンドで操作する際(例:docker-compose logs web)にこの名前を使用します。
  4. env_file: - .env (機密情報の注入)
    • 役割: 先ほど作成した .env ファイルの中身を読み込み、コンテナ内のOS環境変数としてセットします。
    • メリット: docker-compose.yml や Pythonコードの中にパスワードを直書きせずに済むため、このYAMLファイルをGitHub等にアップロードしても安全です(.env はアップロードしない前提です)。
  5. volumes (データの同期・マウント)
    • ./src:/app の意味:
      • 「自分のPCの src フォルダ」と「コンテナ内の /app フォルダ」を魔法のトンネルで繋ぐイメージです。
      • これにより、自分のPCでコードを保存すると、瞬時にコンテナ内のコードも書き換わります。コンテナを再起動しなくても変更が反映されるため、開発効率が劇的に上がります(ホットリロード)。
    • ./logs:/var/log/django の意味:
      • コンテナは削除すると中のデータが消えてしまいますが、ログファイルだけは残したい場合にこの設定を使います。コンテナ内のログ出力先を自分のPCの logs フォルダに繋げることで、データの永続化を行っています。
  6. ports: - "8000:8000" (ポートフォワーディング)
    • 役割: コンテナは閉じた箱のようなもので、そのままでは外部(ブラウザ)からアクセスできません。
    • 仕組み: 「PCの8000番ポートへのアクセス」を「コンテナの8000番ポート」へ転送(フォワード)する設定です。これにより、ブラウザで http://localhost:8000 と打つと、コンテナ内のDjangoサーバーに繋がるようになります。
  7. command: ... 0.0.0.0:8000
    • なぜ 0.0.0.0 ?:
      • localhost で起動するとコンテナ内部からしかアクセスできなくなってしまいます。
      • 0.0.0.0 を指定することで、「コンテナの外(ホストPC)」からの通信を受け付ける許可を出しています。これはDockerでWebサーバーを立てる際の必須テクニックです。

ステップ5:Djangoプロジェクトの生成コマンド

準備が整いました。Djangoのファイル一式を生成します。Windowsのターミナル(PowerShell推奨)を開き、django-hello フォルダへ移動して、以下のコマンドを実行してください。

docker-compose run --rm web django-admin startproject config .

コマンドの意味:

  • run: コンテナを一時的に起動してコマンドを実行する。
  • --rm: 実行が終了したら、コンテナを自動削除する(不要なデータを残さない)。
  • web: docker-compose.yml で定義したサービス名。
  • django-admin startproject config .: Djangoのプロジェクト作成コマンド。最後のドット . は「現在のディレクトリ(srcにマウントされている/app)に展開する」という意味で、これがないとフォルダ階層が深くなってしまいます。

実行後、Windowsのエクスプローラーで src フォルダを確認してください。manage.pyconfig フォルダが生成されていれば成功です。

3. Hello Worldを表示させて開発サイクルを確認する

環境構築は完了しました。ここからは、実際にブラウザに「Hello World」を表示させ、Dockerでの開発フローを確認しましょう。

設定の修正:アクセス許可を与える

生成されたDjangoの設定ファイルは、デフォルトではセキュリティのためにアクセス元を制限しています。Docker経由でアクセスできるよう、設定を変更します。

Windowsのエディタ(VSCodeなど)で src/config/settings.py を開き、28行目付近を修正します。

注意: 現段階ではまだ .env の読み込み設定を行っていないため、まずは値を直接書き換えて動かします。

# src/config/settings.py

# 変更前
ALLOWED_HOSTS = []

# 変更後 (開発環境なので全て許可する)
ALLOWED_HOSTS = ['*']

この修正ができること自体が、マウント機能(volumes)が正常に働いている証拠です。Windowsで編集したファイルが、Dockerコンテナから参照できる状態になっています。

最小構成での記述:urls.pyの編集

本来は「アプリ」を作成して views.py を記述するのがDjangoの基本ですが、今回は動作確認を優先し、ルーティングファイルである urls.py に直接プログラムを記述して手順を簡略化します。

src/config/urls.py を開き、内容を以下のコードで書き換えてください。

# src/config/urls.py
from django.contrib import admin
from django.urls import path
from django.http import HttpResponse

# シンプルなHello World関数
def hello_world(request):
    return HttpResponse("<h1>Hello World</h1><p>DockerでDjangoが動いています!</p>")

urlpatterns = [
    path('admin/', admin.site.urls),
    # トップページにアクセスしたら hello_world 関数を実行
    path('', hello_world),
]

サーバーの起動

サーバーを起動します。ターミナルで以下のコマンドを入力してください。

docker-compose up

初回はビルドが行われるため少し時間がかかりますが、2回目以降は短時間で完了します。ログに Starting development server at http://0.0.0.0:8000/ と表示されれば起動完了です。

ブラウザを開き、以下のURLにアクセスしてください。

👉 http://localhost:8000

画面に 「Hello World」 と表示されましたか? これで、Windows上にDjango環境が構築されました。

ホットリロード体験:Dockerの外から修正する

サーバーを起動したまま、エディタに戻って動作を確認してみましょう。 src/config/urls.py のメッセージを書き換えてみます。

return HttpResponse("<h1>Hello Japan!</h1><p>変更が即座に反映されます!</p>")

ファイルを保存(Ctrl+S)し、すぐにブラウザをリロード(F5)してください。 サーバーを再起動していなくても、表示が変わるはずです。

これが 「Dockerの外(Windows)にファイルを配置する」メリット です。コンテナ技術により環境を分離しつつ、開発作業はローカル環境と同じ感覚で行えます。これが、現代のWeb開発で推奨されるスタイルです。

便利なコマンド一覧と終了・再起動方法

開発中によく使うDockerコマンドを一覧にまとめました。

目的コマンド解説
起動docker-compose upログを表示しながら起動します。開発中はこれが基本です。
終了Ctrl + Cup で起動中にサーバーを停止します。
完全終了docker-compose downコンテナを停止し、削除します。作業を終える時に使います。
再起動docker-compose restartコンテナを作り直さず、再起動だけ行います。
状態確認docker-compose ps起動中のコンテナ一覧を表示します。「State」が「Up」なら動いています。
ログ確認docker-compose logsコンテナのログを確認します。-fをつけるとリアルタイムで表示します。

補足: ターミナルを占有せずにバックグラウンド(裏側)で動かしたい場合は docker-compose up -d を使います。

トラブルシューティング

よくあるエラー:

  • ポート競合: 「Port is already allocated」というエラーが出た場合、他のアプリが8000番ポートを使用しています。docker-compose.ymlports"8080:8000" などに変更して、localhost:8080 でアクセスしてみてください。
  • ファイルが見つからない: src フォルダが空のまま docker-compose up していませんか? 必ず startproject コマンドでファイルを生成してから起動してください。

4. 本番運用を見据えたセキュリティ設定 (.env)

「Hello World」では動くことを優先しましたが、実際の開発では 「機密情報をコードに書かない(ハードコードしない)」 ことが鉄則です。 プロフェッショナルな開発現場で標準的に行われている、環境変数の管理方法を適用してみましょう。

なぜ .env が必要なのか?

Djangoの settings.py には、デフォルトで以下のような記述があります。

  • SECRET_KEY: 暗号化に使われる重要な鍵。これが漏れるとセキュリティホールになります。
  • DEBUG = True: エラー時に詳細な情報を表示する機能。便利ですが、機密情報まで表示してしまうため、本番環境では絶対に False にする必要があります。

これらをソースコードに直接書いたままGitHubなどにアップロードしてしまうと、世界中に鍵を公開することになります。これを防ぐために、ステップ4で作成した .env ファイルを使います。

settings.py の書き換え

docker-composeenv_file 設定のおかげで、Pythonからは os.getenv を使って .env の値を読み取ることができます。 src/config/settings.py を開き、以下のように修正してください。必ず import os を追加するのを忘れないでください。

from pathlib import Path
import os # 【重要】追加

# ... (中略) ...

# 修正前: シークレットキーが直書きされている
# SECRET_KEY = 'django-insecure-xxxxx...'

# 修正後: 環境変数から読み込む (なければデフォルト値を使うかエラーにする)
SECRET_KEY = os.getenv('SECRET_KEY', 'django-insecure-dummy-key-for-dev-only')

# 修正前
# DEBUG = True

# 修正後: 文字列の 'True' かどうかで判定
DEBUG = os.getenv('DEBUG') == 'True'

# 修正前
# ALLOWED_HOSTS = []

# 修正後: カンマ区切りでリスト化
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '*').split(',')

.env は Git にコミットしない

最も重要な点です。.env ファイルには本物のパスワードや鍵が含まれるため、Gitの管理から除外する必要があります。 プロジェクトルートに .gitignore ファイルを作成し、以下を追記してください。

ファイル名: .gitignore

.env
__pycache__/
*.pyc
db.sqlite3

これで、コード(settings.py)には「環境変数を読むロジック」だけが残り、秘密の情報(.env)はあなたのPCだけにある状態を作ることができます。

5. Pythonライブラリを追加する手順

開発が進むと、画像処理のために Pillow を入れたり、外部データを取得するために requests を入れたりする必要が出てきます。Docker環境でライブラリを追加する際の正しい手順を解説します。

手順1: requirements.txt の追記

まず、ホスト側(Windows)にある requirements.txt に、追加したいライブラリ名を記述します。

例: requestsを追加する場合

Django>=4.2
requests

手順2: コンテナの再ビルド

docker-compose.yml で設定したファイルの同期(volumes)は、ライブラリのインストール場所には適用されません。そのため、Dockerfile の内容を再度実行して、新しいライブラリが含まれたイメージを作り直す必要があります。

ターミナルで一度サーバーを停止(Ctrl+C)し、以下のコマンドを実行します。

docker-compose build

これにより、更新された requirements.txt を読み込んで、新しいライブラリがインストールされます。

手順3: 再起動

ビルドが完了したら、通常通り起動します。

docker-compose up

これで、追加したライブラリがDjangoから利用できるようになります。

【解説】なぜ直接 pip install してはいけないのか?

「コンテナの中に入って pip install requests と打てば動くのでは?」と思った方は鋭いです。確かにその場では動きます。しかし、Docker開発ではこの方法は非推奨です。理由は以下の2点です。

  1. コンテナは「使い捨て」だから Dockerコンテナは、docker-compose down などで削除されると、その内部に加えられた変更(インストールしたライブラリなど)は全て消え去ります。次回起動時には元のイメージから真っさらな状態で立ち上がるため、「昨日入れたはずのライブラリがない!」という事態になります。
  2. 「環境の再現性」が失われるから Dockerの強みは「docker-compose up だけで誰でも同じ環境が作れること」です。手動コマンドでライブラリを入れる運用にしてしまうと、他のメンバーのPCや本番環境ではそのライブラリが入っていない状態になり、エラーの原因になります。

結論: 一時的な動作確認のために pip install をするのはOKですが、本格的に使うことが決まったら、必ず requirements.txt に追記して再ビルド(build)する習慣をつけましょう。

補足:コンテナ内での操作(docker-compose exec)の正しい使い道

「コンテナの中に入る」こと自体は、開発において頻繁に行います。そのためのコマンドが docker-compose exec です。

使い方:

# コンテナの中に入って操作する場合 (抜けるときは exit)
docker-compose exec web bash

# または単発でコマンドを実行する場合
docker-compose exec web python manage.py migrate

使うべき状況: ライブラリのインストール(永続化が必要な変更)には使いませんが、以下のような**「状態の変更」や「調査」**には必須のコマンドです。

  1. Django管理コマンドの実行 データベースのマイグレーション(migrate)や、管理ユーザーの作成(createsuperuser)など。
  2. デバッグ・調査 「ログファイルが正しく生成されているか?」「生成された画像ファイルは存在するか?」などを直接確認する場合。
  3. 一時的な動作確認 「このライブラリを入れたら動くかな?」と、requirements.txt に書く前に少し試したい場合(確認後はコンテナを破棄すれば元通りになるので便利です)。

6. ログの確認と永続化(ファイル出力)

Dockerでは、標準出力(コンソールに出るログ)はコンテナが削除されると消えてしまう場合があります。 開発中や本番運用でログを確実に残すために、「標準出力」と「ファイル」の両方にログを記録する設定を行いましょう。

手順1: settings.py の修正

src/config/settings.py の末尾に、以下の LOGGING 設定を追加してください。 これにより、コンソールへの出力に加えて、/var/log/django/django.log というファイルにもログが書き込まれるようになります。

# src/config/settings.py の末尾に追加

# ログ出力ディレクトリの作成(念のためPython側でも確認)
import os
LOG_DIR = '/var/log/django'
if not os.path.exists(LOG_DIR):
    try:
        os.makedirs(LOG_DIR, exist_ok=True)
    except PermissionError:
        pass  # Dockerfileで作成済みのはずだが、権限エラーなら無視(標準出力のみになる)

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
        },
        'file': {
            'class': 'logging.FileHandler',
            'filename': os.path.join(LOG_DIR, 'django.log'),
            'formatter': 'verbose',
            'encoding': 'utf-8',
        },
    },
    'root': {
        'handlers': ['console', 'file'],
        'level': 'INFO',
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
            'propagate': False,
        },
    },
}

手順2: ログフォルダの確認

前述の docker-compose.yml に追加した以下の設定により、ログファイルはWindows側にも同期されます。

    volumes:
      - ./logs:/var/log/django

サーバーを起動(docker-compose up)すると、プロジェクトフォルダ内の logs フォルダの中に django.log が生成されます。このファイルはコンテナを削除しても消えません。

まとめ:ここからWeb開発が始まります

今回は、Windows環境におけるDockerを使ったDjango開発環境の構築方法について、以下の6点を通して解説しました。

  1. Dockerを使う意義(環境への影響を抑える・統一できる)
  2. 具体的な構築手順(Dockerfile・Compose・マウント設定・セキュリティ対策)
  3. 環境変数の管理(.envによる機密情報の保護)
  4. 実際の動作確認(Hello Worldとホットリロード)
  5. ライブラリの追加手順(requirements.txtと再ビルド)
  6. ログの管理と永続化(標準出力とファイル出力)

この環境があれば、データベース(PostgreSQLやMySQL)を追加する場合も、docker-compose.yml に設定を追記するだけで対応可能です。インストーラーを探したり、パス設定に悩んだりする必要はありません。

「環境構築」はゴールではありません。開発のスタートラインです。 Dockerというツールを活用することで、本来の目的である「アプリケーション開発」に集中できるようになります。

エディタを開いて、Djangoアプリケーションの作成を始めましょう。

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