こんにちは。はじめまして。リューさん(@ryu_programs)です。この記事では以下のような人に向けて、Dockerを利用したDjangoの開発環境構築について説明していきます。
- Djangoの学習をしたいけど、どうすればいいのか分からない
- Djangoの環境構築につまづいている
- 紹介編を見て、Djangoを学習しようと思った
また、Djangoの紹介記事やPythonの勉強方法も書いています。もしまだ読んでいない方がいれば、読んでみてください。
また、続編であるWebアプリ作成編も公開しました。良ければ読んでみてください。リンクは最後の方にも載せておきます。
なぜDockerを選んだか
まず、Pythonという言語はモジュールをimportすることによって、機械学習やWebクローリング、Django開発など様々なことを行うことができます。また、所謂本家PythonであるPython3だけではなく、科学計算に強いAnacondaや、もしかするとやむにやまれぬ事情があってPython2をいまだに使われている人もいるかもしれません。
こう聞くとPythonを使ってそのまま開発していたら、ライブラリの数や環境がめちゃくちゃなことになると思いませんか?そこで登場するのが仮想マシンやDockerです。仮想マシンとDockerも仕組みが違うのですが、今回は単に僕の好きなツールであり、軽量かつ高速であるDockerを採用しました。
最初にすべきこと
まず、こちらの公式ドキュメント(https://docs.docker.com/toolbox/toolbox_install_windows/)を参考にしながら、Docker Toolboxをインストールしましょう。ちなみに、僕はWindows10 homeだったのでDocker Toolboxをインストールしたのですが、Macの場合はDocker for Macであったり、Windows10 ProであればDocker for Windowsがあるので、ご使用のPCによって変えましょう。
また、Docker Toolboxの場合はVirtualBoxを一度アンインストールしてからインストールすると良いかもしれません。Docker Toolboxをインストールすると勝手にVirtualBoxまで付いてくるので、既に存在しているとエラーが出る可能性があります。僕がインストールした時にはそこでエラーが出て躓きました。
詳しいインストール方法を紹介している記事はすでにたくさんありますし、OSによってもインストール方法が違う可能性があるのでこの記事では省略します。Docker Toolboxのインストールの際、参考になった記事を紹介しておきます。
Djangoの環境構築
Dockerのインストールが終わると、次にDjangoの開発環境を整えていきます。この際、もしPycharmやVScodeなどのエディタをインストールしていない場合、しておくことをお勧めします。ちなみに僕はPythonを使うならPycharmが好きです。
1.作業ディレクトリの作成
Djangoプロジェクトが格納されるディレクトリを適当な場所に作成します。ただし、この時は作成するだけでそのディレクトリは空にしておきましょう。そして、Docker Toolboxを起動し、cdコマンドでそのディレクトリに移動します。
この後いくつかのファイルを作成しますが、僕はviコマンドを利用して作成しました。
2.Dockerfileの作成
次に、Dockerfileをそのディレクトリの中に作成します。Dockerfileは、そこに記述された内容に基づいてDockerイメージを作成します。Dockerfileについて、より詳しく知りたい方は以下の記事を読んでみてください。
Dockefileには以下のように記述します。
From python:3.7
ENV PYTHONBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt ./
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /code
例えば、
RUN mkdir /code
というコードは、codeディレクトリをmkdirコマンドで作成しています。このようにRUNやADDなどのコマンドと、それに対応する命令を記述しています。
3.requirements.txtの作成
次に、requirements.txtを記述していきます。requirements.txtは、pipを使って指定のパッケージを指定のバージョンでインストールできる設定ファイルです。先ほど作成したディレクトリに、Dockerfileと同様にrequirement.txtを作成して以下のように記述します。
Django
psycopg2
これは、Djangoとpsycopg2をインストールするという意味です。psycopg2の後に改行しないように気をつけてください。また、これは注意点なのですが、このrequirement.txtやdockerfileを更新した場合には、以下のように実行しなければ反映されません。
$ docker-compose up --build -d
4.docker-compose.ymlの作成
こちらも先ほどと同じく、作成したディレクトリにdocker-compose.ymlというファイルを作成して記述していきます。このファイルを作成することで、管理が非常に楽になります。内容は以下の通りです。8000ポートでアクセスできるようにしています。
version: '3'
services:
db:
image: postgres
volumes:
- poll_db_data:/var/lib/postgresql/data:Z
ports:
- "5432"
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=mypassword
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
volumes:
poll_db_data:
external: true
Dockerはコンテナを削除してしまうと、データベースの内容もすべて消えてしまうので、”poll_db_data”というvolumeを作成し、このようにZオプションをつけたり、external: trueを指定したりしています。
5.プロジェクトの作成
$ docker-compose run web django-admin.py startproject [プロジェクト名] .
このようなコマンドを実行することで、manage.pyの他プロジェクトディレクトリが作成されます。プロジェクト名は基本何でも良いです。また、docker-composeコマンドはdocker-compose.ymlが存在するディレクトリの中で実行してください。
次に、作成されたプロジェクトディレクトリの中のsettings.pyを開き、DATABASE=・・・のところを以下のように記述します。USERやPASSWORDは適当です。好きなものを使ってください。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'mypassword',
'HOST': 'db',
'PORT': 5432,
}
}
また、同じくsetting.pyのALLOWED_HOSTの部分を以下のように変更します。
ALLOWED_HOSTS = ["*"]
その後、以下のコマンドでDBのマイグレーションを行います。
$ docker-compose run web ./manage.py makemigrations
$ docker-compose run web ./manage.py migrate
さらに、スーパーユーザーも作成してしまいます。以下のコマンドを実行すると、ユーザ名やメールアドレス、パスワード等の入力を求められると思うので、入力してください。Djangoの管理ページにアクセスするために必要です。
$ docker-compose run web ./manage.py createsuperuser
6.コンテナの作成・起動
$ docker-compose up -d
このコマンドを実行してコンテナを作成・起動しましょう。-dオプションをつけることで、コンテナ起動後もコマンドを実行できます。
そして、次のコマンドでdefaultマシンに割り振られたipアドレスを取得します。僕の場合はdefaultマシンをそのまま使っていますが、別のマシンを使っている方はそのマシンについて調べてください。何もしていなければdefaultマシンを使っているはずです。
$ docker-machine ip default
7.アクセス
chrome等で、http://[6で調べたIPアドレス]:8000でアクセスしてみてください。(例:http://0.0.0.0:8000)この8000はdocker-compose.ymlで指定した値です。
以下のような画面になれば正しく環境構築ができています。正確には、右上のDjangoは3.0などになっているはずです。
おわりに
以上で環境構築編は終わりです。開発編に続きます。Pythonの勉強方法やDjangoの紹介、基本情報技術者試験の勉強方法なども分かりやすく書いているので、良ければ読んでみてください。
開発編も公開しました!
また、よろしければ僕のTwitter(@ryu_programs)のフォロー等もお願いします。