PythonのWebフレームワークを使って、アプリケーションを作成してみましょう。
今回は、Djangoアプリケーションのセットアップ手順を書こうと思います。
前提条件
Mac環境を想定して、説明します。
Python v3.7とDockerをPCにインストールしておいてください。
事前準備
terminal を立ち上げて、Desktop上に作業用フォルダを作成します。
1 |
mkdir ~/Desktop/django-lesson |
続いて、django-lessonフォルダの中に移動してください。
1 |
cd ~/Desktop/django-lesson |
以下のフォルダ・ファイルを作成してください。
1 2 3 4 5 |
mkdir app touch Dockerfile touch docker-compose.yml touch Makefile touch requirements.txt |
Dockerfile
Dockerfileには、アプリケーションの実行環境を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# ベースをpython3.7 FROM python:3.7-alpine # Dockerfile作成者情報 MAINTAINER kanagawa App Developer Ltd # __pycache__フォルダが作られないようにする ENV PYTHONDONTWRITEBYTECODE 1 # バッファされないようにする ENV PYTHONUNBUFFERED 1 # requirementsファイルをDockerコンテナにコピー COPY ./requirements.txt /requirements.txt # postgresqlの依存モジュール群をインストール RUN apk add --update --no-cache postgresql-client jpeg-dev RUN apk add --update --no-cache --virtual .tmp-build-deps \ gcc libc-dev linux-headers postgresql-dev musl-dev zlib zlib-dev RUN pip install -r /requirements.txt RUN apk del .tmp-build-deps # アプリケーションコード保存先を作成 RUN mkdir /app # ワークディレクトリをappに指定 WORKDIR /app # ローカルのソースコードをappにコピー COPY ./app /app # staticファイルの保存先を作成 RUN mkdir -p /vol/web/media RUN mkdir -p /vol/web/static # User作成 RUN adduser -D user # User権限付与 RUN chown -R user:user /vol/ RUN chmod -R 755 /vol/web # userを指定 USER user |
docker-compose.yml
docker-compose.ymlは、複数コンテナの管理を行う為のファイルです。
docker と postgresql コンテナの記述を書きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
version: "3" services: # app(docker)サービス app: build: context: . ports: - "8000:8000" volumes: - ./app:/app command: > sh -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000" environment: - DB_HOST=db - DB_NAME=app - DB_USER=postgres - DB_PASS=supersecretpassword depends_on: - db # db(postgresサービス) db: image: postgres:10-alpine environment: - POSTGRES_DB=app - POSTGRES_USER=postgres - POSTGRES_PASSWORD=supersecretpassword volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data: |
Makefile
Makefile には、docker 及び Django の長ったらしいコマンドをより短いコマンドで実行するための記述をします。
コマンドにエイリアスをつけるイメージですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
.PHONY: app test migrate pro admin django app: docker-compose run --rm app sh -c "python manage.py startapp ${app}" test: docker-compose run --rm app sh -c "pytest -l -v -s ${app} && flake8" migrate: docker-compose run --rm app sh -c "python manage.py makemigrations" docker-compose run --rm app sh -c "python manage.py migrate" pro: docker-compose run --rm app sh -c "django-admin startproject ${pro} ." admin: docker-compose run --rm app sh -c "python manage.py createsuperuser" django: docker-compose run --rm app sh -c "django-admin startproject app ." |
Makefileは必須ではありませんが、作成しておくと便利ですよ^^
あと、docker-compose ~ の先頭は、「tab」でスペースを取っていないと実行エラーになるので、気をつけてください。
requirements.txt
requirements.txt には、Webアプリケーションを動かすためのモジュールを書きます。このファイルに記述したモジュールは、Dockerコンテナ起動時にインストールされます。
1 2 3 4 5 6 7 |
Django>=2.1.3,<2.2.0 djangorestframework>=3.9.0,<3.10.0 flake8>=3.6.0,<3.7.0 psycopg2>=2.7.5,<2.8.0 Pillow>=5.3.0,<5.4.0 pytest-django==3.5.1 django-cors-headers==2.4.0 |
プロジェクト構成
ここまでのプロジェクト構成は以下のようになります。
1 2 3 4 5 6 7 8 |
tree django-lesson ├── Dockerfile ├── Makefile ├── app ├── docker-compose.yml └── requirements.txt |
Django プロジェクトの作成
Django プロジェクトを作成してみましょう。
django-lesson 内にterminalで移動していることを確認後、以下の操作を行ってください。
1 2 3 4 5 6 7 8 |
pwd /Users/<user>/Desktop/django-lesson # ビルドを行う docker-compose build # django プロジェクトを作成(Makefileを使用) make django |
make コマンドは、Makefileの記述通りにコマンドを実行してくれます。
ここでは、Djangoの「プロジェクト」を作成するコマンドを実行しました。
tree コマンドで、Django プロジェクトが作成されたか確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
tree django-lesson ├── Dockerfile ├── Makefile ├── app │ ├── app │ │ ├── __init__.py │ │ ├── settings.py │ │ ├── urls.py │ │ └── wsgi.py │ └── manage.py ├── docker-compose.yml └── requirements.txt |
プロジェクトを起動してみましょう。
1 2 |
# コンテナ立ち上げ docker-compose up |
localhost:8000 をブラウザ上のURL欄に打ち込むとDjangoのスタートアップ画面が表示されるはずです。

おわりに
次回は、django のアプリケーションを作成してみましょう。^^
コメントを残す
コメントを投稿するにはログインしてください。