LoginSignup
4

More than 3 years have passed since last update.

シンプルなDocker Compose+Django開発環境構築

Posted at

概要

以前、以下の記事にて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の開発環境を作成します。

ローカルマシン上に任意の作業用ディレクトリを作成し、さらにその中にDockerfilerequirements.txtdocker-compose.ymlという名前のファイルと、任意の名前のディレクトリを作成しておきます(ここではsrcとします)。

Dockerfile
docker-compose.yml
requirements.txt
src/

2. 設定ファイルの編集

Dockerfileの内容を下記の通り編集します。

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の内容を下記の通り編集します。

requirements.txt
django
pyyaml

docker-compose.ymlの内容を下記の通り編集します。

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_s_test_dashboard.png
正常にDjangoプロジェクトが作成された場合、srcディレクトリ配下にプロジェクトの雛形のファイルが作成されます。

db.sqlite3
django_prj
manage.py

4. コンテナの起動

docker-compose upコマンドを、Dockerfileなどが存在するディレクトリ配下で実行します。

$ docker-compose up

Docker Desktopのダッシュボードウィンドウ上ではコンテナが起動したことが確認できます。
django_s_test_dashboard.png
確認のため、ブラウザでhttp://localhost:8000/にアクセスします。

django_s_test_rocket.png
ロケットの画像があるホームページが表示されたら、正常にDjangoのプロジェクトが動作しています。
お疲れ様でした:D┼─┤

以降はDjangoの公式ドキュメントや市販の参考書等を読み進めて、コマンドの指定があった場合はコマンドの前にdocker-compose run [webサービス名]を付けることで、Dockerコンテナ上のDjangoに対して各種操作が実行されるようになります。

所感

Dockerと同じく、Docker ComposeとDjangoの開発環境構築の情報もまた大量にヒットしたのですが、本番環境を見据えたオーバースペックな設定のエントリーしか見当たらなかったため、自分であとで見返す用に本記事を作成しました。

なお、身も蓋もないですが、Dockerの公式ドキュメントで解説しているDjangoコンテナの作成方法が一番分かり易いので、是非そちらを確認して下さい。

ドキュメント日本語化サイトにも当該ページの翻訳が存在するのですが、設定内容が本家と差異があることがあったため、英語が読めない人は設定内容は本家を参照し、解説は日本語訳ドキュメントを確認すると良いかと思います。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4