Django

DockerでDjangoの環境構築

この記事では、DockerでDjangoの環境構築をします。

本番環境の構成だと、

webサーバー + DBサーバー + appサーバー

の構成が基本ですが、この記事は初学者向けに書いているので、とりあえずwebサーバーに関しては、Djangoのビルドインサーバーを用います。

以下の記事では、webサーバーの構築も行なっているのでぜひ!
【Docker】 Laravelの環境構築をやってみた

手順は以下の通りです。

・前提:プロジェクトは作成しておく
・Django(Python)でアプリケーションサーバーを立てる
・MySQLでDBサーバーを立てる

準備

ファイルの作成

まずは、準備として以下の構造でディレクトリを作成しましょう。

dockerDjangoProject
├── docker
│   └── app
│       ├── Dockerfile
│       └── requirement.txt
└── docker-compose.yml

Dockerfile

PythonとDjangoをインストールするイメージを作成します。

requirement.txt

ここにインストールするPythonのライブラリを記述する。
今回は、Djangoとmysqlclientなどをインストールします。

docker-compose.yml

コンテナを作成するファイルです。
このファイルを実行することで、コンテナを作成します。

アプリケーションサーバーを定義

requirement.txt

このrequirement.txtには、インストールするPythonのライブラリを記述します。
以下のように記述しましょう。

Django==2.0
mysqlclient==1.4.5
pytz==2019.3

Dockerfile

FROM python:3.7
ENV PYTHONBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirement.txt /code/
RUN pip3 install -r requirement.txt
COPY . /code

docker-compose.yml

version: "3"
services:
    app:
        container_name: django.app
        build: ./docker/app
        image: django
        command: python3 manage.py runserver 0.0.0.0:8000
        working_dir: /code
        volumes:
            - ./code
        ports:
            - "8000:8000"

container_name: django.app
→コンテナ名を指定しています。

build: ./docker/app
→ビルドするDockerfileの場所を指定指定しています。

image: django
→通常は、コンテナの元となるイメージを指定しますが、buildがある場合は、イメージ名を付与する役割を担います。

command: python3 manage.py runserver 0.0.0.0:8000
→コンテナ起動時に実行するコマンドを指定します。今回は、webサーバーを立てていないので、コンテナ内にビルドインサーバーを自分で立ち上げます。

データベースサーバーを定義

docker-compose.yml

version: "3"
services:
    app:
        container_name: django.app
        build: ./docker/app
        image: django
        command: python3 manage.py runserver 0.0.0.0:8000
        working_dir: /code
        volumes:
            - .:/code
        ports:
            - "8000:8000"
        depends_on: # 追加
            - mysql

    # 以下を追加
    mysql:
        container_name: django.mysql
        image: mysql:5.6
        environment:
            MYSQL_DATABASE: djangoApp
            MYSQL_USER: user
            MYSQL_PASSWORD: root
            MYSQL_ROOT_PASSWORD: root
        ports:
            - "3306:3306"

コンテナ群の構築の流れ

Djangoプロジェクトの作成

以下の記事を参考に、コンテナ群の作成の前に作成しておく。

Djangoプロジェクトの最初にやること

データベースの設定を変更

‘HOST’には、サービス名を記述することで呼び出せる。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'djangoApp',
        'USER': 'user',
        'PASSWORD': 'root',
        'HOST': 'mysql',
        'PORT': 3306
    }
}

コンテナ群を作成・起動

$ docker-compose up -d

コンテナ群を停止

$ docker-compose stop

Tips

よく使うコマンド

コンテナ群の作成

$ docker-compose create

イメージ・コンテナ群・ネットワーク全て停止・削除

$ docker-compose down –rm all

コンテナ群の再起動

$ docker-compose restart

エラー

Error: That port is already in use.

コンテナを立ち上げてもlocalhost:8000にアクセスできない場合は、このエラーが起きている可能性がある。
以下のコマンドでKILLする。

実際にコンテナ内でコマンドを実行してみると気づける。

$ kill lsof -ti tcp:8000

COMMENT

メールアドレスが公開されることはありません。