開発運用

Django Gunicorn Docker デプロイ

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.pysettings.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 など必要なパッケージをリストします。

text
django>=4.0,<5.0 gunicorn>=20.0,<21.0

4. Docker イメージのビルド

Dockerfilerequirements.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 の例を示します。

yaml
version: '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 を使用することで、データベースや他の依存サービスとの連携も簡単に管理できます。

Back to top button