Docker Django3.0 環境構築

目的:Dockerを使って,Djangoの環境構築をしたい

作業手順

1-requirements.txtを作る

2-Dockerfileを作る

3-docker-compose.ymlを作る

4-コンテナを起動してstartproject, startappする

5-docker-compose up でローカルサーバーを起動する

1-requirements.txtを作成する

requirements.txtとは?

まずPip(ピップ)とはPythonのパッケージ(ライブラリ)を管理するパッケージ
Python インストール時に自動でインストールされる。
通常このようにしてパッケージをインストールする。

python3 pip install Pillow(画像を扱うパッケージ)

のようにライブラリをインストールする。 ところがちょっとしたアプリ開発でも10-20くらいのパッケージを利用する。

そこでrequirements.txt に記載して一括インストールする。 公式サイトはこちら

pip.pypa.io

この場合はこのようにコマンドをうつ

python3 pip install -r requirements.txt
(-r オプションは再帰的なの意味)

pip freeze で現在のパッケージを出力できる 基本これを requirements.txt に記載しておけばよい

$ pip freeze

asn1crypto==0.24.0
astroid==1.6.6
awscli==1.18.3
backports.functools-lru-cache==1.6.1
botocore==1.15.3
CodeIntel==0.9.3
colorama==0.4.3
configparser==4.0.2
cryptography==2.1.4
docutils==0.15.2
enum34==1.1.6
futures==3.3.0
idna==2.6
ikpdb==1.2.3
Inflector==2.0.12
ipaddress==1.0.17
isort==4.3.21
jedi==0.11.1
jmespath==0.9.4
keyring==10.6.0
keyrings.alt==3.0
lazy-object-proxy==1.4.3
mccabe==0.6.1
parso==0.1.1
pbr==5.4.4
pyasn1==0.4.8
pycrypto==2.6.1
pygobject==3.26.1
pylint==1.9.5
pylint-django==0.8.0

しかしここにはDjangoが含まれていない。理由を調査する

Django install 公式サイト

docs.djangoproject.com

ここにはこのような記載がある。

install pip 
最も簡単なのは、スタンドアロンのpipインストーラーを使用することです。 ディストリビューションにすでにpipがインストールされている場合、古くなっている場合は更新する必要があるかもしれません。 古くなっている場合は、インストールが機能しないのでわかります。

virtualenvとvirtualenvwrapperを見てください。 これらのツールは、システム全体にパッケージをインストールするよりも実用的な分離されたPython環境を提供します。 また、管理者権限なしでパッケージをインストールすることもできます。 貢献するチュートリアルでは、virtualenvを作成する方法について説明します。 仮想環境を作成してアクティブ化したら、次のコマンドを入力します。

つまり仮想環境に入れたほうが良いことがわかる。 自分のPCに入れてしまうと、通常使うときもその影響を受ける。 必ずvirtualenvとvirtualenvwrapperなどの,仮想環境に入れること。

ポイント Pythonの仮想環境構築には3つある。

pyenv Pythonがデフォルトで搭載している仮想環境

virtualenv 仮想環境を構築する

virtualenvwrapper 文字通りvirtualenvの拡張セット 

拡張機能には、仮想環境を作成および削除したり、開発ワークフローを管理したりするためのラッパーが含まれているため、依存関係に競合を生じさせることなく、一度に複数のプロジェクトで作業することが容易になります。 公式サイト

virtualenvwrapper.readthedocs.io

このように環境をつくる

//まずpipでvirtualenvwrapperをインストールする
$ pip install virtualenvwrapper
...

//パスを通す
$ export WORKON_HOME=~/Envs

//作業ディレクトリを作成
$ mkdir -p $WORKON_HOME

//仮想環境を起動
$ source /usr/local/bin/virtualenvwrapper.sh

//env1という仮想環境を構築する
$ mkvirtualenv env1
Installing
setuptools..........................................
....................................................
....................................................
...............................done.
virtualenvwrapper.user_scripts Creating /Users/dhellmann/Envs/env1/bin/predeactivate
virtualenvwrapper.user_scripts Creating /Users/dhellmann/Envs/env1/bin/postdeactivate
virtualenvwrapper.user_scripts Creating /Users/dhellmann/Envs/env1/bin/preactivate
virtualenvwrapper.user_scripts Creating /Users/dhellmann/Envs/env1/bin/postactivate  New python executable in env1/bin/python
(env1)$ ls $WORKON_HOME
env1 hook.log

これで、仮想環境を構築してDjango がインストールできる

//仮想環境を構築すると(env1)と環境がカッコで表示される
//Djangoの公式サイトにはpython のモジュールとしてインストールすることが勧められている
(env1)$ python -m pip install Django


Downloading/unpacking django
  Downloading Django-1.1.1.tar.gz (5.6Mb): 5.6Mb downloaded
  Running setup.py egg_info for package django
Installing collected packages: django
  Running setup.py install for django
    changing mode of build/scripts-2.6/django-admin.py from 644 to 755
    changing mode of /Users/dhellmann/Envs/env1/bin/django-admin.py to 755
Successfully installed django

Django公式サイト

docs.djangoproject.com

2-以上を踏まえてDockerfileを作成する

公式サイト

ここからdjangoをpullしてくる hub.docker.com ここには記載方法があります。解説します。

# Docker Hubにあるpythonイメージをベースにする
#下記参照
FROM python:3.6-alpine3.10

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        postgresql-client \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . .

EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

参照:Python: Docker ここでpython3.6に決定 ローカルPCとそろえたい

hub.docker.com

今日は、ここまで、