この記事ではDjangoプロジェクトをDocker上で動かすための手順を紹介します。
作業の流れは以下のとおりです。
[list class=”ol-circle li-accentbdr acc-bc-before”]
- Djangoプロジェクトを作成して動かす
- Dockerfileを作成する
- buildコマンドを実行する
- docker-compose.ymlファイルを作成する
- docker-compose upでDockerコンテナを起動する
[/list]
順番に作業をみていきましょう。
Djangoプロジェクトを作成する
Django用のディレクトリを作り、移動します。
移動先でdjangoをインストールし、仮想環境を有効化します。
% mkdir hello; cd hello
% pipenv install django==3.0.1
% pipenv shell
Djangoプロジェクトを作り、マイグレーションを行います。
runserverコマンドでサーバーを起動すると、Djangoのウェルカム画面が開きます。
% django-admin startproject hello_project .
% python manage.py migrate
% python manage.py runserver
Djangoのプロジェクトの中にDjangoアプリケーションを作ります。
Djangoアプリケーションはstartappコマンドで作れます。
% python manage.py startapp pages
次にDjangoプロジェクトのsettings.pyを編集し、作成したDjangoアプリケーションをインストールします。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('pages.urls')),
]
Djangoアプリケーションのviews.pyを編集します。
from django.http import HttpResponse
def home_page_view(request):
return HttpResponse('Hello, World!')
次にDjangoアプリケーション以下にurls.pyファイルを作り、以下のように書きます。
from django.urls import path
from .views import home_page_view
urlpatterns = [
path('', home_page_view, name='home')
]
ここまでやってから、% exit
コマンドでPythonの仮想環境を抜けます。
Docker上でDjangoを動かす
Dockerfileを作成します。
% touch dockerfile
Dockerfileには以下のように書きます。
FROM python:3.7
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system
COPY . /code/
Dockerfileを配置したディレクトリで、buildコマンドを実行します。
すると自動的にイメージがビルドされます。
docker build .
色々とログが出力されますが、うまくいっていれば最後に「Successfully built xxxxxx」と表示されるはずです。
Step 7/7 : COPY . /code/
---> b35389def0ca
Successfully built b35389def0ca
次にdocker-compose.ymlファイルを作成します。
% touch docker-compose.yml
docker-compose.ymlには次のようなコードを書きます。
version: '3.7'
services:
web:
build: .
command: python /code/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- 8000:8000
最後にDockerコンテナを起動します。
以下のコマンドを実行してください。
docker-compose up
起動に成功したら以下のようなコメントが表示されます。
Attaching to hello_web_1
web_1 | Watching for file changes with StatReloader
web_1 | Performing system checks...
web_1 |
web_1 | System check identified no issues (0 silenced).
web_1 | April 17, 2020 - 05:42:27
web_1 | Django version 3.0.1, using settings 'hello_project.settings'
web_1 | Starting development server at http://0.0.0.0:8000/
web_1 | Quit the server with CONTROL-C.
これでDjangoはDockerコンテナ上で動いています。
http://127.0.0.1:8000/
にアクセスすると、Djangoの画面が表示されます。