<Python>DjangoをDocker環境で構築する

AI

下準備

まずはローカル環境のお好きなフォルダに以下の3つのファイルを作成してください。

Dockerfile

FROM python:3.9
ENV PYTHONUNBUFFERED=1
WORKDIR /webapp
COPY requirements.txt /webapp/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY . /webapp/

この Dockerfile ファイルは、Python 3.9 環境で動作するウェブアプリケーションの Docker イメージを作成するための設定ファイルです。以下に各行の説明を示します。

  1. FROM python:3.9:
    この行は、ベースイメージとして Python 3.9 を使用することを指定しています。これにより、Python 3.9 がインストールされた状態のコンテナが作成されます。
  2. ENV PYTHONUNBUFFERED=1:
    この環境変数設定は、Python の標準出力と標準エラーのバッファリングを無効にします。これにより、ログがリアルタイムで出力されるようになります。
  3. WORKDIR /webapp:
    この行は、コンテナ内の作業ディレクトリを /webapp に設定します。以降のコマンドはこのディレクトリ内で実行されます。
  4. COPY [requirements.txt](http://_vscodecontentref_/1) /webapp/:
    ローカルの requirements.txt ファイルをコンテナ内の /webapp/ ディレクトリにコピーします。このファイルには、プロジェクトで必要な Python パッケージがリストされています。
  5. RUN pip install --upgrade pip && pip install -r requirements.txt:
    まず、pip を最新バージョンにアップグレードし、その後 requirements.txt に記載されたパッケージをインストールします。このコマンドにより、プロジェクトに必要な依存関係がすべてインストールされます。
  6. COPY . /webapp/:
    ローカルのプロジェクトディレクトリ全体をコンテナ内の /webapp/ ディレクトリにコピーします。これにより、プロジェクトのソースコードやその他のファイルがコンテナ内に配置されます。

この Dockerfile により、Python 3.9 環境で必要な依存関係がインストールされた状態のコンテナを簡単に構築することができます。

requirements.txt

Django>=4.0,<5.0

この requirements.txt ファイルは、Python プロジェクトで必要なパッケージとそのバージョンを指定するためのファイルです。このファイルを使用することで、プロジェクトの依存関係を簡単に管理し、他の開発者が同じ環境を再現できるようにします。

プロジェクトが Django バージョン 4.0 以上、5.0 未満のバージョンを必要としていることを示しています。つまり、Django 4.x 系のバージョンがインストールされることを期待しています。このようにバージョン範囲を指定することで、互換性のあるバージョンを柔軟に使用できるようにしつつ、将来的なメジャーバージョンアップによる互換性の問題を避けることができます。

この設定により、pip install -r requirements.txt コマンドを実行すると、適切なバージョンの Django がインストールされ、プロジェクトが正常に動作するようになります。

docker-compose.yml

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/webapp
    ports:
      - "8000:8000"

この docker-compose.yml ファイルは、Docker Compose を使用して複数のコンテナを定義および管理するための設定ファイルです。ここでは、Python ベースのWEBアプリケーションを実行するための設定が記述されています。以下に各行の説明を示します。

  1. services::
    このセクションでは、複数のサービス(コンテナ)を定義します。ここでは web という名前のサービスが定義されています。
  2. web:
    web サービスは、WEBアプリケーションを実行するためのコンテナを定義しています。
  3. build: .:
    この行は、現在のディレクトリ(.)にある Dockerfile を使用してイメージをビルドすることを指定しています。
  4. command: python [manage.py](http://_vscodecontentref_/2) runserver 0.0.0.0:8000:
    この行は、コンテナが起動したときに実行されるコマンドを指定しています。ここでは、Django の開発サーバーをホストの全ての IP アドレス(0.0.0.0)でポート 8000 で起動するように指示しています。
  5. volumes::
    このセクションでは、ホストとコンテナ間で共有されるディレクトリを指定します。
    - .:/webapp は、ホストの現在のディレクトリ(.)をコンテナ内の /webapp ディレクトリにマウントします。これにより、ホスト側のファイル変更がコンテナ内に反映されます。
  6. ports::
    このセクションでは、ホストとコンテナ間で公開されるポートを指定します。- "8000:8000" は、ホストのポート 8000 をコンテナのポート 8000 にマッピングします。これにより、ホストのポート 8000 でウェブアプリケーションにアクセスできるようになります。

この docker-compose.yml ファイルにより、Django ウェブアプリケーションを簡単にコンテナ化し、開発環境で実行することができます。

Djangoプロジェクト

Djangoプロジェクトの作成

docker-compose run web django-admin startproject youre-container-name .

このコマンドは、Docker Compose を使用して Django プロジェクトを新規作成するためのものです。以下に各部分の説明を示します。

  • docker-compose run web:
    Docker Compose を使用して、web サービスを実行します。web サービスは、docker-compose.yml ファイルで定義されています。
  • django-admin startproject youre-container-name .
    django-admin コマンドを使用して、新しい Django プロジェクトを作成します。startproject は新しいプロジェクトを開始するためのサブコマンドです。youre-container-name はプロジェクトの名前で、. は現在のディレクトリにプロジェクトを作成することを示しています。

このコマンドを実行すると、web サービスのコンテナ内で Django プロジェクトが作成され、ホストの現在のディレクトリにそのプロジェクトのファイルが生成されます。これにより、Django プロジェクトの初期設定が完了します。

起動

docker-compose up

docker-compose up コマンドは、Docker Compose を使用して定義されたサービスをビルドし、起動するためのコマンドです。以下に各部分の説明を示します。

  • docker-compose:
    Docker Compose コマンドラインツールを呼び出します。
  • up:
    定義されたサービスをビルドし、起動します。このコマンドは、docker-compose.yml ファイルに基づいて、必要なコンテナを作成し、リンクされた状態で実行します。

具体的には、docker-compose up コマンドを実行すると、以下の処理が行われます。

  1. docker-compose.yml ファイルを読み込み、定義されたサービスを確認します。
  2. 必要に応じて、サービスの Docker イメージをビルドします。
  3. 定義されたサービス(コンテナ)を起動し、リンクされた状態で実行します。
  4. コンテナのログがターミナルに表示され、リアルタイムで出力が確認できます。

docker-compose up コマンドは、開発環境やテスト環境で複数のサービスを一括して起動するのに便利です。

ブラウザで確認する

ブラウザで http://localhost:8000/ を開いて見ましょう。

札幌在住エンジニア。JavaやPHPやWordPressを中心とした記事が中心です。

【SE歴】四半世紀以上
【Backend】php / java(spring) / c# / AdobeFlex / c++ / VB / cobol
【Frontend】 vue.js / jquery他 / javascript / html / css
【DB】oracle / mysql / mariadb / sqlite
【infrastructure】aws / oracle / gcp
【license】aws(saa-c03) / oracle master / XML Master / Sun Certified Programmer for the Java 2 Platform 1.4

Nobelをフォローする
AI
Nobelをフォローする

コメント

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