見出し画像

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が起動しているはずです。

画像1


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



この記事が気に入ったらサポートをしてみませんか?