Docker上でDjangoアプリを動かす
Docker 上で Django アプリを動かす
Docker 上で Django のアプリを動かす一番シンプルな方法を紹介します。一応、データベースは、標準設定の SQLite ではなく、PostgreSQL を利用するようにしています。
目次 |
---|
今回紹介する内容 |
Docker Compose の準備 |
Docker を使うためのファイルの設定! |
Django プロジェクトの作成 |
まとめ |
今回紹介する内容
今回は簡単にするために以下の条件で Docker 上に実装します。
- 開発用のサーバーを利用
- データベースに「PostgreSQL」を利用
- Django アプリはデモ用(テンプレート)
Web サーバーとデータベースの2つのイメージを利用して Django のアプリを動かします。設定には、「django-compose」を利用します。
Docker Compose の準備
Docker はインストールされているという前提で、ここでは、「docker-compose」をインストールする方法を紹介します。 インテルベースのシステムの場合、特に問題はないのですが、今回、M1 Mac 上で動作している仮想マシーンの Linux(Ubuntu ARM64 版)でインストールをしようとしたところ、うまく行きませんでした。
最終的にインストールする方法として、「pip3」を使うとうまく行くことがわかりました。 (*)インテルベースの場合は、インターネットに資料がたくさんあるのでここでは ARM64 ベースの場合を紹介しています。
user@ubuntu:~/Documents/blog/docker-django-sample$ sudo pip3 install docker-compose
インストールは以上で完了です。 インストールが正常に行われたかを確認するため、以下のコマンドを実行して確認してください。
user@ubuntu:~/Documents/blog/docker-django-sample$ sudo docker-compose --version
docker-compose version 1.29.2, build unknown
Docker を使うためのファイルの設定
Docker と docker-compose の設定はそれぞれ、「Dokcerfile」と「docker-compose.yml」で行います。 Dockerfile は、Docker の設定のためのファイルで、必要なファイルを準備したり、フォルダの指定を行います。
Dockerfile
# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
docker-compose.yml
今回はシンプルな構成で Django アプリを動かしているので、設定は Web サーバーとデータベースの設定のみです。 データベースには「PostgreSQL」のイメージを利用しています。データベースのパスや、データベースのユーザー、データベース名、データベースのユーザーのパスワードなどを設定します。 Web サーバーは今回は、開発ようのサーバーを利用しています。基本的にコードの場所を指定して、開発用のサーバーを起動しています。
ersion: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=db_postgres
- POSTGRES_USER=user_postgres
- POSTGRES_PASSWORD=password_postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
requirements.txt
Docker に Django のアプリで利用するパッケージの情報を記述したファイルです。 このファイルの情報を元に必要な Python パッケージをインストールしています。
Django==3.2.2
psycopg2-binary>=2.8
Django プロジェクトの作成
Django のプロジェクトを作成します。
user@ubuntu:~/Documents/blog/docker-django-sample$ sudo docker-compose run web django-admin startproject docker_django_sample .
管理者の権限で実行しているので、ファイルの所有者の変更をしておきます。
user@ubuntu:~/Documents/blog/docker-django-sample$ sudo chown -R $USER:$USER .
settings.py の変更
アクセスを許可するサーバーの IP アドレスと、docker-compose.yml で設定したデータベース情報にデフォルト設定を置き換えます。
ALLOWED_HOSTS = ['0.0.0.0']
....
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'db_postgres',
'USER': 'user_postgres',
'PASSWORD': 'password_postgres',
'HOST': 'db',
'PORT': 5432,
}
}
あとは、イメージを起動すれば Django のデモ用のアプリが Docker のイメージで可動します。
user@ubuntu:~/Documents/blog/docker-django-sample$ sudo docker-compose up -d
Creating network "docker-django-sample_default" with the default driver
Creating docker-django-sample_db_1 ... done
Creating docker-django-sample_web_1 ... done
ブラウザで、「0.0.0.0:8000」にアクセスするとデモの画面が表示されます。
user@ubuntu:~/Documents/blog/docker-django-sample$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-django-sample_web latest 413a147229da 10 minutes ago 982MB
postgres latest 9b18ef67a7a8 20 hours ago 300MB
Docker の2つのイメージが作成されていることが確認できます。
まとめ
Django のアプリを2つの Docker イメージを利用して動かしています。
- Django のアプリのイメージ
- PostgreSQL のイメージ
Dockerfile は、Docker に設定するファイルやフォルダの設定を記述してイメージを準備します。docker-compose.yml は、複数の Docker のイメージの設定を記述します。
Django の操作は、Docker のイメージ上の操作になるので、docker-compose を通して行います。
通所の、Django の操作に比べるとひと手間多い感じですが、慣れてしまえばほぼ同じ容量で開発できます。むしろ、別に、サーバーを準備しないで住む分開発や機能検証が簡単になります。