DockerでDjangoを動かしてみた
色々エラーが出て内容的にこのまま進めても埒が明かなさそうだとデータを何度か消す羽目にはなりましたが結果的に動きました。
今後のためにまとめておこうと思います。
まず一番役に立った滅びの呪文から
docker-compose down --rmi all --volumes
これはdocker-composeで作られた、コンテナ、イメージ、ボリュームそしてネットワーク、全てを一括消去するコマンドです。
私は初学者でなにもわからないぺーぺーなのでエラーを起こして一通り調べて内容的にデータを消して一つ一つ動作を確認した方が早いなと思ったときに使いました。
使わなくて済むことをお祈りいたします(笑)
DockerでDjangoの開発環境を構築する
では作っていきましょう。ディレクトリはmyapp.comにしておきます。
dockerでDjangoの環境を作るには
●requirements.txt
●Dockerfile
●docker-compose.yml
の3つのファイルが必要です。
.
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
まずはこの構成で作っていきたいと思います。
●requirements.txt作成
PythonのイメージにDjangoとPostgreSQLのライブラリをインストールするため作成します。使用したいパッケージがある場合はここに記述します。
Django>=2.2
psycopg2>=2.7,<3.0
●Dockerfile作成
Dockerfileは、Docker Hubからイメージを取得して、それを元に新たなイメージを作るまでの流れを1つのファイルに記述しておくことができます。
今回は基本的な内容だけ記述しておきます。
#pythonイメージを指定 バージョンは使いたいものに合わせる
FROM python:3.8
# 環境変数を設定する。バッファーを無効にする設定らしい。
ENV PYTHONUNBUFFERED 1
# コンテナ内にcodeディレクトリを作り、そこをワークディレクトリとする
RUN mkdir /code
WORKDIR /code
# ホストPCにあるrequirements.txtをコンテナ内のcodeディレクトリにコピーする
# コピーしたrequirements.txtを使ってパッケージをインストールする
ADD requirements.txt /code/
RUN pip install -r requirements.txt
# ホストPCの各種ファイルをcodeディレクトリにコピーする
ADD . /code/
●docker-compose.yml作成
Docker Composeの要となるファイルです。どのようなコンテナのアプリ構成にするのかをこのファイルで設定します。
今回はPostgresDBを使う予定なのでそのことも記述します。
version: '3'
services:
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres
ports:
- "5432"
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
Django プロジェクトの生成
プロジェクトを立ち上げましょう。
コマンドでプロジェクト・ディレクトリに移動します。
docker-compose run --rm web django-admin startproject project .
docker-compose runコマンドでコンテナを起動し、django-admin startproject project .コマンドを実行します。
runコマンドには--rmオプションをつけていますので、コマンドが実行されるとコンテナはすぐ削除されます。--rmオプションをつけ忘れると、コマンドを実行するたびにコンテナが作られて溜まっていくことになります。
Creating network "myappcom_default" with the default driver
Creating myappcom_db_1 ... done
.
.
.
.
.
Successfully built ~~
Successfully tagged myappcom_web:latest
と表示されれば成功です。
今ディレクトリの中は
.
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── project
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
となっているはずです。PostgresDBをつかうのでsettings.pyのdbのところをを変更します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
ここで大事なのが、HOSTで指定しているdbという値。これはdocker-compose.ymlで設定したPostgreSQLのサービス名と同じにする必要があります。通常、HOSTにはホスト名だったりIPアドレスを入れるのですが、docker-compose.ymlの設定にしたがって、いい感じに名前解決してくれます。
アプリ生成
アプリを作ります。
docker-compose run --rm web django-admin startapp app
docker-compose run --rm web python3 manage.py migrate
このコマンドでアプリを生成します。
docker-compose upでローカルサーバーを起動する
起動させます。初めなのでビルドもします。
docker-compose up --build
ビルドが必要ない場合docker-compose upで起動します。
eb_1 | System check identified no issues (0 silenced).
web_1 | July 02, 2020 - 12:37:43
web_1 | Django version 3.0.8, using settings 'project.settings'
web_1 | Starting development server at http://0.0.0.0:8000/
web_1 | Quit the server with CONTROL-C.
web_1 | [02/Jul/2020 12:38:01] "GET / HTTP/1.1" 200 16351
web_1 | Not Found: /favicon.ico
web_1 | [02/Jul/2020 12:38:01] "GET /favicon.ico HTTP/1.1" 404 1973
そしてhttp://127.0.0.1:8000/にアクセスするとDjangoが起動しているはずです。
Djangoアプリ制作の際よく使うコマンドをまとめておきます
makemigrations:
docker-compose run --rm web python3 manage.py makemigrations
migrate:
docker-compose run --rm web python3 manage.py migrate
createsuperuser:
docker-compose run --rm web python3 manage.py createsuperuser
参考にしたサイト
http://docs.docker.jp/compose/django.htm
この記事が気に入ったらサポートをしてみませんか?