Django アプリケーションを Gunicorn サーバーで実行し、Docker コンテナにデプロイする方法について、ステップバイステップで解説します。このプロセスは、Django アプリケーションを効率的に運用し、スケーラビリティを高めるための一般的な方法です。また、Gunicorn は、Python アプリケーションに特化した WSGI サーバーで、Docker はコンテナ化されたアプリケーションのデプロイを簡素化するツールです。この手順に従えば、Django アプリを Docker コンテナ内で動作させることができます。
1. Django アプリケーションのセットアップ
まず最初に、Django アプリケーションが必要です。まだ作成していない場合は、新しくプロジェクトを作成します。以下の手順に従ってください。
bash# Django プロジェクトを作成する
django-admin startproject myproject
# プロジェクトディレクトリに移動する
cd myproject
# 必要なパッケージをインストール
pip install django
プロジェクトが作成されると、myproject
というディレクトリができ、その中に manage.py
や settings.py
などの重要なファイルが含まれます。
2. Gunicorn のインストール
次に、Django アプリケーションをサーブするために Gunicorn をインストールします。Gunicorn は WSGI サーバーで、Django のリクエストを処理します。
bash# Gunicorn をインストール
pip install gunicorn
インストール後、ローカルで Gunicorn を使用してアプリケーションを実行することができます。
bash# Gunicorn でアプリケーションを起動する
gunicorn myproject.wsgi:application
これで、Django アプリケーションは Gunicorn で動作する準備が整いました。
3. Dockerfile の作成
次に、Django アプリケーションを Docker コンテナ内で実行するための設定を行います。まず、プロジェクトディレクトリに Dockerfile
を作成します。
Dockerfile# ベースとなるイメージを指定 FROM python:3.10-slim # 必要なライブラリをインストールする RUN pip install --upgrade pip # 作業ディレクトリを設定 WORKDIR /app # 必要なファイルをコンテナにコピーする COPY requirements.txt /app/ # 必要なパッケージをインストール RUN pip install -r requirements.txt # アプリケーションのソースコードをコンテナにコピー COPY . /app/ # Gunicorn を使用して Django アプリケーションを実行 CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
この Dockerfile
は以下のステップで構成されています:
python:3.10-slim
ベースイメージを使用しています。- アプリケーションの依存関係をインストールするために、
requirements.txt
を利用します。 - アプリケーションコードをコンテナ内にコピーし、Gunicorn でサーバーを起動します。
次に、requirements.txt
ファイルを作成して、Django や Gunicorn など必要なパッケージをリストします。
textdjango>=4.0,<5.0 gunicorn>=20.0,<21.0
4. Docker イメージのビルド
Dockerfile
と requirements.txt
の準備が整ったら、次に Docker イメージをビルドします。
bash# Docker イメージをビルド
docker build -t myproject .
このコマンドを実行すると、myproject
という名前で Docker イメージが作成されます。
5. Docker コンテナの実行
Docker イメージがビルドできたら、次にコンテナを実行します。以下のコマンドでコンテナを起動します。
bash# Docker コンテナを実行
docker run -d -p 8000:8000 myproject
これで、Django アプリケーションがコンテナ内で実行され、ホストマシンのポート 8000 でアクセスできるようになります。ブラウザで http://localhost:8000
にアクセスすると、Django アプリケーションが表示されるはずです。
6. Docker Compose の利用(オプション)
もしデータベースなど複数のサービスを利用する場合、docker-compose
を使うと便利です。以下に docker-compose.yml
の例を示します。
yamlversion: '3'
services:
web:
build: .
command: gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
postgres_data:
この構成では、Django アプリケーションを実行する web
サービスと、PostgreSQL データベースを提供する db
サービスを定義しています。depends_on
を使って、db
サービスが立ち上がった後に web
サービスを起動します。
docker-compose
を使ってコンテナを立ち上げるには、以下のコマンドを実行します。
bash# Docker Compose でコンテナを立ち上げる
docker-compose up -d
これで、Django アプリケーションとデータベースが Docker 上で連携し、簡単に起動できます。
7. 最後の確認
コンテナが起動したら、再度ブラウザで http://localhost:8000
にアクセスし、Django アプリケーションが正しく動作していることを確認してください。
結論
以上の手順を通して、Django アプリケーションを Gunicorn サーバーで動かし、Docker コンテナ内にデプロイする方法が分かりました。これにより、アプリケーションは移植性が高く、スケーラブルで、効率的に運用することができます。また、docker-compose
を使用することで、データベースや他の依存サービスとの連携も簡単に管理できます。