この記事では、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プロジェクトの作成
以下の記事を参考に、コンテナ群の作成の前に作成しておく。
データベースの設定を変更
‘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