#概要
以前、以下の記事にてDockerfileを利用した単一コンテナによるDjangoの開発環境構築についての方法を解説いたしました。
シンプルなDocker+Django開発環境構築
今回は、_Docker Compose_を使用した方法について記載いたします。
前回と同じく、シンプルな環境構築を目的としているため、データベースはDjango標準のSQLite3をそのまま利用することとしております。
#前提
Docker Desktopがインストール済みのWindowsおよびMac、またはDocker EngineとDocker Composeがインストール済みのLinuxを想定しております。
なお、WindowsとMacについては、Docker Desktop内にDocker Composeが同梱されているため、別途インストールの必要はありません。
記事内のコマンドはMacのターミナル上で実行しておりますが、Docker DesktopがインストールされていればWindowsのコマンドプロンプト上でも同様のコマンドが実行できると思われます。
#Docker Composeで複数コンテナを作成
##1. 作業用ディレクトリ作成
Dockerfileとdocker-compose.ymlを使用して、複数のDockerコンテナによるDjangoの開発環境を作成します。
ローカルマシン上に任意の作業用ディレクトリを作成し、さらにその中にDockerfile
、requirements.txt
、docker-compose.yml
という名前のファイルと、任意の名前のディレクトリを作成しておきます(ここでは_src_とします)。
Dockerfile
docker-compose.yml
requirements.txt
src/
##2. 設定ファイルの編集
Dockerfileの内容を下記の通り編集します。
FROM python:3.8.3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
requirements.txtの内容を下記の通り編集します。
django
pyyaml
docker-compose.ymlの内容を下記の通り編集します。
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./src:/code
ports:
- "8000:8000"
Dockerfileとrequirements.txtについては以前の記事で解説しているため割愛します。
docker-compose.yml
には、Webサーバー、データベース、メールサーバーなどの_サービス_を定義します。
ここでは、_web_という名前を付けたサービスのみを定義しています。
docker-compose
コマンドでコンテナを起動する場合、ここで定義されたサービスごとにコンテナが起動します。
##3. コンテナとDjangoプロジェクトの作成
docker-compose run
コマンドを、Dockerfileなどが存在するディレクトリ配下で実行します。
run
の後ろにサービス名の_web_を指定することで、webサービス上のdjango-admin startproject
コマンドを実行することになります。
$ docker-compose run web django-admin.py startproject django_prj .
docker-compose.yml
内のwebサービスに記述しているbuild: .
により、コンテナが作成されていない場合はこのタイミングで自動的にイメージのビルドからコンテナの作成までが行われます。
Docker Desktopのダッシュボードウィンドウ上ではコンテナが作成されたことが確認できます。
正常にDjangoプロジェクトが作成された場合、_src_ディレクトリ配下にプロジェクトの雛形のファイルが作成されます。
db.sqlite3
django_prj
manage.py
##4. コンテナの起動
docker-compose up
コマンドを、Dockerfileなどが存在するディレクトリ配下で実行します。
$ docker-compose up
Docker Desktopのダッシュボードウィンドウ上ではコンテナが起動したことが確認できます。
確認のため、ブラウザでhttp://localhost:8000/
にアクセスします。
以降はDjangoの公式ドキュメントや市販の参考書等を読み進めて、コマンドの指定があった場合はコマンドの前にdocker-compose run [webサービス名]
を付けることで、Dockerコンテナ上のDjangoに対して各種操作が実行されるようになります。
#所感
Dockerと同じく、Docker ComposeとDjangoの開発環境構築の情報もまた大量にヒットしたのですが、本番環境を見据えたオーバースペックな設定のエントリーしか見当たらなかったため、自分であとで見返す用に本記事を作成しました。
なお、身も蓋もないですが、Dockerの公式ドキュメントで解説しているDjangoコンテナの作成方法が一番分かり易い
ので、是非そちらを確認して下さい。
ドキュメント日本語化サイトにも当該ページの翻訳が存在するのですが、設定内容が本家と差異があることがあったため、英語が読めない人は設定内容は本家を参照し、解説は日本語訳ドキュメントを確認すると良いかと思います。
#参考