
フォルダ構成
最終的なフォルダ構成はこんな感じになってます。余計なのは省きます。
django_docker
├── docker-compose.yml
├── python
│ ├── Dockerfile
│ └── requirements.txt
└── testDockerDjango
├── manage.py
└── testDockerDjango
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
準備
まずは準備。フォルダとかを作っていく。
mkdir django_docker && cd django_docker
touch docker-compose.yml
mkdir python && cd python
とりあえずこんな感じ。次はpythonフォルダの中で作業していきます。
Dockerfile
先ほど作ったpythonフォルダの中にDockerfileを作ります。内容はこんな感じ。
# image はpython3.6を使う。
FROM python:3.6
# この記述はよくわからん。バファを無効にするためらしい。
ENV PYTHONUNBUFFERED 1
# コンテナ内にcodeフォルダを作成
RUN mkdir /code
# これから先は/code内で作業を行うよー
WORKDIR /code
# この後作るrequirements.txtをcodeの下にコピー
COPY requirements.txt /code/
# pip で requirements.txt 内に記述してあるライブラリたちをインストール
RUN pip install -r requirements.txt
requirements.txt
ここに必要なライブラリを記述しておくことで一遍にインストールしてくれる。今回はDjangoとDjangoでPostgreSQLを使うために必要なライブラリを記述しておく。
Django>=2.2
psycopg2-binary>=2.8
docker-compose.yml
次にdocker-compose.ymlの記述をしていく。ファイルの作成場所はdjango_dockerの下。
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: ./python
command: python testDockerDjango/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
サービスはdbとwebの2つ。
まずdbの方はimageの指定と環境変数の設定を行なっている。
webの方は下記のことを記述している。これらのことはdocker run でコンテナを立ち上げるときにオプションでも指定できるのだが、いちいちコマンド書いてられないのでdocker-composeに一度まとめたらもう打たなくて良いよみたいなのり。
- 先ほど作ったDockerfileからimageをbuildするように指定
- run されたときに実行するコマンドの指定
- docker-compose.ymlと同じところにあるファイルやフォルダたちを、コンテナ内の/code以下にうつす(厳密にいうと違う。うまく表現できない。すみません。)
- ホスト(自分のPC)とコンテナを繋ぐポートを指定
- dbが立ち上がってからwebを立ち上げるよ
Djangoプロジェクト作成
django_docker内でDjangoプロジェクトを作成します。
django-admin startproject testDockerDjango
settings.pyをposgres用に記述し直す。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
動作確認
docker-composeを起動してブラウザで動作確認をしてみます!
docker-compose up -d
これでlocalhost:8000にアクセスしてDjangoのスタートページが見れたら成功です!!ガンガン開発をしていきましょう!!
参考
おまけ:docker-compose downした後もデータを残しておく
docker-compose downコマンドを実行することで、docker-composeで動いていたコンテナを削除することができる。しかしこのコマンドを使ってコンテナを消してしまうと、もう一度upし直したときに前回作ったデータ等が消えてしまう。これをさせるためにはdocker-compose.ymlファイルに少しだけ記述しておく必要がある。
version: '3'
volumes:
db-data:
services:
web:
build: .
ports:
- '3000:3000'
volumes:
- '.:/product-register'
environment:
- 'DATABASE_PASSWORD=postgres'
tty: true
stdin_open: true
depends_on:
- db
links:
- db
db:
image: postgres
volumes:
- 'db-data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'
- 'POSTGRES_HOST_AUTH_METHOD=trust'
上から3行目のvolumeのところと、dbのvolumeのとことの2箇所を記述することでdocker-compose downをしてコンテナを一度消し、もう一度docker-compose upでコンテナを立ち上げた時でも前回のデータがそのまま残っている。「db-data」のところはそれぞれ一緒なら名前はなでも良い。
コメント